Language / Idioma: 🟢 Português | English
- Visão Geral
- Configuração
- Dispositivos Suportados
- Solução de Problemas Avançada — Modificação do Bootloader
- Como Funciona Internamente
As imagens do Armbian para TV Boxes Amlogic normalmente dependem de blobs secundários de u-boot para inicializar o kernel mainline. Na prática, eles não são necessários: o bootloader u-boot que veio de fábrica com a sua box já é capaz de fazer isso. Tudo que é preciso são algumas modificações nos scripts de boot do Armbian.
Pré-requisito: o u-boot do fabricante deve estar rodando na eMMC. Se sua box foi reflashada com outro bootloader, restaure a imagem Android original com a ferramenta Amlogic USB Burning Tool antes de continuar.
Baixe a versão mais recente do Armbian para s9xxx-box. Recomendamos a bookworm minimal.
Grave a imagem no pendrive usando o balenaEtcher — a opção mais simples — ou via linha de comando:
sudo dd if=Armbian_*.img of=/dev/sdX bs=4M status=progress conv=fsync
⚠️ Substitua/dev/sdXpelo seu pendrive. Uselsblkoufdisk -lpara confirmar o dispositivo correto. Comdd, gravar no dispositivo errado apaga os dados sem confirmação.
Monte a partição FAT do pendrive e substitua os scripts de boot pelos modificados, sobrescrevendo os existentes:
- aml_autoscript
- s905_autoscript
- emmc_autoscript
- gxl-fixup.scr (apenas se o seu SoC for GXBB/S905 ou GXL/S905X/W/L)
Compilando imagens próprias ou preparando múltiplos pendrives? É possível modificar a imagem
.imgdiretamente antes de gravar, evitando ter que editar cada pendrive individualmente. Para isso, monte a imagem comlosetup:sudo losetup -fP Armbian_*.img lsblk | grep loop # identifique o dispositivo e a partição FAT (geralmente loopXp1) sudo mount /dev/loop0p1 /mnt/armbian_bootCopie os scripts normalmente para
/mnt/armbian_boot/e prossiga pelos próximos passos normalmente, editando oarmbianEnv.txte os demais parâmetros com a imagem ainda montada. Só ao final, após concluir todas as configurações, desmonte e grave:sudo umount /mnt/armbian_boot sudo losetup -d /dev/loop0 sudo dd if=Armbian_*.img of=/dev/sdX bs=4M status=progress conv=fsync
O armbianEnv.txt controla parâmetros essenciais do boot. Antes de editar, faça um backup do arquivo original:
sudo cp /mnt/seu_pendrive/armbianEnv.txt /mnt/seu_pendrive/armbianEnv.txt.bakEdite com nano ou o editor de sua preferência:
sudo nano /mnt/seu_pendrive/armbianEnv.txtConteúdo de referência:
extraargs=earlycon=meson,0xfe07a000 console=ttyS0,921600n8 rootflags=data=writeback rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 watchdog.stop_on_reboot=0 pd_ignore_unused clk_ignore_unused rootdelay=5
bootlogo=false
verbosity=7
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u
console=both
# Arquivo DTB para este TV Box
# fdtfile=amlogic/meson-gxl-s905x-nexbox-a95x.dtb
fdtfile=amlogic/meson-sm1-x96-air-gbit.dtb
# defina isto para o UUID da partição raiz (o valor pode ser encontrado com blkid ou no fstab)
#rootdev=UUID=92139c84-3871-41d7-a3f2-e8a943cbfa87
# ou use o label padrão da partição:
#rootdev=LABEL=ROOTFS
# Ativar APENAS para gxbb (S905) / gxl (S905X/L/W) para criar cabeçalho u-boot falso
#soc_fixup=gxl-
⚠️ Este arquivo é um ponto de partida, não uma configuração universal.O conteúdo acima funciona para muitos dispositivos, mas pode não funcionar para o seu. Diferentes boxes, SoCs e versões do Armbian podem exigir parâmetros distintos — especialmente a linha
extraargs.Antes de substituir, compare com o
armbianEnv.txtoriginal da imagem e mescle com cuidado. Parâmetros presentes no original e ausentes aqui podem ser necessários para o seu hardware. Em caso de dúvida, parta do original e aplique apenas as alterações que você compreende. Se o sistema não inicializar, restaurar o backup (armbianEnv.txt.bak) é o primeiro passo para diagnosticar.
Altere a linha fdtfile para o DTB correspondente à sua box. Os arquivos disponíveis estão em /boot/dtb/amlogic/ dentro da imagem do Armbian.
Por padrão, rootdev está comentado e o sistema usa o label ROOTFS automaticamente. Se precisar especificar manualmente:
| Mídia | Valor |
|---|---|
| Pendrive USB | /dev/sda2 |
| Cartão SD | /dev/mmcblk0p2 |
| Por UUID (recomendado) | UUID=<seu-uuid> |
| Por label | LABEL=ROOTFS |
Como obter o UUID da partição raiz:
Com o sistema rodando a partir do pendrive ou SD, execute:
blkidSaída esperada:
/dev/sda2: UUID="92139c84-3871-41d7-a3f2-e8a943cbfa87" TYPE="ext4" PARTUUID="..."
Copie o valor UUID= da partição raiz (geralmente sda2 ou mmcblk0p2) e cole no armbianEnv.txt. O UUID também pode ser encontrado em /etc/fstab ou no armbianEnv.txt original da imagem, se já estiver preenchido.
Se sua box usar um SoC GXBB (S905) ou GXL (S905X/W/L), descomente a linha:
soc_fixup=gxl-
- Desligue a box.
- Insira o pendrive USB.
- Pressione e mantenha pressionado o botão reset.
- Ligue a box e continue segurando por aproximadamente 7 segundos.
- Se tudo estiver correto, o Armbian iniciará com kernel mainline — sem nenhum blob u-boot secundário.
✅ Totalmente Testado e Funcionando:
- S905X, S905W, S912, S905X2, S922X, S905X3, S905X4 (HTV H8)
- S905: Inicia apenas na primeira tentativa (limitação conhecida)
❓ Não Testado:
- S905W2: Provavelmente compatível mas não testado (não suportado atualmente pelo kernel do Armbian)
Todos os arquivos e fontes estão disponíveis no Github.
⚠️ Esta seção é para casos onde os scripts simplesmente não funcionam. Se o método principal funcionou, você não precisa disso.Alguns dispositivos possuem bootloaders de fábrica que não suportam a execução de scripts externos por padrão. Nesses casos, é possível modificar as variáveis do bootloader diretamente via console serial para forçar esse suporte. Trata-se de um procedimento de baixo nível, com risco real de brick. Prossiga apenas se souber o que está fazendo.
- Sistema ARM Linux funcional: Armbian, Debian ou Ubuntu ARM rodando a partir de USB/SD no dispositivo — necessário para acessar a eMMC e o shell.
- Adaptador Serial TTL (3.3V UART):
⚠️ Use apenas 3.3V. 5V danificará o dispositivo. Requer solda nos pads TX/RX/GND da placa. - Software de terminal serial: PuTTY, Minicom ou picocom.
# Backup com compressão (um backup de 16GB vira 2-4GB)
sudo dd if=/dev/mmcblkX bs=1M status=progress | gzip -c > backup_emmc_full.img.gz
# Para restaurar:
# gunzip -c backup_emmc_full.img.gz | sudo dd of=/dev/mmcblkX bs=1M status=progressSolde TX, RX e GND nos pads UART do dispositivo e conecte ao PC.
ls -la /dev/ttyUSB*
picocom -b 115200 /dev/ttyUSB0
# ou:
minicom -D /dev/ttyUSB0 -b 115200Ligue o dispositivo e pressione rapidamente Ctrl+C ou Enter para interromper o U-Boot antes de ele inicializar.
printenv bootcmdSaída esperada:
bootcmd=run start_autoscript; run storeboot
Verifique também:
printenv start_usb_autoscript
printenv start_mmc_autoscript
printenv start_emmc_autoscriptOs nomes das variáveis podem variar. Procure por padrões como
start_*_autoscript.
Se o bootloader for gravável, execute no console do U-Boot:
setenv start_autoscript 'if mmcinfo; then run start_mmc_autoscript; fi; if usb start; then run start_usb_autoscript; fi; run start_emmc_autoscript'
setenv start_emmc_autoscript 'if fatload mmc 1 1020000 emmc_autoscript; then setenv devtype "mmc"; setenv devnum 1; autoscr 1020000; fi;'
setenv start_mmc_autoscript 'if fatload mmc 0 1020000 s905_autoscript; then setenv devtype "mmc"; setenv devnum 0; autoscr 1020000; fi;'
setenv start_usb_autoscript 'for usbdev in 0 1 2 3; do if fatload usb ${usbdev} 1020000 s905_autoscript; then setenv devtype "usb"; setenv devnum 0; autoscr 1020000; fi; done'
setenv upgrade_step 2
setenv bootdelay 1Não use simplesmente run start_autoscript; run storeboot sem antes verificar o seu bootcmd original. Um comando genérico pode danificar seu dispositivo se o original for diferente.
-
Anote o
bootcmdoriginal:printenv bootcmd
-
Configure preservando o original:
setenv bootcmd 'run start_autoscript; [SEU BOOTCMD ORIGINAL AQUI]'
Exemplos reais:
# Exemplo 1 — Box Amlogic genérica (original: run storeboot)
setenv bootcmd 'run start_autoscript; run storeboot'
# Exemplo 2 — HTV H8 (original: run start_emmc_autoscript; run storeboot)
setenv bootcmd 'run start_autoscript; run start_emmc_autoscript; run storeboot'
# Exemplo 3 — bootcmd complexo
# Original: if test -n ${upgrade_step}; then echo BOOT_STEP equals $upgrade_step; setenv upgrade_step; fi; run storeboot
setenv bootcmd 'run start_autoscript; if test -n ${upgrade_step}; then echo BOOT_STEP equals $upgrade_step; setenv upgrade_step; fi; run storeboot'saveenv
resetInterrompa o U-Boot novamente e confirme:
printenv bootcmd- Variáveis salvas → bootloader gravável, modificações aplicadas com sucesso.
- Variáveis não salvas → bootloader somente leitura; este método não é aplicável.
Para quem quer entender o que acontece por baixo dos panos — o papel de cada arquivo na cadeia de boot.
Executado apenas uma vez, no momento em que você força o modo de recuperação (segurando o botão reset ao ligar). Ele reescreve as variáveis de ambiente do U-Boot de fábrica via saveenv, estabelecendo uma nova ordem de boot: SD card → USB → eMMC, redirecionando o fluxo para os scripts abaixo.
Executado toda vez que a placa liga com pendrive ou SD card conectado. Lê o armbianEnv.txt, carrega o Kernel, DTB e Initrd para a RAM, prepara os bootargs e passa o controle para o Kernel inicializar o sistema.
Idêntico ao anterior em função, mas acionado quando não há pendrive ou SD inicializável conectado. Aponta para o endereço físico da eMMC (devnum 1) e monta a raiz do sistema a partir da partição interna.
Os bootloaders de fábrica das famílias GXBB (S905) e GXL (S905X/W/L) só aceitam kernels no formato legado uImage (comando bootm). O Armbian moderno usa o formato Image (comando booti), que esses bootloaders simplesmente recusam.
Em vez de compilar kernels legados, o script resolve isso em tempo de execução:
- Substitui a rotina de boot padrão (
cmd_do_boot). - Usa
mw.lpara escrever diretamente na memória um cabeçalho u-boot legado falso no endereço0x1ffffc0, logo antes do Kernel. - Injeta um CRC válido no cabeçalho (
cmd_hdr_crc). - Dispara
bootm— o bootloader vê o cabeçalho falso, acredita estar lidando com umuImagelegítimo e inicializa o kernel moderno normalmente.
Restrição: o arquivo do Kernel não pode ultrapassar 32MB.
É por isso que o Passo 6 instrui a descomentar soc_fixup=gxl- nesses SoCs: sem esse hack, o bootloader travaria na inicialização.