O System-on-Chip (SoC) A10, da empresa chinesa Allwinner, é muito barato e poderoso. Por isto, equipa centenas de tablets, set top box, leitores de ebooks. Neste artigo, explico como melhorei meu tablet Wei Wide Pro.
Para manipular a ROM, usei os sistema operacionais Linux e Windows, em função de ferramentas que estão disponíveis apenas para um ou outro sistema.
Primeiro, fiz uma cópia da ROM original, através do ADB, Android Debug Bridge. A seguir, obtive uma ROM de fabricante. Examinando as imagens de splash na partição boot, achei o fabricante Kocaso, dos EUA, o único que colocou à disposição dos usuários as ROM de um produto similar ao Wei Wide Pro. São 3 imagens ROM para o modelo M1050S, aparentemente diferindo apenas na capacidade da bateria.
Extraí os diversos arquivos que compõem a ROM com o programa unimg.exe, pelo Windows. Este programa está no pacote ImageSuite, que vem no Allwinner A10 Flash Kitchen. O unimg.exe gera uma pasta chamada “image.img.dump” com dezenas de arquivos de nomes estranhos. A lista é esta, que está no arquivo filelist.txt, criado no processo:
COMMON _SYS_CONFIG000000.hdr COMMON _SYS_CONFIG000000 COMMON _SYS_CONFIG100000.hdr COMMON _SYS_CONFIG100000 COMMON _SPLIT_0000000000.hdr COMMON _SPLIT_0000000000 RFSFAT16_BOOTLOADER_00000.hdr RFSFAT16_BOOTLOADER_00000 RFSFAT16_ENVIROMENT_00000.hdr RFSFAT16_ENVIROMENT_00000 RFSFAT16_BOOT_00000000000.hdr RFSFAT16_BOOT_00000000000 RFSFAT16_SYSTEM_000000000.hdr RFSFAT16_SYSTEM_000000000 RFSFAT16_RECOVERY_0000000.hdr RFSFAT16_RECOVERY_0000000 RFSFAT16_DISKFS_000000000.hdr RFSFAT16_DISKFS_000000000 RFSFAT16_VBOOTLOADER_0000.hdr RFSFAT16_VBOOTLOADER_0000 RFSFAT16_VENVIROMENT_0000.hdr RFSFAT16_VENVIROMENT_0000 RFSFAT16_VBOOT_0000000000.hdr RFSFAT16_VBOOT_0000000000 RFSFAT16_VSYSTEMFS_000000.hdr RFSFAT16_VSYSTEMFS_000000 RFSFAT16_VRECOVERYFS_0000.hdr RFSFAT16_VRECOVERYFS_0000 BOOT _BOOT0_0000000000.hdr BOOT _BOOT0_0000000000 BOOT _BOOT1_0000000000.hdr BOOT _BOOT1_0000000000 PXTOOLS _xxxxxxxxxxxxxxxx.hdr PXTOOLS _xxxxxxxxxxxxxxxx UPFLYTLS_xxxxxxxxxxxxxxxx.hdr UPFLYTLS_xxxxxxxxxxxxxxxx FES _FES_1-1000000000.hdr FES _FES_1-1000000000 FES _FES_1-2000000000.hdr FES _FES_1-2000000000 FES _FES_200000000000.hdr FES _FES_200000000000 FES _FES_000000000000.hdr FES _FES_000000000000 FET _HW_SCAN_00000000.hdr FET _HW_SCAN_00000000 FET _UPDATE_BOOT0_000.hdr FET _UPDATE_BOOT0_000 FET _UPDATE_BOOT1_000.hdr FET _UPDATE_BOOT1_000 FET _FET_RESTORE_0000.hdr FET _FET_RESTORE_0000 FET _MAGIC_CRC_START_.hdr FET _MAGIC_CRC_START_ FET _MAGIC_CRC_EN_000.hdr FET _MAGIC_CRC_EN_000 FET _MAGIC_DE_START_0.hdr FET _MAGIC_DE_START_0 FET _MAGIC_DE_END_000.hdr FET _MAGIC_DE_END_000 FED _FED_NAND_0000000.hdr FED _FED_NAND_0000000 12345678_1234567890cardtl.hdr 12345678_1234567890cardtl 12345678_1234567890script.hdr 12345678_1234567890script 12345678_1234567890boot_0.hdr 12345678_1234567890boot_0 12345678_1234567890boot_1.hdr 12345678_1234567890boot_1 12345678_1234567890___mbr.hdr 12345678_1234567890___mbr 12345678_1234567890dlinfo.hdr 12345678_1234567890dlinfo FET _CARD_UPDATE_BOT0.hdr FET _CARD_UPDATE_BOT0 FET _CARD_UPDATE_BOT1.hdr FET _CARD_UPDATE_BOT1 FED _CARD_FED_0000000.hdr FED _CARD_FED_0000000 FET _CARD_HW_SCAN_000.hdr FET _CARD_HW_SCAN_000
Alguns destes arquivos são programas para Windows, usados pelo LiveSuit. Outros são pequenos programas ARM carregados na memória dos dispositivos enquanto eles são flashados. Para cada arquivo extraído, há um arquivo HDR correspondente, de função desconhecida. O que vai nos interessar são os arquivos que começam com “RFSFAT16_”, pois são as cópias (imagens) da memória ROM. Também são interessantes os arquivos “COMMON _SYS_CONFIG000000” e “COMMON _SYS_CONFIG100000”, que contém configurações para o bootloader em formato INI do Windows. Estes arquivos têm algum texto em chinês, que traduzi carregando-os no Firefox, mudando a página de código para chinês e e usando o plugin Google Translator.
RFSFAT16_BOOTLOADER_00000
Este é o bootloader, ou seja, o carregador do boot. Está em formato de sistema de arquivos VFAT. Portanto, pode ser montado facilmente no Linux. Através dos comandos abaixo, pode-se montar esta imagem com r/w, a fim de se editar os arquivos:
mkdir bootloader sudo mount -o loop,uid=1000,gid=1000 -t vfat RFSFAT16_BOOTLOADER_00000 ./bootloader
O id de usuário é descoberto com o comando “id”.
Este firmware contém o diretório /linux, onde estão as imagens da tela de splash em formato BMP; o diretório /os_show, com as imagens da bateria carregando; e o diretório /sprite, com um arquivo sprite.ini, cuja função desconheço. Na raiz, estão duas fontes tipográficas do sistema, alguns executáveis e arquivos de configuração Linux e o arquivo script.bin (e uma cópia de segurança script0.bin), que contém as configurações de hardware do dispositivo, configuradas no boot.
Quem não pode ou não quer usar Linux, pode modificar esta partição diretamente no tablet entrando no adb shell e usando os comandos:
# cria um diretório para montar a partição mkdir /sdcard/nanda # monta a partição mount -t vfat /dev/block/nanda /sdcard/nanda # Entrano diretório com as imagens splash e muda a default cd /sdcard/nanda/linux cp linux.bmp linux.old.bmp cp kocaso.bmp linux.bmp
RFSFAT16_ENVIROMENT_00000
Contém alguns parâmetros do sistema U-Boot Linux, sistema de Linux embarcado usado pelo dispositivo. Nada para mudar, aqui. No início deste arquivo há:
bootdelay=0 bootcmd=run setargs boot_normal console=ttyS0,115200 nand_root=/dev/nandc mmc_root=/dev/mmcblk0p4 init=/init loglevel=8 setargs=setenv bootargs console=${console} root=${nand_root} init=${init} loglevel=${loglevel} boot_normal=nand read 40007800 boot;boota 40007800 boot_recovery=nand read 40007800 recovery;boota 40007800 boot_fastboot=fastboot recovery_key_value_max=0x13 recovery_key_value_min=0x10 fastboot_key_value_max=0x8 fastboot_key_value_min=0x
Mais para o meio do arquivo, tem o que parece ser um executável Linux em formato ELF e estes parâmetros:
bootdelay=0 bootcmd=run setargs boot_normal console=ttyS0,115200 nand_root=/dev/nandd mmc_root=/dev/mmcblk0p7 init=/init loglevel=8 setargs=setenv bootargs console=${console} root=${mmc_root} init=${init} loglevel=${loglevel} boot_normal=mmc read 40007800 22000 10000;boota 40007800 boot_recovery=mmc read 40007800 recovery;boota 40007800 boot_fastboot=fastboot
RFSFAT16_BOOT_00000000000
Boot do sistema Linux. Pode-se mudar a segunda tela splash, que normalmente tem o androidezinho de braços cruzados, chupado de um site Android.
RFSFAT16_SYSTEM_000000000
Sistema Android, aplicativos. Está no formato ext4 sparse, que deve ser convertido para ext4 antes de ser montada. Pode-se adicionar, atualizar ou eliminar aplicativos Android. A forma mais fácil de fazer isto é instalar os aplicativos no Android e passá-los para o diretório /system através de utilitários como o Link2SD, e depois fazer uma imagem ROM da partição /system.
RFSFAT16_RECOVERY_0000000
Partição com um sistema Linux mínimo, para recuperação. Eu troquei esta imagem,que tem um bug grave, pelo ClockWorkMode Recovery, muito melhor que o original.
RFSFAT16_DISKFS_000000000
Armazenamento interno. Não é uma imagem, na verdade. É só um placeholder, com 8 bytes, do disco interno /sdcard, que é criado no primeiro boot do sistema. Seu tamanho parece ser tudo o que sobrar, depois da criação das outras partições.
COMMON _SYS_CONFIG000000
Este arquivo texto define os parâmetros do particionamento da memória NAND (ROM interna), para uso do programa de gravação de ROM da Allwinner, o LiveSuit. Particularmente importantes são estas seções:
[part_num] num = 8 ;------------------------------>nanda, known as bootfs before, includes boot.axf u-boot.bin etc... [partition0] class_name = DISK name = bootloader size_hi = 0 ; size_lo = 16384 size_lo = 65536 user_type = 0 ro = 0 ;------------------------------>nandb, enviroment for u-boot [partition1] class_name = DISK name = env size_hi = 0 size_lo = 16384 user_type = 0 ro = 0 ;------------------------------>nandc, kernel and ramdisk [partition2] class_name = DISK name = boot size_hi = 0 size_lo = 32768 user_type = 0 ro = 0 ;------------------------------>nandd, android real rootfs [partition3] class_name = DISK name = system size_hi = 0 size_lo = 524288 ; size_lo = 327680 user_type = 0 ro = 0 ;------------------------------>nande, user data [partition4] class_name = DISK name = data size_hi = 0 size_lo = 1048576 ; size_lo = 384000 user_type = 1 ro = 0 ;------------------------------>nandf, misc [partition5] class_name = DISK name = misc size_hi = 0 size_lo = 16384 user_type = 0 ro = 0 ;------------------------------>nandg, for recovery [partition6] class_name = DISK name = recovery size_hi = 0 size_lo = 32768 user_type = 0 ro = 0 ;------------------------------>nandh, android app cache [partition7] class_name = DISK name = cache size_hi = 0 size_lo = 327680 user_type = 0 ro = 0
Neste arquivo, pode-se fazer a a mais importante modificação no BC1003: aumentar a memória da partição /data. Nesta partição, o Android guarda informações de todos os programas. Em geral, é a primeira a ficar lotada, impedindo que novos programas sejam instalados, mesmo que haja espaço em disco. No exemplo acima, a partição /data é 3 vezes maior que o padrão. O espaço extra foi retirado da partição /sdcard. Com esta modificação, pode-se instalar mais aplicativos sem problemas de falta de espaço interno.
COMMON _SYS_CONFIG100000
Arquivo texto que vai formar o binário script.bin, colocado na partição bootloader. O LiveSuit gera o binário automaticamente ou pode-se compilar este binário com o programa fexc, executável Linux do pacote Allwinner Kitchen Master. Pode-se mudar algumas atribuições de pinos i/o, por exemplo, para direcionar a UART para o cartão microSD. Coisas para hackers avançados. O usuário comum não precisa nem deve mexer nisto.
Reconstruindo
Depois de modificar os arquivos desejados, reconstruí a imagem de instalação do A10 com os comandos Windows:
del /s image.img.dump\RFSFAT16_VBOOTLOADER_0000 del /s image.img.dump\RFSFAT16_VBOOT_0000000000 del /s image.img.dump\RFSFAT16_VSYSTEMFS_000000 del /s image.img.dump\RFSFAT16_VRECOVERYFS_0000 FileAddSum.exe "image.img.dump/RFSFAT16_BOOTLOADER_00000" "image.img.dump\RFSFAT16_VBOOTLOADER_0000" FileAddSum.exe "image.img.dump/RFSFAT16_BOOT_00000000000" "image.img.dump\RFSFAT16_VBOOT_0000000000" FileAddSum.exe "image.img.dump/RFSFAT16_SYSTEM_000000000" "image.img.dump\RFSFAT16_VSYSTEMFS_000000" FileAddSum.exe "image.img.dump/RFSFAT16_RECOVERY_0000000" "image.img.dump\RFSFAT16_VRECOVERYFS_0000" unimg -e image.img
FileAddSum.exe, do pacote A10 Flash Kitchen, recria alguns arquivos de checksum. unimg.exe com o parâmetro -e recria a imagem de instalação do Allwinner A10, que pode, então, ser gravada com o LiveSuite.
LiveSuit
O programa que a Allwinner usa para gravar suas ROMs é o LiveSuit. Ele é encontrado em muitos lugares, como no pacote Allwinner A10 Flash Kitchen. Existe uma versão do Allwinner LiveSuit para Linux, mas ainda não testei.
Para instalar o LiveSuit no Windows, abri uma pasta na área de trabalho do Windows, copiei o instalador para ela e executei-o. Ele descomprimiu todos os arquivos no local. O Flash Kitchen já tem o LiveSuit incluído.
Para flashar o tablet, no Windows, coloco o dispositivo no modo FES, isto é, preparado para ser flashado:
- Desconecto o cabo USB, se estiver conectado.
- Seguro o botão Power por mais de 10 segundos para me certificar que o tablet foi mesmo desligado.
- Solto o Power e mantenho apertado qualquer botão que não o Power. O botão da face, por exemplo (Home).
- Conecto o cabo USB sem largar o botão apertado.
- Aperto rapidamente o botão Power por 10 vezes.
- Solto o botão que mantive apertado.
Isto vai instalar o driver especial de flashing do Allwinner. Se o driver não for instalado automaticamente, use o modo padrão de Windows para instalar drives. Procure o driver no computador, na pasta do LiveSuit.
Uma vez que o tablet esteja no modo FES, abro o programa LiveSuit e sigo o assistente para instalação. O LiveSuit apresentará as seguintes telas:
Ele pede para escolher o modo de atualização. Escolho o recomendado, “mandatory”.
Pede para desconetar todos os dispositivos.
Pede para escolher o arquivo de imagem ROM.
Avisa para recolocar o dispositivos em modo FES.
Finalmente, pergunta se é para formatar ou se instala o sistema sem formatar. Na primeira instalação, se houve modificação do tamanho das partições ou se quero ressetar para as configurações de fábrica, escolho reformatar. Se não escolher reformatar, os programas e configurações de usuário serão preservados.
Feito isto, o LiveSuit passa a gravar a ROM. O processo leva de 2 a 5 minutos.
A primeira instalação da imagem deve ser feita formatando-se toda a memória NAND. Instalações subsequentes podem ser feitas sem formatação. Neste caso, os dados e aplicativos do usuários não serão apagados.
Aqui está a imagem ROM do Wei Wide Pro com SoC BC1003, mod Meira para gravar com o LiveSuit. A partição /data foi aumentada para 1 giga, para que eu possa instalar mais aplicativos, e a partição Recovery tem o ClockWorkMod Recovery.
Referências
- Android tablet info. Página de jovem doutor escocês. Melhor fonte de informações técnicas e tutoriais sobre esta classe de tablets. Também tem utilitário de conversão de imagens bitmapa (fotos) para formatos usados pelo Android. <http://www.imajeenyus.com/computer/20130301_android_tablet/android/index.html>.
- Android/partitions. <http://linux-sunxi.org/Android/partitions>.
- How make livesuite.img with dumped rom. <http://www.freaktab.com/showthread.php?912-how-make-livesuite-img-with-dumped-rom>.
- Kocaso. Imagens do firmware para recuperação do sistema (A imagem no arquivo M1050B.exe funcionou bem no Wei Wide Pro. Só houve problemas na câmera e no monitoramento da bateria). <http://www.kocaso.com/firmware/?model=M1050>
- Build AOSP Android 2.3.7 for Allwinner A10 tablets. <http://forum.xda-developers.com/showthread.php?t=1490886>.
Boa tarde tentei baixar a rom mas o link não está mais ativo… teria como me enviar ou me indicar onde baixar a da Kokaso?
Meu tablet teria 2 giga mas está com somente 387 mega livres e não consigo intalar nada… e sou meio leigo
Olá, Diego!
Vou procurar nos meus arquivos.
Olá boa tarde José Rocha encontrei aqui muita informação, parabéns pelo o conhecimento e compartilhar.
Te pesso humildemente sua ajuda se for possível quero extrair e traduzir as linhas de uma recovery.img
Olá, Leandro!
Valeu o prestígio!
Infelizmente, sua necessidade está além de meus conhecimentos… em geral, o texto está codificado dentro dos programas. Só editando diretamente com um editor hexadecimal.
Cara eu andei pesquisando em alguns fóruns, consegui de complicar o recovery.img no Ubuntu, extraiu a estrutura mas para minha surpresa dentro tem o zImage que está complicado e esse não achei forma de de compilar, já tentei editar direto pelo um editor hexadecimal mas não aparece as linhas q podem ser tradizidas.
Hum… Este “z” sugere que a imagem está zipada. Deve ter sido com o tar+gzip, que é o padrão Linux.
Sim sei q tem algo assim no Linux, cheguei a tentar um comando que usa esse gzip mas não funcionou.
Obrigado pela atenção José Rocha.
De nada! Lamento não ter tempo hoje para ajudá-lo mais.
Eu entendo, amigo mas se conseguir algo que possa me ajudar, fico muito agradecido.
Parabéns Sr. José Rocha. De tudo o que pesquisei foi o melhor tutorial que encontrei! E graças a si consegui “ressuscitar” o meu tablet!! Valeu mesmo! 😉
No entanto as ROM’s que encontrei não são compativeis com a minha WIFI e a mesma não funciona. Poderia disponibilizar novamente a sua ROM (” imagem ROM do Wei Wide Pro com SoC BC1003, mod Meira “)?
Obrigado!!
Obrigado pelo prestígio, Ricardo!
A ROM está aqui: https://dl.dropboxusercontent.com/u/1555888/android/crane_bc1003_wei_wide_pro_ROM.7z
Preciso de uma rom compatível com FS-M797HD. Procuro, procuro e nada.
Boa tarde, possuo um tablet da philco… no meio da atualizacao… na verdade apena na tela de formatação o pc foi desligado do nada, nao chegou nem a ser formatado, agora o tablet nao liga e nem o livesuite o reconhece. na verdade quando conectado ao pc ele e reconhecido porem o aplicativo diz que não há dispositivo a ser atualizado. to quase jogando fora ele me ajude por favor.
Olá, Jeferson!
Se ele é um Allwinner, é praticamente impossível bricá-lo. Tente refazer os passo, principalmente a parte para entrar no modo FES.
José muito obrigado… então depois de um mes com ele parado, hoje fiquei na briga… maldito driver… depois de muito deletar e reinstalar uma hora ele pegou… funcionou. muito obrigado.
Agora só faltava uma rom boa… pq as que a philco lançou são horriveis… deixa lhe perguntar por ele ser Allwinner , sera q consigo achar uma rom compativel? existe algum numero que possa usar como referencia?
Eu dei sorte de ter achado estas da Kokaso. Talvez você encontre alguma que sirva. Mas, basicamente, a ROM boa é aquela que faz tudo funcionar: Wifi, Ethernet etc. Na configuração da ROM a gente pode aumentar a partição /data. O resto é Android quase padrão. A gente pode incremeentar como quiser.
Procure oas referências na string que descreve o sistema, em “Configurações > Sobre o dispositivo”: versão da banda base, kernel, build…