Модификация образов партиций: различия между версиями
Zombah (обсуждение | вклад) м (add u-boot initrd) |
Zombah (обсуждение | вклад) м (make topic name more general) |
||
Строка 1: | Строка 1: | ||
=Образы партиций= | ==Образы (.img) партиций== | ||
---- | ---- | ||
Что нужно чтобы собрать или разобрать вручную готовые образы партиций | Что нужно чтобы собрать или разобрать вручную готовые образы партиций | ||
== | ==Загрузочные boot.img/recovery.img== | ||
Образ данной партиции формируется системой Андроид при сборке с помощью утилиты | Образ данной партиции формируется системой Андроид при сборке с помощью утилиты | ||
''mkbootimg'', в сорцах Андроида она живет в папке ''system/core/mkbootimg'', чтобы | ''mkbootimg'', в сорцах Андроида она живет в папке ''system/core/mkbootimg'', чтобы | ||
Строка 24: | Строка 24: | ||
* -o путь и имя результирующего файла, например boot.img | * -o путь и имя результирующего файла, например boot.img | ||
===ramdisk или initrd=== | |||
Файл initrd представляет из себя каталог со скриптами, конфигами и драйверами которые нужны ядру для успешного старта системы, | Файл initrd представляет из себя каталог со скриптами, конфигами и драйверами которые нужны ядру для успешного старта системы, | ||
создать его можно следующим образом: | создать его можно следующим образом: | ||
Строка 42: | Строка 43: | ||
</pre> | </pre> | ||
===U-Boot ramdisk=== | |||
Если initrd еще запакован для U-Boot с помощью mkimage, то сначала от него надо отрезать | Если initrd еще запакован для U-Boot с помощью mkimage, то сначала от него надо отрезать | ||
первые 64 байта загаловка U-Boot. | первые 64 байта загаловка U-Boot. | ||
Строка 49: | Строка 51: | ||
</pre> | </pre> | ||
==Образ | ==Образ системной партиции ака system.img== | ||
Данные образ является просто файловой системой, в нашем случае ext4, у многих других | Данные образ является просто файловой системой, в нашем случае ext4, у многих других | ||
устройств с нанд памятью файловая система yaffs2 для этого файла, разобрать/собрать их сложнее | устройств с нанд памятью файловая система yaffs2 для этого файла, разобрать/собрать их сложнее | ||
можно использовать yaffs2utils. Файл с файловой системой yaffs2 можно отличить натравив на него | можно использовать yaffs2utils. Файл с файловой системой yaffs2 можно отличить натравив на него | ||
утилиту ''file''. | утилиту ''file''. | ||
Чтобы создать образ | Чтобы создать образ системной партиции проделываем следующую процедуру: | ||
* Создаем пустой файл нужного нам размера: | * Создаем пустой файл нужного нам размера: | ||
<pre> | <pre> |
Версия от 15:32, 2 июня 2016
Образы (.img) партиций
Что нужно чтобы собрать или разобрать вручную готовые образы партиций
Загрузочные boot.img/recovery.img
Образ данной партиции формируется системой Андроид при сборке с помощью утилиты mkbootimg, в сорцах Андроида она живет в папке system/core/mkbootimg, чтобы собирать эту партицию вручную, не собирая целиком всю систему нужно проделать следующую операцию:
gcc -o mkbootimg mkbootimg.c ../libmincrypt/sha.c -I../include gcc -o unpackbootimg unpackbootimg.c ../libmincrypt/sha.c -I../include
Полученному бинарнику mkbootimg нам нужно передать четыре переменных для успешной сборки
- --kernel в котором указываем путь к бинарнику нашего ядра ака zImage
- --ramdisk в котором указываем путь к архиву содержащему initrd, о том как собрать initrd ниже.
- --cmdline с параметрами передаваймыми ядру при запуске, на данный момент cmdline для Андройда следующий:
"panic=10 video=tegrafb console=tty0 no_console_suspend=1 tegraboot=sdmmc tegrapart=recovery:300:a00:800,boot:d00:1000:800,mbr:1d00:200:800, system:1f00:25800:800,cache:27700:32000:800,misc:59700:400:800,store:59c00:9a600:800, userdata:f4300:df3500:800 androidboot.hardware=paz00"
- -o путь и имя результирующего файла, например boot.img
ramdisk или initrd
Файл initrd представляет из себя каталог со скриптами, конфигами и драйверами которые нужны ядру для успешного старта системы, создать его можно следующим образом:
- сформировать или взять готовый католог содержащий init и init.rc и прочие файлы нужные Андройду
- собрать из него готовый initrd следующей коммандой:
find . |cpio -o -H newc |gzip > ../initrd
папкой ниже получаем файл initrd с содержимым нашего каталога.
Для того чтобы разобрать уже готовый образ 6-ой партиции существует утилита unpackbootimg, собирается аналогично антиподу, на выходе она дает три файла с ядром, initrd и содержимым cmdline
Распаковать initrd вручную можно следующим образом
gzip -dc ../initrd.gz | cpio -id
U-Boot ramdisk
Если initrd еще запакован для U-Boot с помощью mkimage, то сначала от него надо отрезать первые 64 байта загаловка U-Boot.
dd if=initrd.uboot of=initrd.gz bs=1 skip=64
Образ системной партиции ака system.img
Данные образ является просто файловой системой, в нашем случае ext4, у многих других устройств с нанд памятью файловая система yaffs2 для этого файла, разобрать/собрать их сложнее можно использовать yaffs2utils. Файл с файловой системой yaffs2 можно отличить натравив на него утилиту file. Чтобы создать образ системной партиции проделываем следующую процедуру:
- Создаем пустой файл нужного нам размера:
dd if=/dev/zero of=system.img bs=512 count=131072
- Форматируем его в нужную нам файловую систему
mkfs.ext4 system.img
- Монтируем полученный файл через петлю
mkdir /tmp/system.img sudo mount -oloop system.img /tmp/system.img
Чтобы прочесть или поменять содержимое такого образа делаем последний пункт без первых двух.
Yaffs2 образы партиций
Бывает, что хочется заглянуть в чужие образы для nand собраные с файловой системой yaffs2.
Вот тут нашел мануалы как это делать правильно: https://wiki.maemo.org/Modifying_the_root_image http://www.friendlyarm.net/forum/topic/1141
попробую на досуге.