Hacking Android III


Dalším krokem je vytvoření "virtualního harddisku", na který budu postupně přesouvat jednotlivé Androidí komponenty. Jedná se o soubor, ve kterém jsou "čtyři partišny" naformátované souborovým systémem ext3. V tomto kroku využívám virtuálního stroje v podobě v qemu běžícího Damn Small Linuxu, který jako disk využívá právě onen "virtuální disk". Ale popořádku.

Nejprve vytvořím prázdný soubor o velikosti cca 5*128MB, konkrétní rozpis bude následovat.

 1. $ dd if=/dev/zero of=disk ibs=1024 count=655360

 Potom s tímto diskem nabootuju DSL pomocí qemu

 2. $ qemu -hda disk -cdrom dsl.iso -boot d

V tomto virtuálním stroji potom fdiskem rozdělím tento disk, abych měl na první oblasti sloužící jako root bylo 128M, na druhé, která bude sloužit jako swap/cache bylo taky 128M, na třetí se bude nacházet samotný systém a mělo by postačovat 256M a zbytek bude pro uložení uživatelských dat.

Teď je nutné oblasti naformátova a přidat jurnal (taky uvnitř DSL)

3. $ mkfs.ext2 /dev/hda{1 | 2 | 3 | 4}

4. $ tune2fs -C 1 -L {root | cache | system | user} -j /dev/hda{1 | 2 | 3 | 4}

Dalším krokem je instalace boot loaderu – GRUBu. Na této jednoduchosti jsem zůstal docela dlouho "viset", protože jsem neprováděl dostatečně "RTFM" :-D. Aneb jednoduše řečeno, používal jsem grub-install nacházející se v DSL, ovšem jedná se o verzi 0.91, takže jsem pokaždé končil s hláškou "No setup signature found…". Až jsem si opravdu přečetl jediný thread, bylo jasno a do boot/grub putovaly soubory z verze 0.97. A najednou, všechno v pořádku! Ale pěkně popořadě: první oblast, označenou jako root, využiju i pro umístění adresáře se soubory potřebnými pro zavedení systému – boot. Pro zjednodušení použiju grub-install (musí se jednat o onu verzi 0.97 a vyšší, pokud je použito distribuční jádro dodávané s Androidem – 2.6.27) uvnitř DSL, hda1 je připojeno na /mnt/hda1.

5. $ grub-install –root-directory=/mnt/hda1 –recheck /dev/hda

Teď je potřeba upravit menu.lst a nahrát soubory s jádrem a ramdisk. Obsah mého souboru menu.lst je na následujícím výpisu.

default 0
timeout 10
title Android
root (hd0,0)
kernel /boot/kernel
initrd /boot/ramdisk.img

 Tyto soubory však mám zatím pouze uvnitř mého installer.img, případně v adresáři mydroid/out/target/product/eee_701. Pro jejich přenesení používám namountování mého virtuálního disku pomocí offsetu. Nejprve musím zjistit, kde jednotlivé oddíly začínají. K tomu použiju fdisk uvnitř DSL:

Image Hosted by ImageShack.us

 Offset vypočítám, když vynásobím počáteční sektor 512. Offset prvního oddílu je tedy 63*512=32.256. Tento oddíl teď můžu připojitjako loopback zařízení a zkopírovat do adresáře boot soubory  kernel a ramdisk.

6. $ mount -t ext3 -oloop,offset=32256 disk /mnt/hda1
7. $ cp  ~/mydroid/out/target/product/eee_701/kernel /mnt/hda1/boot
8. $ cp ~/mydroid/out/target/product/eee_701/ramdisk.img /mnt/hda1/boot

Teď je možné disk odpojit a nabootovat jádro pomocí qemu. Nedostaneme ovšem shell, protože tu zatím nejsou nahrané žádné soubory.

9. $ umount /mnt/hda1
10. $ flush
11.  $ qemu -hda disk

Image Hosted by ImageShack.us

 

 


Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *