]> rtime.felk.cvut.cz Git - edu/osp-wiki.git/blobdiff - cviceni/2.mdwn
Minarik Jaroslav -- git test (nahradni termin)
[edu/osp-wiki.git] / cviceni / 2.mdwn
index cfdd7bc6a7fdc2e000feb723050962cb15984ff3..390bf20bcec25f0a5dfe58a3a25c64eab32fc682 100644 (file)
@@ -12,21 +12,21 @@ 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
+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,
+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
-s jádrem Linuxu tak dostáváme kompletní operační systém s poměrně
-malými nároky na paměť. Díky tomu se tato kombinace často používá ve
+utility jako ls, mkdir, …) zkompilovaná do jedné binárky. V kombinaci
+S jádrem Linuxu tak dostáváme kompletní operační systém s poměrně
+Malými nároky na paměť. Díky tomu se tato kombinace často používá ve
 vestavěných (embedded) aplikacích jako například
 [WiFi routery či ADSL modemy][owrt].
 
-V tomto cvičení si zkusíte vytvořit kompletní open source operační
-systém z Linuxového jádra a uživatelského prostředí tvořeného právě
+V tomto cvičení si zkusíte vytvořit kompletní open source operační
+Systém z Linuxového jádra a uživatelského prostředí tvořeného právě
 BusyBoxem. Dále si vyzkoušíte naprogramovat jednoduchý modul do jádra.
 
 [kenrel]: http://kernel.org/
@@ -44,7 +44,7 @@ Postup
 
     Protože se jedná o aktuální vývojový snapshot, je možné, že se
     při překladu, instalaci nebo používání vyskytne chyba. Naší výhodou
-    však je, že máme k dispozici kompletní historii projektu
+    však je, že máme k dispozici kompletní historii projektu
 
        gitk
 
@@ -58,7 +58,7 @@ Postup
 
        make menuconfig
 
-   Vystačíme s výchozí konfigurací, takže zvolte `Exit` a odpovězte
+   Vystačíme s výchozí konfigurací, takže zvolte `Exit` a odpovězte
    `Yes`, že chcete konfiguraci uložit.
    
 3. Kompilaci provedeme tradičně příkazem
@@ -74,22 +74,22 @@ Postup
     a všechno ostatní jsou pouze symbolické odkazy na tuto binárku.
     
     Protože neprovádíme tzv. *křížový překlad* (cross compilation),
