PB173 - Ovladače jádra - Linux I. GIT a jádro Jiri Slabý Fakulta informatiky Masarykova univerzita 16. 9. 2014 Jiri Slabý (Fakulta informatiky, MU) PB173/02 16.9.2014 1/22 Obsah cvičení Q Úvodní informace 0 GIT Q Jádro • Paměť Jiri Slabý (Fakulta informatiky, MU) PB173/02 16. 9. 2014 2122 Sekce 1 Úvodní informace Jiri Slabý (Fakulta informatiky, MU) PB173/02 16.9.2014 3/22 Úvodní informace • Semestr = 13 týdnů (14. 10. konference) • 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ů 9 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/02 16.9.2014 4/22 Bodování úkolů Na začátku: 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í) • -2 body za každé vrácení v případě nějaké nefunkčnosti « -2 body za bezpečnostní díru (ve slidech značené POZOR) • -1 bod za kód neodpovídající stylu • -1 bod za ostatní drobnosti Jiri Slabý (Fakulta informatiky, MU) PB173/02 16.9.2014 5/22 S čím budeme pracovat? HW * Stroje satyr01-10 • CentOS 6.x • Login/heslo: vyvoj/vyvoj • Nemají viditelnou IP Jiri Slabý (Fakulta informatiky, MU) PB173/02 16. 9. 2014 6 / 22 S čím budeme pracovat? sw a 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/02 16.9.2014 7/22 Sekce 2 GIT Jiri Slabý (Fakulta informatiky, MU) PB173/02 16.9.2014 8/22 Úkol GIT a repozitář PB173 O Stáhněte si repozitář na aisu (doporučeno, můžete vynechat) • git cloně git://github. com/j irislaby/pbl73 O Vytvořte si lokální klon • git cloně aisa:pbl73 Q Prozkoumejte strukturu • Příklady ze cvičení • Adresář pro domácí úkoly Jiri Slabý (Fakulta informatiky, MU) PB173/02 16.9.2014 9/22 Úkol GIT a úpravy souborů O Změňte cokoliv v souboru sandbox/heiio O 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) 0 git commit -a Jiri Slabý (Fakulta informatiky, MU) PB173/02 16.9.2014 10/22 GIT a commity • Každý commit je pojmenován SHA hashem • Např. d3323cl503d54d83b0eae6c7927dede2d2973059, lze i zkráceně d3323cl503 • head je alias pro poslední • Lze odkazovat předchůdce pomocí ~ 9 Např. HEAD~1, d3323cl503~5 • Lze vytvořit jmenný alias, tzv. tag Jiri Slabý (Fakulta informatiky, MU) PB173/02 16. 9. 2014 11/22 Úkol GIT a commity O Zkontrolujte log, zda obsahuje 2 změny (git log --color) O Podívejte se na poslední 2 změny (git show --color head, resp. head~1) Q Vygenerujte záplaty 2 posledních commitů (git format-patch -2) O Proveďte push (git push, 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/02 16.9.2014 12/22 Záplatování Záplaty v linuxovém jádře O Poslat Odpovídajícímu správci (scripts/get_maintairier.pl) O Poslat na ML „pull request" a vystavit celý GIT strom • Popis V Documentation/SubmittingPatches Jiri Slabý (Fakulta informatiky, MU) PB173/02 16.9.2014 13/22 Sekce 3 Jádro Jiri Slabý (Fakulta informatiky, MU) PB173/02 16.9.2014 14/22 Jádro vs. programy Hlavní rozdíly • Žádné libc (printf, strien, mailoc,...), ani ostatní (pthread) • Ne/oddělený paměťový prostor • 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) PB173/02 16.9.2014 15/22 Kód • Výhradně GNU C (x86 už jen GCC > 4.x) • Pevně daný CodingStyle • Kontrola: scripts/checkpatch.pl (není 100%) • Vše slinkováno do jednoho • vmlinux —> (b)zlmage o Ale moduly (standardní ELF: *.ko) Jiri Slabý (Fakulta informatiky, MU) PB173/02 16.9.2014 16/22 Úkol Průzkum modulu (ko objektu) O Zvolte si jeden modul v systému (ismod) O Zavolejte na něm modinf o Q Proveďte objdump -d sekce .modinf o sekce O Porovnejte oba výstupy Jiri Slabý (Fakulta informatiky, MU) PB173/02 16.9.2014 17/22 Dokumentace • Linux Device Drivers, 3. edice • Documentation/* • Generovaná tamtéž (podobná DocBook) • Kód (http://lxr.free-electrons.com/iderit) Demo: pomocí Ixr najděte v jádře obecnou (v lib/) a optimalizovanou (v arch/) implementaci strlen Jiri Slabý (Fakulta informatiky, MU) PB173/02 16.9.2014 18/22 Úkol Hello World O Spusťte virtuální stroj O Prozkoumejte adresář 01 z pb173 git repozitáře • Makefile, pbl73.c O Do init funkce doplňte výpis „Hello World" • printk(KERN_iNFQ ".. .\n"); (ne, není tam čárka) Nebo zkráceně:pr_info("...\n"); • Objeví se v /proc/kmsg a na konzoli O Přeložte a vložte do systému • make, insmod Q Zkontrolujte výstup dmesg O Můžete udělat commit a push do svého repozitáře Jiri Slabý (Fakulta informatiky, MU) PB173/02 16.9.2014 19/22 Paměť • 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/02 16.9.2014 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. void *mem = kmalloc(100, GFP_KERNEL); if (mem) { } kfree(mem); Jiri Slabý (Fakulta informatiky, MU) PB173/02 16.9.2014 21 /22 Úkol O V exit funkci naalokujte 1000 bytů (kmailoc) Q Udělejte do nich střepy „Bye" 0 Vypište paměť jako řetězec (printk a 7„s) O Uvolněte paměť O Vložte a odeberte modul ze systému (insmod a rmmod) 0 dmesg 0 Můžete provést commit a push Jiri Slabý (Fakulta informatiky, MU) PB173/02 16.9.2014 22/22