{"id":3300,"date":"2013-05-02T13:35:05","date_gmt":"2013-05-02T16:35:05","guid":{"rendered":"http:\/\/meiradarocha.jor.br\/news\/?p=3300"},"modified":"2015-08-08T15:48:46","modified_gmt":"2015-08-08T18:48:46","slug":"como-fazer-backup-do-sistema-android-do-tablet-bc1003-wei-wide-pro-10","status":"publish","type":"post","link":"https:\/\/meiradarocha.jor.br\/news\/2013\/05\/02\/como-fazer-backup-do-sistema-android-do-tablet-bc1003-wei-wide-pro-10\/","title":{"rendered":"Como fazer backup do Android no tablet BC1003 (Wei Wide PRO 10&#8243;)"},"content":{"rendered":"<p><a href=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2013\/05\/about_bc1003.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-3321 alignright\" style=\"margin-left: 12px; margin-right: 12px;\" src=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2013\/05\/about_bc1003-300x175.jpg\" alt=\"About BC1003\" width=\"300\" height=\"175\" \/><\/a>O <em>tablet<\/em> <strong>BC1003<\/strong> usa chip <strong>Allwinner A10<\/strong>, um processador ARM extremamente hacke\u00e1vel. No entanto, brincar com isto pode ser perigoso pelo risco de &#8220;<em>brickar<\/em>&#8221; (transformar num tijolo de alta tecnologia) o dispositivo. Mas o Allwinner \u00e9 praticamente \u00e0 prova de tijolamento, desde que se tenha as ROMs originais e se possa queim\u00e1-las de volta no <em>tablet<\/em>. Como o fabricante <strong>Yones<\/strong> n\u00e3o disponibiliza a ROM em seu site, eu mesmo precisei gerar estes arquivos.<\/p>\n<p>Fiz um <a href=\"http:\/\/app.wisemapping.com\/c\/maps\/125076\/public\">mapa mental com o esquema da imagem da ROM do Allwinner 10<\/a> para melhorar o entendimento:<br \/>\n<iframe loading=\"lazy\" style=\"width: 600px; height: 400px; border: 1px solid black;\" src=\"http:\/\/app.wisemapping.com\/c\/maps\/125076\/embed?zoom=1\" width=\"320\" height=\"240\"><\/iframe><\/p>\n<p>O backup do sistema Android no <em>tablet<\/em> <strong>BC1003<\/strong> \u00e9 feito pela <em>shell<\/em> do dispositivo, que eu acesso com a linha de comando na <em>shell<\/em> do Linux:<\/p>\n<pre>adb shell<\/pre>\n<p>O <strong>adb<\/strong> \u00e9 parte do <strong>Android Development Kit<\/strong>. Para descobrir quais s\u00e3o as parti\u00e7\u00f5es do Android, j\u00e1 na <em>shell<\/em> do <em>tablet<\/em>, uso o seguinte comando para listar o diret\u00f3rio de dispositivos de bloco \/dev\/block:<\/p>\n<pre>ls \/dev\/block<\/pre>\n<p>Com isto, verifico que n\u00e3o h\u00e1 dispositivos com &#8220;mtd&#8221; no nome. Assim, o tablet n\u00e3o usa o subsistema <a href=\"http:\/\/www.linux-mtd.infradead.org\/\"><strong>mtd<\/strong><\/a> para gerenciar mem\u00f3ria flash. Em vez disto, h\u00e1 parti\u00e7\u00f5es com &#8220;nand&#8221;. Isto indica que a mem\u00f3ria interna de 4 GB usa o esquema de parti\u00e7\u00f5es <strong>eMMC<\/strong> e que as parti\u00e7\u00f5es s\u00e3o:<\/p>\n<ul>\n<li>nanda<\/li>\n<li>nandb<\/li>\n<li>nandc<\/li>\n<li>nandd<\/li>\n<li>nande<\/li>\n<li>nandf<\/li>\n<li>nandg<\/li>\n<li>nandh<\/li>\n<li>nandi<\/li>\n<\/ul>\n<p>\u00c9 um sistema Allwinner de 9 parti\u00e7\u00f5es NAND. Este n\u00famero \u00e9 importante se eu escolher instalar alguma ROM Cyanogen, por exemplo, que possui vers\u00f5es para Allwinner de 9, 10 e 11 parti\u00e7\u00f5es NAND.<\/p>\n<p>Para descobrir o que h\u00e1 em cada parti\u00e7\u00e3o, consulto o subsistema Linux \/proc, que tem informa\u00e7\u00f5es sobre\u00a0 o dispositivo. Uso o comando &#8220;mount&#8221; ou:<\/p>\n<pre>cat \/proc\/mounts &gt; \/mnt\/sdcard\/mounts.txt<\/pre>\n<p>que gera um arquivo texto listando todas as parti\u00e7\u00f5es montadas:<\/p>\n<pre>rootfs \/ rootfs ro,relatime 0 0\r\ntmpfs \/dev tmpfs rw,nosuid,relatime,mode=755 0 0\r\ndevpts \/dev\/pts devpts rw,relatime,mode=600,ptmxmode=000 0 0\r\nproc \/proc proc rw,relatime 0 0\r\nsysfs \/sys sysfs rw,relatime 0 0\r\ntmpfs \/mnt\/asec tmpfs rw,relatime,mode=755,gid=1000 0 0\r\ntmpfs \/mnt\/obb tmpfs rw,relatime,mode=755,gid=1000 0 0\r\n<strong>\/dev\/block\/nandd \/system ext4 ro,relatime,user_xattr,barrier=0,data=ordered 0 0\r\n\/dev\/block\/nande \/data ext4 rw,nosuid,nodev,noatime,user_xattr,barrier=0,journal_checksum,data=ordered,noauto_da_alloc 0 0\r\n\/dev\/block\/nandh \/cache ext4 rw,nosuid,nodev,noatime,user_xattr,barrier=0,journal_checksum,data=ordered,noauto_da_alloc 0 0<\/strong>\r\n\/dev\/block\/vold\/179:2 \/data\/sdext2 vfat rw,relatime,uid=1000,gid=1000,fmask=0133,dmask=0002,allow_utime=0020,codepage=cp437,iocharset=ascii,shortname=mixed,errors=remount-ro 0 0\r\n\/dev\/block\/vold\/93:64 \/mnt\/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 0\r\n\/dev\/block\/vold\/93:64 \/mnt\/secure\/asec vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 0\r\ntmpfs \/mnt\/sdcard\/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0\r\n\/dev\/block\/dm-0 \/mnt\/asec\/br.gov.caixa.webcaixa-1 vfat ro,dirsync,nosuid,nodev,relatime,uid=1000,fmask=0222,dmask=0222,codepage=cp437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 0\r\n\/dev\/block\/dm-1 \/mnt\/asec\/com.antutu.CpuMasterFree-1 vfat ro,dirsync,nosuid,nodev,relatime,uid=1000,fmask=0222,dmask=0222,codepage=cp437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 0\r\n\/dev\/block\/dm-2 \/mnt\/asec\/org.freeandroidtools.root_checker-1 vfat ro,dirsync,nosuid,nodev,relatime,uid=1000,fmask=0222,dmask=0222,codepage=cp437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 0\r\n\/dev\/block\/dm-3 \/mnt\/asec\/com.apedroid.hwkeyboardhelperdemo-1 vfat ro,dirsync,nosuid,nodev,relatime,uid=1000,fmask=0222,dmask=0222,codepage=cp437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 0<\/pre>\n<p>Tamb\u00e9m posso olhar as mensagens do <em>kernel<\/em> com o comando:<\/p>\n<pre>cat \/proc\/kmsg<\/pre>\n<p>No in\u00edcio das mensagens, aos 2 segundos de boot, aparecem as linhas com os nomes das parti\u00e7\u00f5es:<\/p>\n<pre>[ 2.219177] The 0 disk name = bootloader, class name = DISK, disk size = -419187676\r\n[ 2.219191] The 1 disk name = env, class name = DISK, disk size = -419187612\r\n[ 2.219203] The 2 disk name = boot, class name = DISK, disk size = -419187548\r\n[ 2.219214] The 3 disk name = system, class name = DISK, disk size = -419187484\r\n[ 2.219225] The 4 disk name = data, class name = DISK, disk size = -419187420\r\n[ 2.219235] The 5 disk name = misc, class name = DISK, disk size = -419187356\r\n[ 2.219246] The 6 disk name = recovery, class name = DISK, disk size = -419187292\r\n[ 2.219257] The 7 disk name = cache, class name = DISK, disk size = -419187228\r\n[ 2.219268] The 8 disk name = UDISK, class name = DISK, disk size = -419187164\r\n[ 2.219279] The 8 disk size = 4917248<\/pre>\n<p>Mas o tamanho das parti\u00e7\u00f5es \u00e9 incompreens\u00edvel. Para obter esta informa\u00e7\u00e3o, uso o comando:<\/p>\n<pre>cat \/proc\/partitions &gt; \/mnt\/sdcard\/partitions.txt<\/pre>\n<p>que gera um texto com o tamanho real das parti\u00e7\u00f5es (omiti algumas que n\u00e3o interessam agora):<\/p>\n<pre>major minor\u00a0 #blocks\u00a0 name\r\n93\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0 81920 nanda\r\n93\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 8\u00a0\u00a0\u00a0\u00a0\u00a0 16384 nandb\r\n93\u00a0\u00a0\u00a0\u00a0\u00a0 16\u00a0\u00a0\u00a0\u00a0\u00a0 32768 nandc\r\n93\u00a0\u00a0\u00a0\u00a0\u00a0 24\u00a0\u00a0\u00a0\u00a0 524288 nandd\r\n93\u00a0\u00a0\u00a0\u00a0\u00a0 32\u00a0\u00a0\u00a0\u00a0 384000 nande\r\n93\u00a0\u00a0\u00a0\u00a0\u00a0 40\u00a0\u00a0\u00a0\u00a0\u00a0 16384 nandf\r\n93\u00a0\u00a0\u00a0\u00a0\u00a0 48\u00a0\u00a0\u00a0\u00a0\u00a0 32768 nandg\r\n93\u00a0\u00a0\u00a0\u00a0\u00a0 56\u00a0\u00a0\u00a0\u00a0 327680 nandh\r\n93\u00a0\u00a0\u00a0\u00a0\u00a0 64\u00a0\u00a0\u00a0 2458624 nandi<\/pre>\n<p>A estrutura de parti\u00e7\u00f5es do BC1003 \u00e9 a seguinte:<\/p>\n<table border=\"1\">\n<tbody>\n<tr>\n<td><strong>N\u00ba<\/strong><\/td>\n<td><strong>Nome do dispositivo<\/strong><\/td>\n<td><strong>Tamanho<\/strong><\/td>\n<td><strong>R\u00f3tulo da parti\u00e7\u00e3o<\/strong><\/td>\n<td><strong>Sistema de arquivo<\/strong><\/td>\n<td><strong>Coment\u00e1rios<\/strong><\/td>\n<\/tr>\n<tr>\n<td>0<\/td>\n<td>nanda<\/td>\n<td>80MB<\/td>\n<td>bootloader<\/td>\n<td>vfat<\/td>\n<td>Tabela de parti\u00e7\u00f5es nos primeiros 16 MB e arquivos para assistir o bootloader nos outros 64 MB. Imagens do status da bateria, u-boot.bin, script.bin e .ini ficam aqui.<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>nandb<\/td>\n<td>16MB<\/td>\n<td>env<\/td>\n<td>raw<\/td>\n<td>Ambiente para assistir o u-boot.<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>nandc<\/td>\n<td>32MB<\/td>\n<td>boot<\/td>\n<td>raw<\/td>\n<td>Tem o kernel e seu ramdisk no formato ANDROID mkbootimg.<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>nandd<\/td>\n<td>504MB<\/td>\n<td>system<\/td>\n<td>ext4<\/td>\n<td>Parti\u00e7\u00e3o \/system do Android.<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>nande<\/td>\n<td>375MB<\/td>\n<td>data<\/td>\n<td>ext4<\/td>\n<td>Parti\u00e7\u00e3o \/data.<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>nandf<\/td>\n<td>16MiB<\/td>\n<td>misc<\/td>\n<td>raw<\/td>\n<td>Parti\u00e7\u00e3o usada para passar dados entre v\u00e1rios est\u00e1gios da sequ\u00eancia de boot (por exemplo, boot no modo recovery, fastboot etc).<\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td>nandg<\/td>\n<td>32MiB<\/td>\n<td>recovery<\/td>\n<td>raw<\/td>\n<td>Parti\u00e7\u00e3o recovery com o kernel.<\/td>\n<\/tr>\n<tr>\n<td>7<\/td>\n<td>nandh<\/td>\n<td>320MiB<\/td>\n<td>cache<\/td>\n<td>ext4<\/td>\n<td>Parti\u00e7\u00e3o montada como \/cache.<\/td>\n<\/tr>\n<tr>\n<td>8<\/td>\n<td>nandi<\/td>\n<td>2,401GB<\/td>\n<td>UBOOT<\/td>\n<td>vfat<\/td>\n<td>Parti\u00e7\u00e3o montada como \/mnt\/sdcard.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>As parti\u00e7\u00f5es importantes s\u00e3o <strong>bootloader<\/strong>, <strong>env<\/strong>, <strong>boot<\/strong>, <strong>system<\/strong> e <strong>recovery<\/strong>. As outras s\u00e3o recriadas quando do primeiro <em>boot<\/em> e configura\u00e7\u00e3o.<\/p>\n<h3>Bootloader e environment<\/h3>\n<p>Dentro do shell do tablet, uso o comando <strong>dd<\/strong> para copiar as parti\u00e7\u00f5es para o cart\u00e3o MicroSD:<\/p>\n<pre>dd if=\/dev\/block\/nanda of=\/sdcard\/bootloader.img\r\ndd if=\/dev\/block\/nandb of=\/sdcard\/env.img<\/pre>\n<p>O comando <strong>dd<\/strong> \u00e9 mais informativo, mas tamb\u00e9m posso usar o comando <strong>cat<\/strong>:<\/p>\n<pre>cat \/dev\/block\/nanda &gt; \/sdcard\/bootloader.img<\/pre>\n<p>Depois de copiadas as parti\u00e7\u00f5es para arquivos img no cart\u00e3o MicroSD, pode-se conectar o cabo USB e copi\u00e1-los para o PC desktop, para manipula\u00e7\u00e3o. Tamb\u00e9m posso fazer isto do shell Linux ou Windows com o Android Debug Bridge (adb). Abaixo, os comandos est\u00e3o juntos numa mesma linha para facilitar. A linha com o prompt &#8220;$&#8221; \u00e9 o comando, as outras linhas s\u00e3o os resultados. A linha de comandos gera o backup, copia para o PC e apaga a imagem do cart\u00e3o SD para liberar espa\u00e7o. Primeiro, o bootloader:<\/p>\n<pre>$ adb shell dd if=\/dev\/block\/nanda of=\/sdcard\/bootloader.img &amp;&amp; adb pull \/sdcard\/bootloader.img &amp;&amp; adb shell rm \/sdcard\/bootloader.img\r\n163840+0 records in\r\n163840+0 records out\r\n83886080 bytes transferred in 19.563 secs (4287996 bytes\/sec)<\/pre>\n<p>e, depois, o ambiente de boot:<\/p>\n<pre>adb shell dd if=\/dev\/block\/nandb of=\/sdcard\/env.img &amp;&amp; adb pull \/sdcard\/env.img &amp;&amp; adb shell rm \/sdcard\/env.img\r\n32768+0 records in\r\n32768+0records out\r\n16777216 bytes transferred in 1.507 secs (11132857 bytes\/sec)<\/pre>\n<h3>Bootloader<\/h3>\n<p>O <strong>bootloader<\/strong> \u00e9 uma imagem no sistema de arquivo <strong>vfat<\/strong> e pode ser montada no Ubuntu com os comandos:<\/p>\n<pre>sudo mkdir \/media\/cranebootloader\r\nsudo mount -t vfat -o loop bootloader.img \/media\/cranebootloader<\/pre>\n<p>Com isto, posso entrar no diret\u00f3rio \/media\/cranebootloader, investigar e extrair ou modificar arquivos desta imagem.<\/p>\n<div id=\"attachment_3482\" style=\"width: 310px\" class=\"wp-caption alignright\"><a href=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2013\/05\/yonestop_oem.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3482\" class=\"size-medium wp-image-3482\" src=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2013\/05\/yonestop_oem-300x175.png\" alt=\"Yones default splash screen\" width=\"300\" height=\"175\" \/><\/a><p id=\"caption-attachment-3482\" class=\"wp-caption-text\">Yones default splash screen<\/p><\/div>\n<p>Na pasta \/linux, por exemplo, est\u00e3o muitas imagens em formato BMP que aparecem no boot (splash screen), como a imagem default de equipamento OEM, que \u00e9 umas das mais feias que j\u00e1 vi. Para trocar por outra, se renomeia para &#8220;linux.bmp&#8221;. V\u00e1rias destas imagens t\u00eam nomes de fabricantes &#8212; inclusive da Cor\u00e9ia do Norte&#8211;, o que me ajudou a achar as ROMs originais de um fabricante.<\/p>\n<p>Tamb\u00e9m pode-se trocar a <em>splash screen<\/em> a partir do pr\u00f3prio Android shell. Entra-se no shell com o comando &#8220;adb shell&#8221; e usa-se os comandos abaixo:<\/p>\n<pre>mkdir \/sdcard\/nanda\r\nmount -t vfat \/dev\/block\/nanda \/sdcard\/nanda\r\ncd \/sdcard\/nanda\/linux\r\ncp linux.bmp linux.old.bmp\r\ncp seuarquivo.bmp linux.bmp<\/pre>\n<h3>Env<\/h3>\n<p>O <strong>env<\/strong> \u00e9 o ambiente para alguns par\u00e2metros do boot. \u00c9 um arquivo bin\u00e1rio com strings terminadas em zero. Aberto por um editor hexadecimal, ele revela os seguintes par\u00e2metros:<\/p>\n<pre>bootdelay=0\r\nbootcmd=run setargs boot_normal\r\nconsole=ttyS0,115200\r\nnand_root=\/dev\/nandc\r\nmmc_root=\/dev\/mmcblk0p4\r\ninit=\/init\r\nloglevel=8\r\nsetargs=setenv bootargs console=${console} root=${nand_root} init=${init} loglevel=${loglevel}\r\nboot_normal=nand read 40007800 boot;boota 40007800\r\nboot_recovery=nand read 40007800 recovery;boota 40007800\r\nboot_fastboot=fastboot\r\nrecovery_key_value_max=0x13\r\nrecovery_key_value_min=0x10\r\nfastboot_key_value_max=0x8\r\nfastboot_key_value_min=0x2<\/pre>\n<h3>Boot e recovery<\/h3>\n<p>As parti\u00e7\u00f5es <strong>boot<\/strong> e <strong>recovery<\/strong> s\u00e3o copiadas com os comandos:<\/p>\n<pre>$ adb shell dd if=\/dev\/block\/nandc of=\/sdcard\/boot.img &amp;&amp; adb pull \/sdcard\/boot.img &amp;&amp; adb shell rm \/sdcard\/boot.img\r\n65536+0 records in\r\n65536+0 records out\r\n33554432 bytes transferred in 10.160 secs (3302601 bytes\/sec)\r\n5026 KB\/s (33554432 bytes in 6.518s)\r\n$ adb shell dd if=\/dev\/block\/nandg of=\/sdcard\/recovery.img &amp;&amp; adb pull \/sdcard\/recovery.img &amp;&amp; adb shell rm \/sdcard\/recovery.img\r\n65536+0 records in\r\n65536+0 records out\r\n33554432 bytes transferred in 6.065 secs (5532470 bytes\/sec)\r\n4850 KB\/s (33554432 bytes in 6.755s<\/pre>\n<p>Elas est\u00e3o num formato especial do Android, composto por um cabe\u00e7alho de 2kb, o <em>kernel<\/em> Linux e um ou dois <em>ramdisks<\/em> com arquivos b\u00e1sicos necess\u00e1rios para o <em>boot<\/em>. Para se trabalhar nestes arquivos &#8212; geralmente se modifica o <em>ramdisk<\/em> &#8212; deve-se separar os arquivos com utilit\u00e1rios desenvolvidos por hackers.<\/p>\n<p>Estes arquivos t\u00eam a seguinte estrutura:<\/p>\n<table border=\"1\">\n<tbody>\n<tr>\n<td><strong>\u00c1rea<\/strong><\/td>\n<td><strong>Nome<\/strong><\/td>\n<td><strong>Tamanho em bytes<\/strong><\/td>\n<td><strong>Formato<\/strong><\/td>\n<td><strong>Coment\u00e1rios<\/strong><\/td>\n<\/tr>\n<tr>\n<td rowspan=\"14\">Header<\/td>\n<td>bootMagic<\/td>\n<td>8<\/td>\n<td>ASCII<\/td>\n<td>Identificador do tipo de estrutura do arquivo (&#8220;assinatura&#8221;). Cont\u00e9m &#8220;ANDROID!&#8221;<\/td>\n<\/tr>\n<tr>\n<td>kernelSize<\/td>\n<td>4<\/td>\n<td>long int<\/td>\n<td>Tamanho do kernel em bytes<\/td>\n<\/tr>\n<tr>\n<td>kernelLoadAddr<\/td>\n<td>4<\/td>\n<td>long int<\/td>\n<td>Endere\u00e7o de carga do kernel na mem\u00f3ria RAM do dispositivo<\/td>\n<\/tr>\n<tr>\n<td>ram1Size<\/td>\n<td>4<\/td>\n<td>long int<\/td>\n<td>Tamanho do ramdisk 1 em bytes<\/td>\n<\/tr>\n<tr>\n<td>ram1LoadAddr<\/td>\n<td>4<\/td>\n<td>long int<\/td>\n<td>Endere\u00e7o da RAM onde carregar o ramdisk 1<\/td>\n<\/tr>\n<tr>\n<td>ram2Size<\/td>\n<td>4<\/td>\n<td>long int<\/td>\n<td>Tamanho do ramdisk 2 em bytes<\/td>\n<\/tr>\n<tr>\n<td>ram2LoadAddr<\/td>\n<td>4<\/td>\n<td>long int<\/td>\n<td>Endere\u00e7o da RAM onde carregar o ramdisk 2<\/td>\n<\/tr>\n<tr>\n<td>tagsAddr<\/td>\n<td>4<\/td>\n<td>long int<\/td>\n<td>Endere\u00e7o de tags do kernel<\/td>\n<\/tr>\n<tr>\n<td>pageSize<\/td>\n<td>4<\/td>\n<td>long int<\/td>\n<td>Tamanho das &#8220;p\u00e1ginas&#8221; do flash<\/td>\n<\/tr>\n<tr>\n<td>unused1<\/td>\n<td>4<\/td>\n<td>long int<\/td>\n<td>N\u00e3o usado<\/td>\n<\/tr>\n<tr>\n<td>unused2<\/td>\n<td>4<\/td>\n<td>long int<\/td>\n<td>N\u00e3o usado<\/td>\n<\/tr>\n<tr>\n<td>bootName<\/td>\n<td>16<\/td>\n<td>ASCII<\/td>\n<td>Nome do system-on-chip (placa do hardware)<\/td>\n<\/tr>\n<tr>\n<td>cmdLine<\/td>\n<td>512<\/td>\n<td>ASCII<\/td>\n<td>Linha de comando do kernel. Ser\u00e1 usada mais tarde na recria\u00e7\u00e3o da imagem<\/td>\n<\/tr>\n<tr>\n<td>id<\/td>\n<td>6<\/td>\n<td>ASCII<\/td>\n<td>Identificador (?)<\/td>\n<\/tr>\n<tr>\n<td>Kernel<\/td>\n<td>kernel<\/td>\n<td>kernelSize<\/td>\n<td>bin\u00e1rio<\/td>\n<td>Kernel Linux<\/td>\n<\/tr>\n<tr>\n<td>RAM disk 1<\/td>\n<td>ramdisk1<\/td>\n<td>ram1Size<\/td>\n<td>bin\u00e1rio<\/td>\n<td>Inicia com os bytes hexa 1F 8B (assinatura de ramdisk). Come\u00e7a na p\u00e1gina acima do kernel. Para calcular o tamanho do kernel em p\u00e1ginas, a f\u00f3rmula \u00e9: kernelSizeInPages = (kernelSize + pageSize &#8211; 1) \/ pageSize. Para calcular o in\u00edcio do ramdisk, a f\u00f3rmula \u00e9: ram1Addr = (1 + kernelSizeInPages) * pageSize<\/td>\n<\/tr>\n<tr>\n<td>RAM disk 2<\/td>\n<td>ramdisk2<\/td>\n<td>ram2Size<\/td>\n<td>bin\u00e1rio<\/td>\n<td>Raramente existe<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>O kernel e o ramdisk s\u00e3o extra\u00eddo pelos <a href=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2013\/05\/extract.zip\">scripts em Perl extract-kernel.pl e extract-ramdisk.pl<\/a>, criados pelo hacker Lox:<\/p>\n<pre>extract-kernel.pl boot.img\r\nextract-ramdisk.pl boot.img<\/pre>\n<p>O segundo script extrai e recria a estrutura de pastas do ramdisk, que est\u00e1 armazenada no formato cpio.gz.<\/p>\n<p>Este trabalho tamb\u00e9m pode ser feito com um editor de arquivos bin\u00e1rios como Bless Hex Editor.<\/p>\n<p><a href=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2013\/05\/initlogo.png\"><img loading=\"lazy\" decoding=\"async\" title=\"initlogo.rle, segunda imagem do boot do BC1003\" src=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2013\/05\/initlogo-300x175.png\" alt=\"initlogo.rle, segunda imagem do boot do BC1003\" width=\"300\" height=\"175\" \/><\/a><\/p>\n<p>Por exemplo, dentro da pasta raiz existe o arquivo initlogo.rle, que \u00e9 a segunda imagem que aparece depois que a gente liga o BC1003. \u00c9 o androidezinho de bra\u00e7os cruzados copiado do site <a href=\"http:\/\/www.androidcentral.com\">Android Central<\/a>. Esta imagem est\u00e1 num formato <em>raw<\/em> (cru, sem cabe\u00e7alhos ou metainforma\u00e7\u00f5es) que pode ser aberto pelo Irfanview, &#8220;File &gt; Open as&#8230; &gt; Raw file&#8221;, especificando-se tamanho 1024 x 600, 32 bits, ordem de cor ABGR, <em>interleaved<\/em>. Mas as cores v\u00eam trocadas. Na verdade, ele \u00e9 ARGB (Canal Alfa, Red, Green, Blue). Para ficar com as cores corretas, deve-se ir ao menu &#8220;Image &gt; Swap colors &gt; RGB -&gt; BGR&#8221;. Descobri isto na tentativa e erro. O Irfanview n\u00e3o grava ARGB e n\u00e3o conhe\u00e7o programa para gravar neste formato, mas n\u00e3o deve ser dif\u00edcil escrever um script &#8212; em Python, por exemplo &#8212; que converta o formato. Afinal, s\u00e3o apenas bytes crus.<\/p>\n<h3>System<\/h3>\n<p>A parti\u00e7\u00e3o <strong>system<\/strong> cont\u00e9m todo o sistema Android. O backup, que \u00e9 bem mais demorado que os anteriores &#8212; leva mais de 5 minutos &#8212; , \u00e9 feito com o comando:<\/p>\n<pre>$ adb shell dd if=\/dev\/block\/nandd of=\/sdcard\/system.img &amp;&amp; adb pull \/sdcard\/system.img &amp;&amp; adb shell rm \/sdcard\/system.img\r\n1048576+0 records in\r\n1048576+0 records out\r\n536870912 bytes transferred in 149.046 secs (3602048 bytes\/sec)\r\n4738 KB\/s (536870912 bytes in 110.635s)<\/pre>\n<p>A parti\u00e7\u00e3o <strong>system<\/strong> est\u00e1 no formato <strong>ext4 sparse<\/strong> e deve ser convertida pelo programa <a href=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2013\/05\/simg2img.7z\">simg2img<\/a> (Linux) para ext4 normal, antes de ser montada pelo comando:<\/p>\n<pre>simg2img system.img system2.img\r\nsudo mkdir \/media\/cranesystem\r\nsudo mount -t ext4 -o loop system2.img \/media\/cranesystem<\/pre>\n<p>Depois de montadas, pode-se copiar a estrutura de arquivos para outro lugar e edit\u00e1-los a gosto.<\/p>\n<h3>Recriando imagens<\/h3>\n<p>Feitas as mudan\u00e7as, pode-se recriar as images do BC1003. O boot.img se recria assim, com os <a href=\"http:\/\/meiradarocha.jor.br\/news\/wp-content\/uploads\/2013\/05\/mkboot-linux.zip\">programas Linux mkboot<\/a>:<\/p>\n<pre># mkbootfs boot.img-ramdisk | gzip &gt; ramdisk-boot \r\n# mkbooting --kernel\u00a0boot.img-kernel --ramdisk\u00a0ramdisk-boot --base 0x40000000 --cmdline 'console=ttyS0,115200 rw init=\/init loglevel=6' -o new-boot.img<\/pre>\n<p>Atrav\u00e9s do shell, copia-se de volta as imagens para a parti\u00e7\u00e3o correspondente, desde que o boot esteja intacto. Por exemplo, a imagem do sistema Android:<\/p>\n<pre>dd if=\/sdcard\/system.img of=\/dev\/block\/nandd<\/pre>\n<p>O processo de cria\u00e7\u00e3o de uma imagem completa da ROM allwinner, a partir de alguma ROM baixada de fabricantes, pode ser vista no site <a href=\"http:\/\/dorkfiles.com\/allwinneralterning-and-creating-phoenixsuit-images\/\">Allwinner\/Alterning and Creating PhoenixSuit images<\/a>. Com o programa Livesuite, da pr\u00f3pria Allwinner, pode-se gravar todo o sistema no tablet, caso ele estrague.<\/p>\n<h3>Imagens prontas<\/h3>\n<p>Umas das marcas que comercializa este tablet \u00e9 a Kocaso, dos EUA. \u00c9 a \u00fanica empresa em que eu achei as <a href=\"http:\/\/www.kocaso.com\/firmware\/?model=M1050\">ROM do BC1003<\/a>. A imagem que funcionou para meu BC1003 foi a primeira das tr\u00eas, arquivo M1050B.exe, de onde se extrai a imagem M1050_2.img.<\/p>\n<p>Uma grata surpresa: elas t\u00eam uma parti\u00e7\u00e3o <strong>\/data<\/strong> com a triplo do tamanho desta da Wei: 1.048.576 bytes, em vez de 384.000 bytes. A parti\u00e7\u00e3o <strong>\/data<\/strong> \u00e9 onde todos os programar guardam todo o tipo de dados e, em geral, \u00e9 a primeira a ficar lotada, impedindo que se instalem novos programas, mesmo que a parti\u00e7\u00e3o <strong>\/system<\/strong> e o disco interno tenham espa\u00e7o. No entanto, esta mem\u00f3ria extra foi retirada do disco interno da Kocaso, em <strong>\/mnt\/sdcard<\/strong> ou <strong>\/sdcard<\/strong>, que tem 1.810.432 bytes em vez de 2.458.624 bytes. Mas na pr\u00e1tica, isto n\u00e3o \u00e9 muito grave. A gente usa o aplicativo Link2SD e pode passar todos os programas novos para o cart\u00e3o SD e deixar a mem\u00f3ria de disco interna mais livre para m\u00fasica, filmes e fotos. Esta imagem da Kocaso n\u00e3o vem com o app<strong> GPS Test<\/strong> que vem no Wei Wide PRO mas basta baix\u00e1-lo e pass\u00e1-lo para o diret\u00f3rio de sistema usando uma op\u00e7\u00e3o do Link2SD.<\/p>\n<p>Este \u00e9 o esquema de parti\u00e7\u00f5es do Kocaso:<\/p>\n<pre>root@android:\/ # cat \/proc\/partitions\r\ncat \/proc\/partitions\r\nmajor   minor\u00a0   #blocks name\r\n\u00a0 93\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0 65536 nanda [bootloader]\r\n\u00a0 93\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 8\u00a0\u00a0\u00a0\u00a0\u00a0 16384 nandb\r\n\u00a0 93\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 16\u00a0\u00a0\u00a0\u00a0\u00a0 32768 nandc\r\n\u00a0 93\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 24\u00a0\u00a0\u00a0\u00a0 524288 nandd [\/system]\r\n\u00a0 93\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 32\u00a0\u00a0\u00a0 1048576 nande [\/data]\r\n\u00a0 93\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 40\u00a0\u00a0\u00a0\u00a0\u00a0 16384 nandf\r\n\u00a0 93\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 48\u00a0\u00a0\u00a0\u00a0\u00a0 32768 nandg [recovery]\r\n\u00a0 93\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 56\u00a0\u00a0\u00a0\u00a0 327680 nandh\r\n\u00a0 93\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 64\u00a0\u00a0\u00a0 1810432 nandi [\/sdcard]<\/pre>\n<h3>Refer\u00eancias<\/h3>\n<ul>\n<li><strong>Android tablet info<\/strong>. P\u00e1gina de jovem doutor escoc\u00eas. Melhor fonte de informa\u00e7\u00f5es t\u00e9cnicas e tutoriais sobre esta classe de <em>tablets<\/em>. Tamb\u00e9m tem utilit\u00e1rio de convers\u00e3o de imagens bitmapa (fotos) para formatos usados pelo Android. &lt;<a href=\"http:\/\/www.imajeenyus.com\/computer\/20130301_android_tablet\/android\/index.html\">http:\/\/www.imajeenyus.com\/computer\/20130301_android_tablet\/android\/index.html<\/a>&gt;.<\/li>\n<li><strong>Android\/partitions<\/strong>. &lt;<a href=\"http:\/\/linux-sunxi.org\/Android\/partitions\">http:\/\/linux-sunxi.org\/Android\/partitions<\/a>&gt;.<\/li>\n<li><strong>How to edit init.rc in Android<\/strong>. &lt;<a href=\"http:\/\/droidcore.blogspot.com.br\/2012\/12\/how-to-edit-initrc-in-android.html\">http:\/\/droidcore.blogspot.com.br\/2012\/12\/how-to-edit-initrc-in-android.html<\/a>&gt;.<\/li>\n<li>McGHEE. Rob.<strong> Creating an Android update.zip package<\/strong>. &lt;<a href=\"http:\/\/www.robmcghee.com\/android\/creating-an-android-update-zip-package\/\">http:\/\/www.robmcghee.com\/android\/creating-an-android-update-zip-package\/<\/a>&gt;.<\/li>\n<li><strong>HOWTO: Unpack, Edit, and Re-Pack Boot Images<\/strong>. &lt;<a href=\"http:\/\/android-dls.com\/wiki\/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images\">http:\/\/android-dls.com\/wiki\/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images<\/a>&gt;.<\/li>\n<li><strong>Generating key<\/strong>. &lt;<a href=\"http:\/\/android-dls.com\/wiki\/index.php?title=Generating_Keys\">http:\/\/android-dls.com\/wiki\/index.php?title=Generating_Keys<\/a>&gt;.<\/li>\n<li><strong>How to create Android update zip package<\/strong>. &lt;<a href=\"http:\/\/www.londatiga.net\/it\/how-to-create-android-update-zip-package\/\">http:\/\/www.londatiga.net\/it\/how-to-create-android-update-zip-package\/<\/a>&gt;.<\/li>\n<li><strong>Android code<\/strong>. &lt;<a href=\"https:\/\/android.googlesource.com\/platform\/bootable\/recovery\/+\/android-4.0.4_r1\/updater\/install.c\">https:\/\/android.googlesource.com\/platform\/bootable\/recovery\/+\/android-4.0.4_r1\/updater\/install.c<\/a>&gt;.<\/li>\n<li><strong>How create update.zip<\/strong>. &lt;<a href=\"http:\/\/modmymobile.com\/forums\/402-general-motorola-android\/561090-how-create-update-zip.html\">http:\/\/modmymobile.com\/forums\/402-general-motorola-android\/561090-how-create-update-zip.html<\/a>&gt;.<\/li>\n<li><strong>How make livesuite.img with dumped rom<\/strong>. &lt;<a href=\"http:\/\/www.freaktab.com\/showthread.php?912-how-make-livesuite-img-with-dumped-rom\">http:\/\/www.freaktab.com\/showthread.php?912-how-make-livesuite-img-with-dumped-rom<\/a>&gt;.<\/li>\n<li><strong>Allwinner\/Alterning and Creating PhoenixSuit images<\/strong>.\u00a0&lt;<a href=\"http:\/\/dorkfiles.com\/allwinneralterning-and-creating-phoenixsuit-images\/\">http:\/\/dorkfiles.com\/allwinneralterning-and-creating-phoenixsuit-images\/<\/a>&gt;<\/li>\n<li><strong>Allwinner info<\/strong>. GitHub com muitas informa\u00e7\u00f5es t\u00e9cnica, listagens assembly da ROM de chips Allwinner etc. &lt;<a href=\"https:\/\/github.com\/hno\/Allwinner-Info\">https:\/\/github.com\/hno\/Allwinner-Info<\/a>&gt;.<\/li>\n<li><strong>Kocaso<\/strong>. Imagens do firmware para recupera\u00e7\u00e3o do sistema (A imagem no arquivo M1050B.exe funcionou perfeitamente no Wei Wide PRO). &lt;<a href=\"http:\/\/www.kocaso.com\/firmware\/?model=M1050\">http:\/\/www.kocaso.com\/firmware\/?model=M1050<\/a>&gt;<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Descubra como fazer c\u00f3pias do sistema Android (imagens ROM) de tablet Allwinner A10<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[69,29,23],"tags":[],"class_list":["post-3300","post","type-post","status-publish","format-standard","hentry","category-android","category-computadores","category-linux"],"_links":{"self":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts\/3300","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/comments?post=3300"}],"version-history":[{"count":1,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts\/3300\/revisions"}],"predecessor-version":[{"id":5701,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/posts\/3300\/revisions\/5701"}],"wp:attachment":[{"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/media?parent=3300"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/categories?post=3300"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/meiradarocha.jor.br\/news\/wp-json\/wp\/v2\/tags?post=3300"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}