Language / Idioma: 🟢 Português | English
As imagens do Armbian para TV Boxes Amlogic usam blobs secundários de u-boot carregados em cadeia para inicializar imagens do kernel mainline. Os bootloaders u-boot do fabricante, no entanto, podem inicializar o Linux mainline perfeitamente sem eles. Portanto, eles não são necessários.
Tudo o que é necessário são algumas modificações simples em alguns dos scripts u-boot do Armbian.
Pressuposição: você tem o u-boot do fabricante (o que veio com a box) rodando na eMMC. Se não, você pode restaurar a imagem Android original com a ferramenta Amlogic USB Burning.
- Passo 1: Baixe a versão mais recente do Armbian para s9xxx-box, vamos usar bookworm minimal
- Passo 2: Grave a imagem em um pendrive USB
- Passo 3: Copie os scripts de boot modificados (aml_autoscript, s905_autoscript, emmc_autoscript ) para a partição FAT no pendrive. Sobrescreva os arquivos existentes.
- Passo 4: Se você tem um SoC GXBB (S905) ou GXL (S905X/W/L), você também precisa de gxl-fixup.scr
- Passo 5: Adicione um arquivo armbianEnv.txt com o seguinte conteúdo (o arquivo também está no github):
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
# em /extlinux/extlinux.conf depois de APPEND root= ou com blkid)
rootdev=UUID=92139c84-3871-41d7-a3f2-e8a943cbfa87
# Ativar APENAS para gxbb (S905) / gxl (S905X/L/W) para criar cabeçalho u-boot falso
#soc_fixup=gxl-- Passo 6: Altere fdtfile para o DTB da sua box.
- Passo 7: (opcional desde a versão 3:) Altere rootdev para o UUID correto do rootfs para sua imagem ou mude para /dev/sda2 quando inicializar do USB ou /dev/mmcblk0p2 quando inicializar do SDCARD
- Passo 8: Apenas se sua box tiver um SoC GXBB (S905) ou GXL (S905X/W/L), descomente a linha soc_fixup=gxl-
- Passo 9: Desligue a box.
- Passo 10: Coloque o disco USB na sua box.
- Passo 11: Pressione o botão reset e mantenha pressionado
- Passo 12: Ligue a box enquanto mantém o botão reset pressionado por aproximadamente 7 segundos.
- Passo 13: Se você tiver sorte, agora ele inicializará o Armbian com um 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 usados e arquivos de origem podem ser encontrados no Github.
AVISO: Modificar o bootloader do seu dispositivo pode resultar em um dispositivo travado (brick). Qualquer dano ou perda de dados é de sua responsabilidade exclusiva. Proceda apenas se entender os riscos.
Pré-requisitos Obrigatórios:
-
Sistema ARM Linux Funcional: Armbian, Debian ou Ubuntu ARM rodando a partir de USB/SD no seu dispositivo Amlogic
- Necessário para acessar a eMMC interna e executar comandos de análise/extração
- O sistema deve inicializar corretamente para fornecer acesso shell
-
Adaptador Serial TTL (3.3V UART): Adaptador série USB de alta qualidade
⚠️ CRÍTICO: Use apenas 3.3V. 5V danificará o dispositivo!- Requer habilidades de soldagem para conectar TX/RX/GND na placa
-
Software de Terminal Serial: PuTTY, Minicom ou picocom
-
Paciência e Metodologia: Siga cada passo cuidadosamente
Antes de QUALQUER experimento, crie um backup completo:
# Backup bit-a-bit com compressão (economiza espaço)
sudo dd if=/dev/mmcblkX bs=1M status=progress | gzip -c > backup_emmc_full.img.gz
# Para restaurar em caso de desastre:
# gunzip -c backup_emmc_full.img.gz | sudo dd of=/dev/mmcblkX bs=1M status=progressPor que gzip? Um backup de 16GB se torna 2-4GB, economizando espaço significativo.
Solde TX, RX, GND nos pads UART do seu dispositivo e conecte ao seu PC.
Usando picocom como exemplo:
# Encontre seu dispositivo serial
ls -la /dev/ttyUSB*
# Conecte a 115200 baud (ajuste se diferente)
picocom -b 115200 /dev/ttyUSB0
# Ou com minicom:
minicom -D /dev/ttyUSB0 -b 115200Ligue o dispositivo e pressione rapidamente Ctrl+C ou Enter para interromper o U-Boot antes de inicializar.
Uma vez no console do U-Boot, digite:
printenv bootcmdA saída esperada deve ser semelhante a:
bootcmd=run start_autoscript; run storeboot
Verifique as variáveis relacionadas:
printenv start_usb_autoscript
printenv start_mmc_autoscript
printenv start_emmc_autoscriptNota: Os nomes das variáveis podem ser ligeiramente diferentes. Procure por padrões como start_*_autoscript.
Se seu bootloader é gravável e você quer forçar o suporte a scripts, execute esses comandos 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 bootdelay 1NÃO use simplesmente run start_autoscript; run storeboot - Isto é genérico e pode danificar seu dispositivo se seu bootcmd original foi diferente!
Abordagem passo-a-passo:
-
Primeiro, ANOTE seu bootcmd original:
printenv bootcmd # Anote a saída EXATA aqui: # _________________________________
-
Então configure bootcmd para preservá-lo:
setenv bootcmd 'run start_autoscript; [COLE SEU BOOTCMD ORIGINAL AQUI]'
Exemplos de dispositivos reais:
Exemplo 1 - Box Amlogic Genérica:
# Original era:
# bootcmd=run storeboot
# Então você faz:
setenv bootcmd 'run start_autoscript; run storeboot'Exemplo 2 - Fabricante Diferente (HTV H8):
# Original era:
# bootcmd=run start_emmc_autoscript; run storeboot
# Então você faz:
setenv bootcmd 'run start_autoscript; run start_emmc_autoscript; run storeboot'Exemplo 3 - Bootcmd Complexo:
# Original era:
# bootcmd=if test -n ${upgrade_step}; then echo BOOT_STEP equals $upgrade_step; setenv upgrade_step; fi; run storeboot
# Então você faz:
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 verifique se as variáveis foram salvas:
printenv bootcmdIndicadores de Sucesso:
- Variáveis foram salvas → Bootloader é gravável e as modificações devem funcionar
- Variáveis não foram salvas → Bootloader somente leitura; não é possível aplicar este método