From: Michal Sojka Date: Sun, 23 Feb 2014 00:19:24 +0000 (+0100) Subject: Uprava 2. cviceni inspirovana lonskou diskuzi X-Git-Url: http://rtime.felk.cvut.cz/gitweb/edu/osp-wiki.git/commitdiff_plain/f3b08cce072f874808b70e534e52fd50620a36c3 Uprava 2. cviceni inspirovana lonskou diskuzi --- diff --git a/cviceni/2.mdwn b/cviceni/2.mdwn index 5c607790..05415b9e 100644 --- a/cviceni/2.mdwn +++ b/cviceni/2.mdwn @@ -36,9 +36,10 @@ BusyBoxem. Dále si vyzkoušíte naprogramovat jednoduchý modul do jádra. Postup ====== -1. Stáhneme [zdrojové kódy][bbgit] projektu [BusyBox][]: +1. Stáhněte si zdrojové kódy z git repozitáře projektu [BusyBox][] + (adresu repozitáře si najděte sami). - git clone git://busybox.net/busybox.git --reference /usr/src/busybox.git + git clone ... cd busybox Protože se jedná o aktuální vývojový snapshot, je možné, že se @@ -49,9 +50,7 @@ Postup a můžeme si vybrat verzi, kde se chyba nevyskytuje. Například - git checkout -f 1_20_2 - -[bbgit]:http://git.busybox.net/busybox/ + git checkout -f 1_22_0 2. Zkonfigurujeme jak chceme BusyBox přeložit. @@ -126,7 +125,8 @@ Postup 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: + 1. Pokud máte *rootovská* 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 @@ -172,7 +172,7 @@ Postup Na 64-bitovém systému spustíme emulátor následovně: - qemu-system-x86_64 -kernel /boot/vmlinuz-2.6.32-5-amd64 -initrd ramdisk + qemu-system-x86_64 -kernel /boot/vmlinuz-3.2.0-4-amd64 -initrd ramdisk Na 32-bitovém systému většinou stačí zkrácený název `qemu`: @@ -181,7 +181,7 @@ Postup Pokud systém nabízí hardwarovou podporu virtualizace, je výhodné použít [KVM][kvm]. Výsledek pak běží rychleji. Například: - kvm -kernel /boot/vmlinuz-2.6.32-5-amd64 -initrd ramdisk + kvm -kernel /boot/vmlinuz-3.2.0-4-amd64 -initrd ramdisk [kvm]:http://www.linux-kvm.org/ @@ -195,12 +195,12 @@ Postup Možná vylepšení =============== -Dále můžete provést drobná vylepšení vašeho systému, která vám mohou -zjednodušit další práci. +Dále můžete provést drobná (či větší) vylepšení svého nového systému, +která vám mohou zjednodušit další práci. 1. Můžete připojit souborový systém `/proc`, aby fungovaly příkazy - jako např. `ps` (výpis běžících procesů). Příkaz spusťte v - emulátoru, ne na vaší pracovní stanici. + jako např. `ps` (výpis běžících procesů). Příkaz spusťte + v emulátoru, ne na vaší pracovní stanici. mount -t proc none /proc @@ -217,18 +217,19 @@ 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 - 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 +3. Zachytávání zpráv jádra spuštěného v emulátoru QEMU do souboru. + Zprávy jádra je možné přesměrovat na virtuální sériový port a + odtamtud pak například na standardní výstup: - qemu -serial file:/tmp/virtual_guest.log ... + qemu -serial stdio ... - a jádro spustíme s parametrem `console=ttyS0` + a jádru předáme parametr `console=ttyS0` - qemu -serial file:/tmp/virtual_guest.log -append console=ttyS0 ... + qemu -serial stdio -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: + vnější síť pomocí NAT na uživatelské úrovni: qemu -net nic,vlan=0,model=ne2k_pci -net user,vlan=0 ... @@ -313,15 +314,27 @@ modul, který můžete zavést do jádra příkazem Zadání ====== -Vytvořte jednoduchý jaderný modul, který po zavedení do jádra vypíše -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. +1. Stáhněte si [[tento program|magic]] ([[32-bitová verze|magic32]]) a + zprovozněte ho ve vámi vytvořeném systému. Zprovoznění znamená, že + po spuštění program nevypíše žádnou chybu. Nezapomeňte nastavit + práva pro spouštění příkazem `chmod +x`. + + Ke zjištění případným problémů by se vám mohl hodit příkaz + `strace`, který vypisuje všechna systémová volání vyvolaná daným + programem. Například zkuste porovnat výstup následujících příkazů: -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). + echo Ahoj + strace echo Ahoj + +2. Vytvořte jednoduchý jaderný modul, který po zavedení do jádra vypíše + 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. + + 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). Tipy a triky ============ @@ -363,7 +376,7 @@ Reference [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 - diff --git a/cviceni/2/magic b/cviceni/2/magic new file mode 100755 index 00000000..89b69980 Binary files /dev/null and b/cviceni/2/magic differ diff --git a/cviceni/2/magic32 b/cviceni/2/magic32 new file mode 100755 index 00000000..3038690f Binary files /dev/null and b/cviceni/2/magic32 differ