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 noite José! tava fazendo umas modificações nesse sistema, e apaguei a pasta ‘wifi’ localizada em: “data/misc/” agora o wifi não liga. Já reinstalei essa rom em modo normal e não resolveu. Queria saber se vc poderia disponibilizar um backup original dessa pasta… Desde já meu muito obrigado!!!
Olá, Alan!
A partição /data é criada na instalação do sistema. A ROM que está no final do artigo é a original do meu tablet, com exceção do Recovery e da partição /data maior.
Tente encontrar na internet uma imagem chamada sun4i_crane_bc1003.img. Ela funcionou com o tablet de uma amiga. Se não funcionar, tente com as três imagens da Kocaso.
Aqui tem esta imagem: https://dl.dropboxusercontent.com/u/1555888/android/BC1003/sun4i_crane_bc1003.rar
Valew mesmo pela ajuda José!. deu certo! parabenss pelo blog, quase nao se acha artigos sobre essa ROM! e da proxima nao posso esquecer de fazer backup!! rs 🙂 vlw
Ótima notícia, Alan! 🙂
Boa tarde José! Então, esse firmware aqui é uma dor de cabeça. Extrair arquivos como boot.img e system.img do tablet é fácil, visualizar ou editar o conteúdo destes parece impossível. Repeti várias vezes o procedimento e ele não reconhece como editável. Com o Uberizer também foi a mesma coisa. Usei um outro programa para tentar trocar o splash screen mas ele informa que o tablet tem a encriptação odex ou deodex ( não me recordo no momento).
Comecei a tentar editar o arquivo init.rc mas não seria uma boa ideia mudar o valor de 1 para zero dentro deste arquivo que corresponde boot animation, pois poderia entrar em looping constante. Tentarei de alguma forma apenas deletar ou configurar o arquivo que chama o splash screen e deixarei o boot animation que fica mais fácil de editar no meu caso.
Caso tenha interessa em saber qual o firmware que estou apanhado aqui, lá vai:
http://www.ele-china.com/soft/tablet/9inch/DualCore/OEM_it900_v1.9.rar
Mesmo assim obrigado pelos esforços, José. Até logo.
Um dia eu consigo.
Certo José. Acredito que estou me aproximando do ponto. Veja o link abaixo. É exatamente o que estou procurando :
http://boundarydevices.com/displaying-a-splash-screen-with-u-boot/
Justamente por que o firmware está divido em várias imagens de Uboot antes de serem gravadas no tablet via ADB.
Ex:
uboot0.8
uboot0.isi
uboot1.isi
Tenho como acessar via ADB as imagens acima ou melhor mesmo acessa-las já no arquivo boot.img instalado no tablet ?
Você pode mexer no boot montando-o conforme eu mostro no artigo em http://meiradarocha.jor.br/news/2013/05/02/como-fazer-backup-do-sistema-android-do-tablet-bc1003-wei-wide-pro-10/
Boa tarde José ! tudo bem? Segui todos os procedimentos e mesmo com os arquivos acusando falso positivo de vírus, desabilitei a proteção e no máximo o que consigo fazer é o dump de system.img (sem a extração completa de todos os arquivos necessários para trocar a BMP). No entanto acredito que cometi um erro bobo. Pois depois que troquei a rom meses atrás, misturei as bolas. A rom que está nele agora é de um iMAPX820 (A original pelo que entendi) e a rom que estava antes dizem que é para um A10. Minha grande duvida agora é entender algumas coisas:
O procedimento para extrair os arquivos do boot não seria o mesmo para o A10 sendo que quando uso o comando adb devices tenho esta informação do tablete :
iMAP9386abe7 device
O formato tanto da carcaça como da configuração é o mesmo abaixo.
http://www.swatselectronic.net/ro/8-9-android-tablet-pc/577-it900-white-90-inch-touch-screen-android-41-tablet-pc-dual-cameras-1gb-ram-8gb-rom-cpu-infotmic-imap-x820-a5-dual-core.html
Parece que estou tentando extrair arquivos de system.img de um A5 com procedimento de extração para um A10? Será que é isso ?
Mais um vez obrigado, José!
Olá, Raul!
O procedimento para extrair as imagens é o mesmo: usa os comandos Linux dd ou cat. O que pode variar é o nome das partições, que você deve descobrir com os comandos que coloquei no artigo sobre como fazer backup.
Boa noite José !!! Fico muito feliz mesmo com sua atenção e força de vontade contra este firmware praticamente indecifrável e invencível para mim! Certamente em algumas horas tentarei novamente decompilar e editar ele com suas ultimas duas dicas. não tive muito tempo estes ultimos dias. Quero parabeniza-lo também por ter resolvido o problema do tablet da moça do outro post. Muito obrigado José ! Acredito que vai dar certo! Não é possível, srssr!!!! ! até logo . Valeu ! 😀
Valeu a força, Raul!