konver | Дата: Среда, 12.08.2015, 00:12 | Сообщение # 1
|
Рядовой
Группа: Пользователи
Сообщений: 2
Награды: 5
Репутация: 348
Статус: Оффлайн
|
Иногда требуется распаковать свой, или не свой Imageupdate (прошивку)
Так вот, если вдруг вам это понадобилось по каким либо причинам, то вооружайтесь hex редактором и линуксой
Сама структура прошивки там простая. В заголовке все подсказки есть Вот пример:
STB Model:MAG250 Date:Wed Jun 10 01:58:33 BST 2015 Image Version:218 Image Description:Test VerUpdateAPI:2 Kernel size:3334307 Image size:61797479 Env size:155 65312814 Userfs Version:1 Userfs size:144 65313232 SecondBoot size:162683 65313639 Logotype size:39488 65476585 Start data...
Например, раз нам нужен rootfs, то в заголовке ищем "Image". Для него дается только размер, в отличие от env, userfs и secondboot, поэтому смещение посчитаем сами. Нам нужно сложить длину заголовка и длину Kernel, благо kernel и rootfs идут друг за дружкой ) Область, где размещается kernel идет после "Start data..." и символа перноса строки 0х0А. К тому же все это дело на файловой системе Jffs2, поэтому нужные нам блоки начинаются с hex последовательности 85 19, которые как раз идут после "Start data..." и символа переноса строки 0х0А. В моем примере kernel начинается с адреса 108h (число дано в 16-ой системе счисления, в 10-й это число 264). К этому числу прибавляем длину области Kernel - 3 334 307 байт. Получаем число 3 334 571 или в hex 32 E1 AB. По этому смещению будет находиться начало блока Image, это проверяется наличием первого байта ФС jffs2 0х85 (после него всегда идет 0х19, если вы верно нашли смещение в файле). Длина блока Image указана в заголовке - это 61 797 479 байт. Я пользовался hex редактором winhex, поэтому через меню выделил блок данных указав начало блока 32 E1 AB, а конец блока находится тоже легко, к адресу начала блока прибавьте длину блока (переведя с 10-й в 16-ю). После чего можно выделенный блок скопировать в отдельный файл. Вот мы и получили наш Image. Ну, а чтобы получить rootfs, тут уже танцы с бубнами ))))
Далее этот файлик надо в Ubuntu, Debian или любой другой nix для вас удобной системе смонтировать как блочное устройство. На примере Ubuntu будет выглядеть так. Убунте для работы с файловой системой jffs2 нужен пакет mtd-utils, ставим его и выполняем команды: modprobe jffs2 modprobe mtdram total_size=64536 erase_size=16 modprobe mtdchar mknod /dev/mtdblock0 b 31 0 modprobe mtdblock losetup -o 16 /dev/loop0 /home/kikoz/Image dd if=/dev/loop0 of=/dev/mtdblock0 losetup -d /dev/loop0 mkdir /mnt/rootfs mount -t jffs2 /dev/mtdblock0 /mnt/rootfs
и вуаля в папке /mnt/rootfs имеем так необходимый нам rootfs в нормальном виде Там уже можете его сжать и хранить у себя для дальнейшего использования.
работу можем закончить так: umount /mnt/rootfs rmmod mtdblock rmmod mtdram rmmod jffs2
Способ подключения образа в jffs2 взят отсюда http://www.zaurus.ru/board/viewtopic.php?t=53401.
Более простой и легкий способ я не искал, но может быть он и существует.
Представленая информация только для учебных и ознакомительных целей!
Удачи Вам!
Сообщение отредактировал konver - Среда, 12.08.2015, 00:16
|
|
|
Поделиться с друзьями:
|
|
|
|