воскресенье, 29 сентября 2013 г.

RK3066 TV Box update.img: Туда и обратно.

Разбираюсь с прошивками TV-Box на базе RockChip RK3066. Так, чисто для себя...
Итак. Распаковать имадж:

$ img_unpack update.img update-unpacked
rom version: 4.1.1
build time: 2013-08-20 14:15:41
chip: 60
checking md5sum....OK
 
Полученный образок распаковывается с помощью afptool:
 
$ afptool -unpack update-unpacked root
Check file...OK
------- UNPACK -------
package-file    0x00000800      0x00000238
RK30xxLoader(L)_V1.22.bin       0x00001000      0x0002EC7A
parameter       0x00030000      0x00000267
Image/misc.img  0x00030800      0x0000C000
Image/kernel.img        0x0003C800      0x00711030
Image/boot.img  0x0074E000      0x00A50000
Image/recovery.img      0x0119E000      0x00A9C000
Image/system.img        0x01C3A000      0x15D60800
parameter       0x1799A800      0x0000025B
SELF    0x00000000      0x1799C004
Skip SELF file.
update-script   0x1799B000      0x000003A5
recover-script  0x1799B800      0x0000010A
UnPack OK!
$
Забегая вперед скажу, что сразу же проверил обратную процедуру - упаковку с полученного дерева. Файлы в результате идентичные, об этом сказал ls -l и md5sum.
Упаковка до *.img делается с помощью img_maker, md5-суммы сходиться не будут, т.к. внутрь файла .img запихивается время, когда он был произведен. Проверил тем, что опять распаковал и проверил md5-сумму. Все точно.
Итак, после распаковки apftool получаем каталог root, в котором лежит структура прошивки андроида. В каталог Image легли образы всех кусков прошивки - boot, kernel, misc, recovery, system. В моем случае system.img - это готовая к работе ext3:
 
$ file Image/system.img
Image/system.img: Linux rev 1.0 ext3 filesystem data...

Соответственно, ее можно просто замонтировать по соседству:
$ mkdir system
$ sudo mount -o loop Image/system.img system 
О пассах с system.img - как нибудь позже.

Файл Image/boot.img содержит в себе и ядро и ramdisk

$ boot_info Image/boot.img
Page size: 16384 (0x00004000)
Kernel size: 7409700 (0x00711024)
Ramdisk size: 3374548 (0x00337dd4)
Second size: 0 (0x00000000)
Board name:
Command line: ''
Base address: 1611169536 (0x60087f00)

Распаковывается это дело с помощью скрипта split_boot:

$ split_boot Image/boot.img
Page size: 16384 (0x00004000)
Kernel size: 7409700 (0x00711024)
Ramdisk size: 3374548 (0x00337dd4)
Second size: 0 (0x00000000)
Board name:
Command line: ''
Base address: (0x60087f00)
 
в результате в текущем каталоге появляется каталог boot, который содержит boot.img-kernel, boot.img-ramdisk.cpio.gz и распакованный в соответствующий каталог ramdisk.Файлы Image/kernel.img - это упакованное ядро, а boot/boot.img-kernel - распакованное. репаковку можно делать с помощью mkkrnlimg. С ключиком -a - в img, с ключиком -r - распаковать. Опять же проверено по md5sum. Собрать boot.img назад можно с помощью mkbootimg, указав программе файлы с незапакованным ядром и рамдиском:

$ mkbootimg --kernel boot/boot.img-kernel \
     --ramdisk boot/boot.img-ramdisk.cpio.gz \
     -o Image/boot-1.img

опять же, boot.img & boot-1.img показывают одинаковые md5-суммы.

Пока я не смог понять, какой формат у файла boot/boot.img-kernel - я полагал, что это загзипленное ядро, но file говорит, что не понял, что это за формат.

Тулзы взяты из rk-tools, mkbootimg из rk30sdk.

Комментариев нет:

Отправить комментарий