Створюємо прошивку для Android своїми руками Робота з рамдіском


Працюємо з рамдіском (для ядер з initrd).


Стаття написана на прикладі роботи з образом ramdisk від таблетки Flytouch 2.

Сам рамдіск представляє з себе архів gz всередині которго міститься архів cpio розташований в образі виготовленому засобами mkimage. Подивимося на образ уважніше.


Ця інформація нам знадобиться надалі при створенні власного рамдіска.

barsuk @ droidtest: ~ / droid / installer $ mkimage-l ramdisk.img
Image Name: hRamdisk
Created: Sun Apr 24 16:28:14 2011
Image Type: ARM Linux RAMDisk Image (uncompressed)
Data Size: 1485551 Bytes = 1450.73 kB = 1.42 MB
Load Address: 0x41000000
Entry Point: 0x41000000

{LikeAndRead}


Ок, тепер будемо розпаковувати рамдіск для перегляду і \ або модифікації. Знаходимо т.зв. magic (1f8b08) для gz в образі, до того ж лише перше входження.

barsuk @ droidtest: ~ / droid / installer $ grep-P-a-b-m 1 - only-matching '\ x1F \ x8B \ x08' ramdisk.img | cut-f 1-d:
64

Тепер маючи позицію початку gzip-а витягуємо його з образу (читати блоками по 64 байта, порпустів перший блок - bs = 64 skip = 1).

barsuk @ droidtest: ~ / droid / installer $ dd if = ramdisk.img bs = 64 skip = 1 of = ramdisk.cpio.gz
23211 +1 записів лічено
23211 +1 записів написано
скопійований 1485551 байт (1,5 MB), 0,0738819 c, 20,1 MB / c

{LikeAndRead}


Далі з отриманим файлом ramdisk.cpio.gz можна працювати як зі звичайним архівом, проте нам потрібно зберегти всі права доступу на файли витягнуті з цього архіву. Розпакувати можна наприклад так:

barsuk @ droidtest: ~ / droid / installer $ gzip-dc ramdisk.cpio.gz | cpio-id
6963 блоків

Тепер про запаковування рамдіска. Ми маємо розпакований рамдіск. Якщо ми внесли до нього потрібні нам правки, то його необхідно правильно зібрати. Для цього видалимо старий рамдіск і архів ramdisk.cpio.gz з цієї папки.

barsuk @ droidtest: ~ / droid / installer $ rm-f ramdisk.cpio.gz ramdisk.img

Далі створимо архів cpio.

{LikeAndRead}


barsuk @ droidtest: ~ / droid / installer $ find. / | cpio-H newc-o> .. / ramdisk.cpio
6963 блоків

І заархівіруем його в gzip.

barsuk @ droidtest: ~ / droid / installer $ cd ..
barsuk @ droidtest: ~ / droid $ gzip ramdisk.cpio

Тепер нам залишилося створити образ рамдіска в mkimage. Адреса завантаження і точку входу візьмемо з виведення mkimage-l, який ми робили на початку статті.

barsuk @ droidtest: ~ / droid $ mv ramdisk.cpio.gz ramdisk.img
barsuk @ droidtest: ~ / droid $ mkimage-T ramdisk-A 'ARM'-C none-n 'hRamdisk'-a 0x41000000-e 0x41000000-d ramdisk.img newramdisk.img
barsuk @ droidtest: ~ / droid $ mv newramdisk.img ramdisk.img

{LikeAndRead}


Тепер помістивши получений ramdisk.img в папку android на прошивочно карті або за допомогою burntool, ми зможемо прошити його в пристрій.

Автор: _barsuk_

{/LikeAndRead}