PB173 - Ovladače jádra - Linux I. GIT a jádro Jiri Slabý Fakulta informatiky Masarykova univerzita 20. 9. 2016 Jiri Slabý (Fakulta informatiky, MU) PB173/04 20. 9. 2016 1 122 Obsah cvičení Q Úvodní informace O GIT Q Jádro • Paměť Jiri Slabý (Fakulta informatiky, MU) PB173/04 20.9.2016 2/22 Sekce 1 Úvodní informace Jiri Slabý (Fakulta informatiky, MU) PB173/04 20. 9. 2016 3/22 Úvodní informace • Semestr = 13 týdnů • Cvičící • Vývoj jádra od r. 2005 (NetBSD, Linux) Absolvent Fl • Cíle cvičení • Nastínit trochu jiný model programování • Prohloubit znalosti vnitřností OS a HW • Ukončení: k • Splnění všech domácích úkolů a projektu • 10 bodů na úkol, alespoň | z celkového počtu Vše potřebné ve studijních materiálech v isu Jiri Slabý (Fakulta informatiky, MU) PB173/04 20.9.2016 4/22 Bodování úkolů 10 bodů za každý příklad • -3 body za každý týden prodlení (termín je vždy do dalšího cvičení) • -3 body za bezpečnostní díru (ve slajdech označené POZOR) • -2 body za nesplnění jedné části zadání • -1 bod za kód neodpovídající stylu • -1 bod za ostatní drobnosti Jiri Slabý (Fakulta informatiky MU) PB173/04 20. 9. 2016 5/22 S čím budeme pracovat? Hardware • Stroje satyr01-10 • CentOS6.x • Login/heslo: vy voj/vy voj • Nemají viditelnou IP • Virtualizované stroje • openSUSE Leap • Login/heslo: vyvoj/vyvoj nebo root/toor Jiri Slabý (Fakulta informatiky MU) PB173/04 20.9.2016 6/22 S čím budeme pracovat? Software • GIT • Úvod do GITu dnes • Podrobněji: http://book.git-scm.com/ • Zdroje jádra • Použijeme předinstalované z RPM (/usr/src/kerneis/) • http://git.kernel.org/ (od 2.6.12) • full-history-linux GIT (od 0.01 do 2.6.26) QEMU HW k práci s PCI, l/O, na přerušení, DMA... Jiri Slabý (Fakulta informatiky MU) PB173/04 20. 9. 2016 7/22 Sekce 2 GIT Jiri Slabý (Fakulta informatiky, MU) PB173/04 20.9.2016 8/22 Úkol GIT a repozitář PB173 O Stáhněte si repozitář na aisu (doporučeno, můžete vynechat) • git cloně --bare git://github. com/j irislaby/pbl73 O Vytvořte si lokální klon • git cloně xlogin@aisa:pbl73 O Prozkoumejte strukturu • Příklady ze cvičení • Adresář pro domácí úkoly Jiri Slabý (Fakulta informatiky, MU) PB173/04 20. 9. 2016 9/22 Úkol GIT a úpravy souborů O Změňte cokoliv V SOUboru sandbox/hello Q Zkontrolujte změny (git dif f --color) O Uložte do lokálního repozitáře (git commit -a) • Git může chtít nastavit jméno a e-mail (instrukce jsou na stdout) • Formát logu (vzor: git.kernel. org) Shrnutí na řádek Odůvodnění (delší popis) Podpisy a CC O Smažte sandbox/hello (git rm) O git commit -a Jiri Slabý (Fakulta informatiky, MU) PB173/04 20.9.2016 10/22 GIT a commity • Každý commit je pojmenován SHA hashem • Např. d3323cl503d54d83b0eae6c7927dede2d2973059, lze i zkráceně d3323cl503 head (@) je alias pro horní/poslední commit • Lze odkazovat předchůdce pomocí ~ • Např. HEAD---, HEAD~1, d3323cl503~5 • Lze vytvořit jmenný alias, tzv. tag • Více: man gitrevisions Jiri Slabý (Fakulta informatiky MU) PB173/04 20. 9. 2016 11/22 Úkol GIT a commity O Zkontrolujte log, zda obsahuje 2 změny (git log --color) Q Podívejte se na poslední 2 změny (git show --color head, resp. head~i) Q Vygenerujte záplaty ze 2 posledních commitů (git format-patch -2) O Proveďte push (git push, jen pokud máte klon na aise) Odevzdávání domácích úkolů odesláním záplaty na e-mail. Posílejte jen plain-text přílohy! Jiri Slabý (Fakulta informatiky MU) PB173/04 20.9.2016 12/22 Záplatování Záplaty v linuxovém jádře O Poslat odpovídajícímu správci • scripts/get_maintainer.pl • git send-email O Poslat na ML „pull request" a vystavit celý GIT strom • git push • git request-pull • Zevrubný popis V Documentation/SubmittingPatches Jiri Slabý (Fakulta informatiky MU) PB173/04 20.9.2016 13/22 Sekce 3 Jádro Jiri Slabý (Fakulta informatiky, MU) PB173/04 20.9.2016 14/22 Jádro vs. programy Hlavní rozdíly • Žádné knihovny • Zejména HbC (printf, strlen, malloc, ...) • Ale ani ostatní (např. m, pthread, ssi, z) • Ne/oddělený paměťový prostor o Chybový kód může přepisovat cokoliv (i FW) • Počáteční funkce (main) • module_init (=main), module_exit (=on_exit) • Pád jádra => pád všeho Jiri Slabý (Fakulta informatiky MU) PB 173/04 20.9.2016 15/22 Kód • Výhradně GNU C (x86 už jen GCC > 4.x) • Pevně daný CodingStyle • Kontrola: scripts/checkpatch.pi (není 100 • Vše slinkováno do jednoho celku • vmlinux —>• (b)zlmage Ale moduly (standardní ELF: *.ko) Jiri Slabý (Fakulta informatiky, MU) PB173/04 20.9.2016 16/22 Úkol Průzkum modulu (.ko objektu) O Zvolte si jeden modul v systému (ismod) © Zavolejte na něm modinf o O Proveďte objdump -d sekce .modinf o O Porovnejte oba výstupy Jiri Slabý (Fakulta informatiky MU) PB173/04 20.9.2016 17/22 Dokumentace o Linux Device Drivers, 3. edice • Ke Stažení: https: //lwn. net/Kernel/LDD3/ 9 Documentation/* • Generovaná tamtéž (podobná DocBook) • Kód • Hledání: http://lxr.free-electrons.com/ident Demo: pomocí Ixr najděte v jádře obecnou (v lib/) a optimalizovanou pro x86_32 (v arch/x86/lib/) implementaci strlen Jiri Slabý (Fakulta informatiky MU) PB173/04 20.9.2016 18/22 Úkol Hello World O Spusťte virtuální stroj • qemu-start Z repozitáře Parametrem je cesta k obrazu O Prozkoumejte adresář Ol z pb173 git repozitáře • Makefile, pbl73.c O Do init funkce doplňte výpis „Hello World" • pr_info("...\n"); • Objeví se v /proc/kmsg a na konzoli O Přeložte a vložte do systému • make, insmod O Zkontrolujte výstup dmesg 0 Můžete udělat commit a push do svého repozitáře Jiri Slabý (Fakulta informatiky, MU) PB173/04 20.9.2016 19/22 Paměť 9 POZOR: omezený zásobník (4-8 K) • Žádná nebo malá rekurze « Jen pro malá data (int, malé struct, krátká pole, . • Pracuje se se stránkami (na x86 4 K-1 G) • Omezená velikost alokace (fragmentace) • Podrobnosti v dalších cvičeních Jiri Slabý (Fakulta informatiky, MU) PB173/04 20.9.2016 20/22 Jednoduché alokace Malé alokace (sta bajtů, maximálně až cca. 4 M) • Horní mez závislá na architektuře • kmalloc, kfree (linux/slab.h) Alokace mají (většinou) GFP parametr. Ten určuje, co si alokátor může dovolit (spát, swapovat, použít HIGHMEM, ...). Prozatím nám stačí GFP_kernel. ' Příklad void *mem = kmalloc(100, GFP_KERNEL); - if (mem) { } kfree (mem); Jiri Slabý (Fakulta informatiky MU) PB173/04 20. 9. 2016 21 /22 Úkol O V exit funkci naalokujte 1000 bytů (kmailoc) O Udělejte do nich střepy „Bye" O Vypište paměť jako řetězec (printk a °/.s) O Uvolněte paměť O Vložte a odeberte modul ze systému (insmod a rmmod) O dmesg O Můžete provést commit a push Jiri Slabý (Fakulta informatiky MU) PB173/04 20.9.2016 22/22