Posts tagged linux
Hacking Android III
0Další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:

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

Hacking Android II
0Uvízl jsem na mrtvém bodě a nemožnosti vytvořit ramdisk, stejně tak mi nejde do hlavy jakási nekompatibilita mezi jednotlivými verzemi gzipu. Aneb zřejmě nebootuju, alespoň ne způsobem, který by měl fungovat.
Ztroskotal jsem na snaze vytvořit vlastní initrd z ramdisku vytvořeného automaticky při sestavování Androida. Vytvořený ramdisk.img je archiv vytvořený pomocí cpio, tak jsem si řekl, že nejjednodušší bude jej rozbalit, poupravit a znovu zabalit. Logické, jednoduché…
1. $ mkdir ramdisk && cd ramdisk
2. $ zcat ../ramdisk.img | cpio -i
teď mám rozbalenou adresářovou strukturu, neudělám žádný zásah a zabalím zpět
3. $ find . -print | cpio -o > ../ramdisk2.img
4. $ cd .. && gzip ramdisk2.img && mv ramdisk2.img.gz ramdisk2.img
…ale bohužel nefunkční pro bootování, soubory nejsou totožné.

Už hlavička (resp. začátek) je okem rozeznatelný – původní ramdisk začíná čísly, ve druhém vytvořeném ramdisku je znatelná struktura filesystému. OK, projdu si make soubory a zjistím, jak je to baleno. Ještě před tím jsem ale vyzkoušel, soubor ramdisku gzipem rozbalit a znovu zabalit. OUHA – rozdílné! Pokud ovšem rozbalím obsah a hned jej skrze rouru zase zabalím, tak jsou totožné, viz následující výpis:
$ zcat ramdisk.img > ramdisk
$ gzip ramdisk
$ ls -la ramdisk* && diff ramdisk.img ramdisk.gz
$ zcat ramdisk.img | gzip > ramdisk2.img
v tomto případě jsou už stejné
Tímto způsobem vytvořený (rozbalený a znovu zabalený pouze gzip archiv) ramdisk jde bez problémů použít pro nabootování (narozdíl od rozbaleného kompletního archivu pomocí cpio).
$ qemu -kernel kernel -initrd ramdisk2.img -hda /dev/zero
SOLVED – problém je v parametrech!
Stačilo si přečíst dokumentaci k jádru ( kernel/Documentation/initrd.txt) a upravit parametry. Takže už se nedivím onomu pověstnému RTFM!
rozbalení:
$ gzip -cd ../ramdisk.img | cpio -imd
zabalení:
$ find . | cpio -H newc -o | gzip -9 -n > ../ramdisk2.img
Nepoužitá možnost tvorby initrd
Resp. použitá, ale taky nefungovala, takže jsem vděčný za informaci o těch parametrech. Každopádně následující informace by se mohly v budoucnu taky hodit, proto si je sem poznamenám. Jedná se o vytvoření prázdného souboru, vytvoření filesystému v něm a jeho připojení pomocí loopback zařízení. Tento postup je detailně popsán v návodu na tvorbu LiveCD distribuce Gentoo.
$ touch initrd
$ dd if=/dev/zero of=initrd bs=1024k count=8
$ losetup /dev/loop0 initrd
$ mke2fs /dev/loop0
$ mkdir /media/initrd
$ mount /dev/loop0 /media/initrd
Pak vytvořit adresářovou strukturu
$ cd /media/initrd
$ mkdir etc dev lib bin proc new cdrom
A některá základní zařízení
$ cd dev
$ mknod console c 5 1
$ mknod null c 1 3
$ mknod hda b 3 0
$ mknod hdb b 3 64
$ mknod tty c 4 0
$ mknod loop0 b 7 0
V dalším kroku je nutné vytvořit init skript a nahrát základní systémové nástroje, případně využít BusyBox.
Hacking Android I
3Tak jsem si slibil, že si zkusím pohrát s Androidem a ideálně jej dostanu do ps3. To samozřejmě až v nějaké další části, nejprve se zkouším dostat do obrazu a rozjet jej alespoň na x86 platformu. Nějaký částečný success už jsem utrpěl, ovšem jsou tu i "drobnosti", které mi zatím dělají problémy. Každopádně to zkusím postupem času shrnovat v blogpostech.
Vyšel jsem z verze pro Asus eee, protože si myslím, že přece jenom x86 je x86 a poupravit existující konfiguraci jádra, na kterém Android bez problémů běhá, bude jednodušší, než tvořit config na zelené louce. Takže jsem si vytvořil ve VirtualBoxu novou mašinu a nainstaloval Kubuntu (2.6.24-22-generic). Androuš má krásně popsaný postup, jak stáhnout zdroje z repozitáře pomocí GITu.Protože se netahá "master" větev, je nutné spustit inicializace repozitáře s parametrem a ručně vytvořit lokální manifest.
1. $ mkdir ~/mydroid
2. $ cd mydroid
3. $ repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake
4. $ repo sync
cat > ./.repo/local_manifest.xml << _EOF
<manifest>
<project name="platform/vendor/asus/eee_701" path="vendor/asus/eee_701"/>
</manifest>
_EOF
5. $ repo sync
V tomto okamžiku by měly být staženy kompletí zdrojové kódy (resp. ty jsou staženy už krokem čtyři, krok pět stáhne patch pro eee verzi) , v mém případě s jádrem 2.6.27 (podadresář kernel) a moduly, init skripty a konfigurací jádra pro Asus eee (podadresář vendor/asus/eee_701). Pak je možné už jednoduše kompilovat pomocí make, po specifikaci parametrů pomocí proměnných.
6. $ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701 DISABLE_DEXPREOPT=true make
7. $ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701 DISABLE_DEXPREOPT=true make bootimage userdataimage
8. $ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701 DISABLE_DEXPREOPT=true make installer_img
Buildovací proces vygeneruje jednotlivé "images" v podadresáři out/target/product/eee_701, installer_img potom vygeneruje installer.img, kde jsou zabaleny všechny tyto obrazy a je možné jej nabootovat (např. pomocí qemu), ovšem nabootuje pouze z boot partition (boot.img) a nepřipojí kořenový systém, takže naběhne pouze sh, který ovšem vůbec nic neumí.
9. $ qemu -hda installer.img