-    který je běžný v případě vestavěných zařízení, můžeme výsledek
+    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`).
     
-    V případě skutečného vestavěného systému bychom museli pokračovat
+    V případě skutečného vestavěného systému bychom museli pokračovat
     dál a busybox otestovat až po nabootování na cílovém hardwaru.
 
 5. Pokud máte na svém počítači práva uživatele `root`, můžete
-   otestovat BusyBox v [chroot prostředí][chroot], 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:
 
        # chroot _install /bin/sh
 
    Fungovat to ale nebude, protože ke spuštění BusyBoxu jsou potřeba
-   knihovny, které v nejsou v adresáři `_install` dostupné.
+   knihovny, které v nejsou v adresáři `_install` dostupné.
    
 [chroot]:http://en.wikipedia.org/wiki/Chroot
 
@@ -113,25 +113,25 @@ Postup
        mkdir _install/lib
        cp /lib/i686/cmov/libm.so.6 /lib/i686/cmov/libc.so.6 /lib/ld-linux.so.2 _install/lib
 
-   Nezapomeňte, že v cílovém filesystému musí být i tzv. interpretr
-   (`ld-linux`), který je na **64-bitovém systému v adresáři
+   Nezapomeňte, že v cílovém filesystému musí být i tzv. interpretr
+   (`ld-linux`), který je na **64-bitovém systému v adresáři
    `/lib64`**.
 
-   Nyní už můžete spustit BusyBox v chroot prostředí.
+   Nyní už můžete spustit BusyBox v chroot prostředí.
 
 5. Nejjednodušší možnost jak nabootovat do právě vytvořeného
    uživatelského prostředí je uložit ho ve formátu pro Linuxový
-   startovací RAM-disk a nabootovat Linux s tímto RAM-diskem.
+   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ěkolik položek v adresáři `/dev` pro přístup k
-   virtuálním terminálům.
+   Aby vše fungovalo jak má, kromě souborů v adresáři `_install` musí
+   RAM-disk obsahovat i několik položek v adresáři `/dev` pro přístup
+   virtuálním terminálům.
 
    1. Pokud máte root práva, použijte ke tvorbě RAM-disku následující příkazy:
 
           mkdir _install/{dev,etc,proc,sys}
           sudo cp -a /dev/tty? _install/dev
-          ln -s bin/busybox _install/init
+          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ástroje
@@ -163,13 +163,13 @@ Postup
    stáhneme zdrojový kód, nakonfigurujeme a přeložíme. Vzhledem k
    rozsáhlosti jádra (zkompilované zabere na disku cca 1 GB a překlad
    trvá cca 20 minut) tyto kroky přeskočíme a použijeme již připravené
-   jádro z distribuce.
+   jádro z distribuce.
    
-   Pokud byste si chtěli přeložit vlastní jádro, v následujícím
-   příkazu byste za parametrem *-kernel* uvedli cestu k vámi
+   Pokud byste si chtěli přeložit vlastní jádro, v následujícím
+   příkazu byste za parametrem *-kernel* uvedli cestu k vámi
    zkompilovanému jádru.
 
-6. Bootování jádra s naším filesystémem (v emulátoru):
+6. Bootování jádra s naším filesystémem (v emulátoru):
 
    Na 64-bitovém systému spustíme emulátor následovně:
 
@@ -205,7 +205,7 @@ zjednodušit další práci.
 
        mount -t proc none /proc
 
-2. V RAM-disku můžete vytvořit soubor `/etc/init.d/rcS`, který bude
+2. V RAM-disku můžete vytvořit soubor `/etc/init.d/rcS`, který bude
    obsahovat příkazy, které budou spuštěny při bootu systému.
 
        mkdir -p _install/etc/init.d
@@ -218,18 +218,18 @@ zjednodušit další práci.
 
    Nyní musíte znovu vytvořit RAM-disk a nabootovat.
 
-3. Zachytávání zpráv jádra spuštěného v emulátoru QEMU do souboru
+3. Zachytávání zpráv jádra spuštěného v emulátoru QEMU do souboru
    je možné jejich přesměrování na virtuální sériový port.
    Požadavek na jeho vytvoření se předá QEMU zadáním parametru
 
        qemu -serial file:/tmp/virtual_guest.log ...
 
-   a jádro spustíme s parametrem `console=ttyS0`
+   a jádro spustíme s parametrem `console=ttyS0`
 
        qemu -serial file:/tmp/virtual_guest.log -append console=ttyS0 ...
 
-4. Pokud chcete z vašeho systému komunikovat po síti, připojte ho na
-   vnější síť s využitím NAT na uživatelské úrovni:
+4. Pokud chcete z vašeho systému komunikovat po síti, připojte ho na
+   vnější síť s využitím NAT na uživatelské úrovni:
 
        qemu -net nic,vlan=0,model=ne2k_pci -net user,vlan=0 ...
 
@@ -239,7 +239,7 @@ zjednodušit další práci.
 
        qemu -virtfs local,path=shared_dir_name,security_model=none,mount_tag=shared_tag ...
 
-   Adresářovou strukturu lze z vnitřního systému připojit následujícími
+   Adresářovou strukturu lze z vnitřního systému připojit následujícími
    příkazy
 
        modprobe virtio
@@ -251,7 +251,7 @@ zjednodušit další práci.
           mkdir -p /mnt/shareddir
           mount -t 9p -o trans=virtio shared_tag /mnt/shareddir
 
-Další tipy a triky v oblasti virtualizace používané a odzkoušené zprávci
+Další tipy a triky v oblasti virtualizace používané a odzkoušené zprávci
 sítě na naší katedře nalezente na [Wiki Technické Podpory (support)][support-qemu].
 [support-qemu]:http://support.dce.felk.cvut.cz/mediawiki/index.php/Kategorie:Virtualiza%C4%8Dn%C3%AD_stroje
 
@@ -285,7 +285,7 @@ Zdrojový kód jednoduchého jaderného modulu vypadá následovně:
     
     module_init(hello_init);
     module_exit(hello_exit);
-*Příklad převzat z [LDD3][LDD3].*
+*Příklad převzat z [LDD3][LDD3].*
 
 Překlad modulu provedeme pomocí jednoduchého souboru Makefile, který
 bude obsahovat jedinou řádku (zde předpokládáme, že výše uvedený
@@ -297,10 +297,10 @@ Nyní stačí zavolat `make` se správnými parametry:
 
     make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
 
-Tímto říkáme, že příkaz `make` načte `Makefile` z adresáře se
+Tímto říkáme, že příkaz `make` načte `Makefile` z adresáře se
 zdrojovými kódy aktuálně běžícího jádra (o který adresář se jedná
 můžete zjisti pomocí `readlink -f /lib/modules/$(uname -r)/build`),
-pomocí proměnné `M` řeknete, že se váš modul nachází v aktuálním
+pomocí proměnné `M` řeknete, že se váš modul nachází v aktuálním
 adresáři a slovo `modules` na konci znamená, že chcete, aby se
 zkompilovaly pouze moduly.
 
@@ -320,28 +320,28 @@ Předveďte činnost vašeho modulu ve vámi vytvořeném systému běžícím v
 emulátoru.
 
 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
-v [tomto článku][henson_drivers] (strany 2 a 3).
+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
+v [tomto článku][henson_drivers] (strany 2 a 3).
 
 Tipy a triky
 ============
 
-* Pro vyvolání určitého příkazu z historie můžete použít klávesu
+* Pro vyvolání určitého příkazu z historie můžete použít klávesu
   `Ctrl-R` následovanou textem hledaného příkazu. Např:
 
       <Ctrl-R>cpio<Enter>
 
-* Pro rychlé kopírování textu mezi programy (např. příkazy z této stránky do shellu),
+* Pro rychlé kopírování textu mezi programy (např. příkazy z této stránky do shellu),
   můžete použít prostřední tlačítko myši. Funguje to tak, že text označíte myší
-  (nemačkáte při tom Ctrl-C) a stiskem prostředního tlačítka myši v terminálovém
+  (nemačkáte při tom Ctrl-C) a stiskem prostředního tlačítka myši v terminálovém
   okně ho vložíte na příkazovou řádku shellu. Tím, že při tom nemusíte šahat na
   klávesnici vám to půjde rychleji.
 
 * Pokud je Qemu spouštěný přes vzdálené připojení (např. server postel),
   je potřeba pro zobrazení emulované obrazovky spouštěného stroje
   buď provést protunelování X protokolu (`ssh -X`) nebo používat Qemu
-  s emulací obrazovky v textovém režimu `qemu -curses`. Další možnost
+  s emulací obrazovky v textovém režimu `qemu -curses`. Další možnost
   je emulovat HW bez grafické karty `qemu -nographic` a nastavit testovaný
   systém tak, aby systémová konzole směřovala na sériový port
   (`-append console=ttyS0`).
@@ -359,7 +359,12 @@ Reference
 * [/dev/hello_world: A Simple Introduction to Device Drivers under Linux](henson_drivers)
 * [Rostislav Lisový: Diplomová práce - Rozšíření QEMU o podporu PCI I/O karty a tvorba ovladačů](http://rtime.felk.cvut.cz/hw/index.php/Humusoft_MF6xx)
 * [Filip Navara: Diplomová práce - Rozšíření QEMU o podporu mikrokontroléru AT91SAM7X256](http://rtime.felk.cvut.cz/hw/index.php/AT91SAM7X256)
-* [Aleš Kapica a další: Stránky o virtualizaci z oddělení IT K13135](https://support.dce.felk.cvut.cz/mediawiki/index.php/Kategorie:QEMU)
+* [Aleš Kapica a další: Stránky o virtualizaci z oddělení IT K13135](https://support.dce.felk.cvut.cz/mediawiki/index.php/Kategorie:QEMU)
   
 [LDD3]:http://lwn.net/Kernel/LDD3/
 [henson_drivers]:http://linuxdevcenter.com/pub/a/linux/2007/07/05/devhelloworld-a-simple-introduction-to-device-drivers-under-linux.html
+
+<!-- TODO pro pristi rok: At si najdou kde stahnout busybox sami.
+Zakladni uloha jen za 3 body, za dalsi dva body uloha bez navodu: dame
+jim binarku, ktera bude chctit sdilenou knihovnu a tu budou muset
+napsat. -->