Cíl cvičení
===========
-Open source projekty se často nepoužívají osamoceně, ale v kombinaci s
-jinými OSS projekty, čímž vznikají tak tzv. OSS stacky. Asi
-nejznámějším stackem je LAMP – Linux, Apache, MySQL, PHP. Na dnešním
-cvičení se seznámíme s dalším, velmi často používaným, stackem
-[Linux][kenrel] + [BusyBox][bb] (+[Dropbear][dropbear] SSH server).
+Cílem tohoto cvičení je prakticky si procvičit informace probírané na
+2. přednášce a motivovat vás ke 4. přednášce "*Linuxové jádro - vznik,
+vývoj, skladba a ovladače; GNU libc a uživatelský prostor*". Pokud vám
+nejsou jasné některé souvislosti, doporučujeme zkusit si informace
+vygooglovat a připravit si otázky na 4. přednášku.
+
+Open source software (OSS) projekty se často nepoužívají osamoceně,
+ale v kombinaci s jinými OSS projekty, čímž vznikají tak tzv. OSS
+stacky. Asi nejznámějším stackem je LAMP – Linux, Apache, MySQL, PHP.
+Na dnešním cvičení se seznámíme s dalším, velmi často používaným,
+stackem [Linux][kenrel] + [BusyBox][bb] (+[Dropbear][dropbear] SSH
+server).
[BusyBox][bb] je sada UNIXových uživatelských nástrojů (shell, editor,
utility jako ls, mkdir, …) zkompilovaná do jedné binárky. V kombinaci
tam nachází pouze jedna binárka `bin/busybox` a všechno ostatní
jsou pouze symbolické odkazy na tuto binárku.
- Protože neprovádíme tzv. *křížový překlad*, který je běžný pro v
+ Protože neprovádíme tzv. *křížový překlad*, který je běžný v
případě vestavěných zařízení, můžeme výsledek hned otestovat
například spuštěním shellu: `./_install/bin/sh` (ukončíme ho např.
příkazem `exit`).
dál a busybox otestovat až po nabootování na cílovém hardwaru.
5. Pokud máte na vašem počítači práva superuživatele root, můžete
- otestovat BusyBox v chroot prostředí, t.j. se stejným jádrem jako
+ otestovat BusyBox v [chroot prostředí][chroot], t.j. se stejným jádrem jako
právě běží na vašem počítači, ale se souborovým systémem tvořeným
pouze BusyBoxem:
Fungovat to ale nebude, protože ke spuštění BusyBoxu jsou potřeba
knihovny, které v nejsou v adresáři `_install` dostupné.
+
+[chroot]:http://en.wikipedia.org/wiki/Chroot
6. Chybějící knihovny zjistíte příkazem
ldd _install/bin/busybox
- Tyto knihovny musíte nakopírovat do adresáře `_install`
+ Tyto knihovny musíte nakopírovat do adresáře `_install`. Na
+ 32-bitovém systému to může vypadat například takto:
mkdir _install/lib
cp /lib/i686/cmov/libm.so.6 /lib/i686/cmov/libc.so.6 /lib/ld-linux.so.2 _install/lib
Na 64-bitovém systému jádro hledá pro dynamicky linkované programy
"interpreter" `/lib64/ld-linux-x86-64.so.2` v adresáři `/lib64`.
- Vytvoříme ho jako symbolickou linku na adresář `/lib`
+ Vytvoříme ho jako symbolický odkaz na adresář `/lib`
( cd _install && ln -s lib lib64 )
startovací RAM-disk a nabootovat Linux s tímto RAM-diskem.
Aby vše fungovalo jak má, kromě souborů v adresáři `_install` musí
- RAM-disk obsahovat i někoik položek v adresáři `/dev` pro přístup k
+ RAM-disk obsahovat i několik položek v adresáři `/dev` pro přístup k
virtuálním terminálům.
1. Pokud máte root práva, použijte ke tvorbě RAM-disku následující příkazy:
ln -s bin/busybox _install/init
(cd _install; find . | cpio -o -H newc | gzip) > ramdisk
- 2. Bez rootovských práv můžete RAM-disk vytvořit pomocí nástoje
+ 2. Bez rootovských práv můžete RAM-disk vytvořit pomocí nástroje
[gen_init_cpio][gic].
(
6. Bootování jádra s naším filesystémem (v emulátoru):
+ Na 32-bitovém systému spustíme emulátor následovně:
+
qemu -kernel /boot/vmlinuz-2.6.26-2-686 -initrd ramdisk
+ Na 64-bitovém systému může být potřeba použít příslušnou variantu QEMU:
+
+ qemu-system-x86_64 -kernel /boot/vmlinuz-2.6.32-5-amd64 -initrd ramdisk
+
Pokud systém nabízí hardwarovou podporu virtualizace, je výhodné
- použít KVM, které pak běží rychleji
+ použít [KVM][kvm]. Výsledek pak běží rychleji. Například:
kvm -kernel /boot/vmlinuz-2.6.32-5-amd64 -initrd ramdisk
- Na 64-bitovém systému může být potřeba použít příslušnou variantu QEMU
-
- qemu-system-x86_64 -kernel /boot/vmlinuz-2.6.32-5-amd64 -initrd ramdisk
+[kvm]:http://www.linux-kvm.org/
7. Pokud vše proběhlo správně, zobrazila se hláška
==============
Jaderné moduly jsou přeložené kusy kódu, které lze za běhu nahrávat do
-Linuxvého jádra. Pokud bychom chtěli nalézt analogickou věc v
+Linuxového jádra. Pokud bychom chtěli nalézt analogickou věc v
uživatelském prostředí, pak by to byly *sdílené knihovny*. Jaderný
modul může obsahovat kód ovladače zařízení, podporu určitého
souborového systému, může přidávat do jádra nové funkce (např.
======
Vytvořte jednoduchý jaderný modul, který po zavedení do jádra vypíše
-vaše jméno (objeví se ve výstupu `dmesg`). Jinak nemusí dělat nic.
+vaše jméno (objeví se ve výstupu příkazu `dmesg`). Jinak nemusí dělat nic.
Předveďte činnost vašeho modulu ve vámi vytvořeném systému běžícím v
emulátoru.
-**Pozor:** V zadání je drobný chyták!
-
Kdo se bude nudit, může zkusit rozšířit modul tak, aby se jeho jméno
objevilo v souboru `/proc/myname` nebo vytvořit jednoduchý ovladač,
který bude vracet vaše jméno při čtení z `/dev/myname`. Návod najdete