Teď se snažím o vytvoření obrazu, který mi kompletně nabootuje Androuše, ale o tom příště!
A tentokrát Ubuntu Hate
0Nedávno jsem chválil Kubuntu, jak pěkně funguje, ale teď je myslím čas, abych moji výpověď změnil, respektive vylil ze sebe vztek, když tohle distro ze mě dělá pořád jen debila!

Ano, mám je na všech svých strojích (1 desktop a 2 notebooky) ve všemožných verzích a funguje k mé plné spokojenosti a radosti naprosto bez problémů. Ovšem, když už někoho ukecám, že mu na počítač nainstaluju tučňáka, tak vystřízlivění přijde poměrně rychle. Nabootuju live-cd, vše běží v pořádku – připojím se k webu, zvuk funguje… Provedu instalaci, nabootuju do nového prostředí, vše je funkční. Ovšem jakmile od počítače odejdu, nebo spíš jakmile dokončím veškeré aktualizace, všechno se podivným způsobem rozesere a já jsem za debila, protože to nedokážu opravit – veškerá nastavení jsou v pořádku, dotyční démoni běží, ale to co má fungovat prostě nefunguje bez zjevného důvodu, něco jako ve windows.
Prostě a jednoduše linux ano, doma a u sebe, ale už jej v životě nebudu nikomu nikde instalovat a doporučovat, nebo ať si to nainstalijí sami, Linux sux!
Linux na SX1
0Pořád jsem se chystal rozjet na mé SX1 linuxové jádro s portlou Qtopií a až teď jsem konečně našel trochu času, abych se do toho pustil.

Už dlouho jsem byl namlsanej diskuzí na symbianfóru, množstvím videí a obrázků, ale pořád se mi nechtěla čistit paměťovka. Nedávno mi ovšem telefon zkolaboval a byl jsem nucenej flashovat, tak jsem při té příležitosti nainstalil Linucha. Velmi příjemné je, že "instalace" je poměrně jednoduchá a ještě příjemnější je fakt, že je možné tento systém provozovat vedle Symbianu, takže jsem měl telefon s duálním bootem!
Prostředí vypadá pěkně, to nepopírám, ovšem boot je docela dlouhý, je to takové těžkopádné, nefungují některé věci a stále je portnuto žalostně málo aplikací. Tak zase tučňák šupal z telefonu pryč, ale zkušenost rozhodně zajímavá, navíc jsem si mohl udělat do seznamu čárku k "provozoval jsem tučňáka na svém telefonu", hned se cítím more nerdy.
Btw. jsou postupně portována i další grafická prostředí.