Notas de 2026-09-20. Console R36S (Rockchip RK3326) com imagem ArkOS.
Leitura/escrita do cartão feita no Dell XPS 9300 (EndeavourOS), pelo slot microSD
interno do notebook (mmc0 → /dev/mmcblk0), não pelo leitor USB.
O R36S não vira pendrive quando você liga o cabo USB no PC. A porta USB-C dele é só carga/OTG-host; ArkOS não tem USB gadget mass-storage. Para mexer nos arquivos: tirar o cartão, ou usar rede (SSH/Samba).
| Campo | Valor |
|---|---|
| Dispositivo | /dev/mmcblk0 |
| Tamanho | 16.357.785.600 bytes = 15,23 GiB = 31.948.800 setores |
| Nome (CID) | asdfg |
| Manufacturer ID | 0x000005 |
| Serial | 0x00000456 |
| Fabricação | 06/2025 |
asdfg no CID é digitação aleatória
(genuínos trazem SD16G, SC16G, USD00) e manfid 0x05 não corresponde a
SanDisk (0x03), Samsung (0x1b), Kioxia (0x02) nem Transcend (0x74).
Leituras em 0 / 4096 / 8192 / 15000 MiB deram OK, sem nenhum erro de I/O no
dmesg — isso descarta setores mortos, mas não prova capacidade real. Cartão
falso costuma ler sem erro devolvendo lixo ou dados espelhados.
Para provar (
sudo pacman -S f3
sudo f3probe --destructive --time-ops /dev/mmcblk0GPT válida e íntegra: primária no setor 1, backup no último setor
(0x3cefffe00 = 16357785600 − 512). AlternateLBA = 31.948.799, confere com o
tamanho real.
| # | Nome | FS | Label | LBA início..fim | Offset (bytes) | Tamanho |
|---|---|---|---|---|---|---|
| 1 | boot |
FAT16 | BOOT |
32.768 .. 147.455 | 16777216 |
56 MiB |
| 2 | root |
ext4 | root |
147.456 .. 13.983.743 | 75497472 |
6,60 GiB |
| 3 | primary |
exFAT | EASYROMS |
13.983.744 .. 31.948.765 | 7159676928 |
8,57 GiB |
Tamanhos para --sizelimit:
boot 58720256
root 7084179456
roms 9198091264
UUIDs: boot 8B25-5227 · root e139ce78-9841-40fe-8823-96a304a09859 · roms 5D68-21CA
Sintoma: lsblk mostra só mmcblk0, sem p1/p2/p3. fdisk -l e parted
dizem "rótulo de disco irreconhecível", mesmo com a GPT intacta.
Causa: a assinatura de boot no fim do setor 0 está errada.
offset 510-511: c3 5a ← está assim
55 aa ← deveria ser
O byte 446 é ff (deveria ser 00) e o tipo em 450 é 00 em vez de ee.
Sem 55 aa, kernel e libblkid rejeitam o MBR protetivo e nem olham a GPT.
O wipefs enxerga a GPT porque sonda assinaturas direto no disco.
Provável culpado: existia um System Volume Information datado de 27/02/2026
na partição de ROMs — diretório criado pelo Windows. Windows que encontra tabela de
partição desconhecida oferece "inicializar o disco", e uma inicialização parcial mexe
exatamente no setor 0.
Não afeta o console. O boot ROM da Rockchip não usa MBR (lê o IDB em offset fixo), por isso o R36S liga normalmente. Só atrapalha montar o cartão no PC.
Conserto (setor 0 já foi verificado estável em 3 leituras; MD5 a53ee5b…):
sudo dd if=~/r36s/arquivos/mbr-novo.bin of=/dev/mmcblk0 bs=512 count=1
sudo partprobe /dev/mmcblk0
lsblk /dev/mmcblk0 # devem aparecer p1, p2, p3Reverter:
sudo dd if=~/r36s/arquivos/setor0.bak of=/dev/mmcblk0 bs=512 count=1Só o setor 0 é tocado. A GPT (setor 1 e o último) não é afetada, e os dados começam no setor 32.768.
Sem p1/p2/p3, é preciso losetup com offset.
L=$(sudo losetup -o 7159676928 --sizelimit 9198091264 -f --show /dev/mmcblk0)
sudo mkdir -p /mnt/r36s-roms
sudo mount -t exfat -o rw "$L" /mnt/r36s-roms
# ... trabalhar ...
sync; sudo umount /mnt/r36s-roms; sudo losetup -d "$L"; syncL=$(sudo losetup -o 75497472 --sizelimit 7084179456 -f --show /dev/mmcblk0)
sudo e2fsck -fy "$L" # replay do journal, obrigatório
sudo mount -o rw "$L" /mnt/r36s-root
# ... trabalhar ...
sync; sudo umount /mnt/r36s-root; sudo losetup -d "$L"; syncL=$(sudo losetup -r -o 75497472 --sizelimit 7084179456 -f --show /dev/mmcblk0)
sudo mount -o ro,noload "$L" /mnt/r36s-root
noloadé obrigatório no modo somente-leitura. O ext4 se recusa a montarroquando o journal tem transações pendentes (desligamento sem shutdown), enoloadignora o journal. Sem ele: "não foi possível montar como somente-leitura".
Sempre sync antes de tirar o cartão. Verificar:
losetup -a # deve estar vazio
mount | grep -E 'mmcblk|loop' # deve estar vazio
grep Writeback: /proc/meminfo # deve ser 0 kBNAME="Ubuntu" VERSION="19.10 (Eoan Ermine)"
hostname: rg351mp
É ArkOS, mas a imagem é do Anbernic RG351MP, não do R36S. Comum: muitos R36S saem de fábrica com imagem de RG351MP reempacotada (mesmo SoC RK3326).
/etc/fstab (referencia mmcblk1 porque no console o cartão é o segundo controlador):
/dev/mmcblk1p2 / ext4 defaults,noatime 0 1
/dev/mmcblk1p1 /boot vfat defaults 0 2
/swapfile none swap sw 0 0
Emuladores standalone em /opt: 351Files, amiberry, drastic, duckstation, gzdoom,
hypseus, love2d, mednafen, mupen64plus, ppsspp, scummvm, etc.
Dispositivo: play_joystick · GUID 19000f6a706c61795f6a6f7973746900 · driver udev
| Botão | ID | Botão | ID |
|---|---|---|---|
| A | 0 | Select | 8 |
| B | 1 | Start | 9 |
| X | 2 | L3 | 11 |
| Y | 3 | R3 | 12 |
| L1 | 4 | Cima | 14 |
| R1 | 5 | Baixo | 15 |
| L2 | 6 | Esquerda | 16 |
| R2 | 7 | Direita | 17 |
Analógicos: eixos 0/1 (esquerdo), 2/3 (direito).
| Combinação | Ação |
|---|---|
| Select + X | Abre o menu do RetroArch |
| Select + Start | Sai do jogo |
input_enable_hotkey_btn = "8" → Select
input_menu_toggle_btn = "2" → X
input_exit_emulator_btn = "9" → Start
| Camada | Arquivo | Alcance |
|---|---|---|
| Navegação do menu | /home/ark/.emulationstation/es_input.cfg |
EmulationStation |
| Perfil do controle | /home/ark/.config/retroarch/autoconfig/udev/play_joystick.cfg |
Tem prioridade |
| Binds globais | /home/ark/.config/retroarch/retroarch.cfg |
Cores 64 bits |
| Binds globais | /home/ark/.config/retroarch32/retroarch.cfg |
Cores 32 bits |
| Remap por core | /home/ark/.config/retroarch*/config/remaps/<Core>/*.rmp |
Sobrepõe os globais |
⚠️ input_autodetect_enable = "true"e existeplay_joystick.cfg. Editar só oretroarch.cfgnão basta — o RetroArch redetecta o controle no boot e reaplica o perfil por cima. Sempre editar os três arquivos juntos.
- Menu do console:
Start → Configure Input - Dentro do jogo:
Select + X→Quick Menu → Controls → Port 1 Controlse então salvar:Save Core Remap File(todos os jogos do console) ouSave Game Remap File(só aquele jogo). Sem salvar, perde ao sair. - PPSSPP / DraStic: mapeamento interno próprio, não usam RetroArch.
Botão físico 4 (L1) agora é lido como L2, e o 6 (L2) como L1:
retroarch.cfg input_player1_l_btn = "6" input_player1_l2_btn = "4"
retroarch32.cfg input_player1_l_btn = "6" input_player1_l2_btn = "4"
play_joystick.cfg input_l_btn = "6" input_l2_btn = "4"
es_input.cfg NÃO alterado (navegação do menu mantida)
Não alcança dois cores que têm remap próprio de L1/L2:
Flycast.rmp input_player1_btn_l = "12" btn_l2 = "-1" (Dreamcast, gatilhos analógicos)
fuse.rmp input_player1_btn_l2 = "2" (ZX Spectrum, L2 = Select)
Para desfazer: rodar arquivos/r36s-l1l2.sh de novo (a troca é simétrica) ou
restaurar de ~/r36s-backup/configs/.
EASYROMS estava 100% cheia com 64 MB livres; ficou em 89% com 1,1 GB.
| Removido | Tamanho |
|---|---|
psp/Grand Theft Auto - Vice City Stories.cso |
896 MB |
mame2003/clrmamepro/ (dats do ClrMamePro) |
~41 MB |
psp/ppsspp/.../UCUS98653_1.00_0.ppst |
12,8 MB |
n64/*.srm e *.state órfãos (5 arquivos) |
~1,5 MB |
EUMONBMP.SYS + System Volume Information |
~290 KB |
Backup em ~/r36s-backup/ (exceto o GTA, que não foi copiado).
/n64/Super Mario 64 (USA).z64
8.388.608 bytes
MD5 20b854b239203baf6c961b850a4a51a2
SHA1 9bef1128717f958171a4afac3ed78ee2bb4e86ce
header 80 37 12 40 (big-endian nativo) · nome interno "SUPER MARIO 64" · country E (USA)
MD5 conferido depois de gravado no cartão. N64 roda em cores libretro
(parallel_n64, mupen64plus_next) via /usr/local/bin/n64.sh, então é RetroArch.
Se não aparecer na lista: Start → Game Settings → Update Gamelists.
Fica sem capa/descrição porque o gamelist.xml da pasta não o conhece — só estética.