PB173 - Ovladače jádra - Linux I. GIT a jádro Jiri Slabý Fakulta informatiky Masarykova univerzita 24. 9. 2015 Jiri Slabý (Fakulta informatiky, MU) PB173/04 24.9.2015 1 /22 Obsah cvičení Q Úvodní informace O GIT Q Jádro • Paměť Jiri Slabý (Fakulta informatiky, MU) PB173/04 24.9.2015 2/22 Sekce 1 Úvodní informace Jiri Slabý (Fakulta informatiky, MU) PB173/04 24.9.2015 3/22 Úvodní informace • Semestr = 13 týdnů • 15. 10. pravděpodobně 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ů • 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 24.9.2015 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 slidech značené POZOR) • -2 body za každé vrácení v případě nějaké nefunkčnosti • -1 bod za kód neodpovídající stylu • -1 bod za ostatní drobnosti Jiri Slabý (Fakulta informatiky, MU) PB173/04 24.9.2015 5/22 S čím budeme pracovat? Hardware • Stroje satyr01-10 o CentOS6.x • Login/heslo: vyvoj/vyvoj Nemají viditelnou IP Jiri Slabý (Fakulta informatiky, MU) PB173/04 24.9.2015 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 24.9.2015 7/22 Sekce 2 GIT Jiri Slabý (Fakulta informatiky, MU) PB173/04 24.9.2015 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 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 24.9.2015 9/22 Úkol GIT a úpravy souborů O Změňte COkoliv V SOUboru sandbox/hello 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) O git commit -a Jiri Slabý (Fakulta informatiky, MU) PB173/04 24.9.2015 10/22 GIT a commity • Každý commit je pojmenován SHA hashem • Např. d3323cl503d54d83b0eae6c7927dede2d2973059, lze i zkráceně d3323ci503 • head je alias pro horní/poslední commit • Lze odkazovat předchůdce pomocí ~ nebo A • Např. HEADAAA, HEAD~1, d3323cl503~5 • Lze vytvořit jmenný alias, tzv. tag • Více: man gitrevisions Jiri Slabý (Fakulta informatiky, MU) PB173/04 24.9.2015 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 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 24.9.2015 12/22 Záplatování Záplaty v linuxovém jádře O Poslat odpovídajícímu správci o scripts/get_maintainer.pl • git send-email Q Poslat na ML „pull request" a vystavit celý GIT strom o git push • git request-pull • Zevrubný popis V Documentation/SubmittingPatches Jiri Slabý (Fakulta informatiky, MU) PB173/04 24.9.2015 13/22 Sekce 3 Jádro Jiri Slabý (Fakulta informatiky, MU) PB173/04 24.9.2015 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 • 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/04 24.9.2015 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 24.9.2015 16/22 Úkol Průzkum modulu (ko objektu) O Zvolte si jeden modul v systému (ismod) O Zavolejte na něm modinf o O Proveďte ob j dump -d sekce .modinf o O Porovnejte oba výstupy Jiri Slabý (Fakulta informatiky, MU) PB173/04 24.9.2015 17/22 Dokumentace • Linux Device Drivers, 3. edice • Documentation/* • Generovaná tamtéž (podobná DocBook) • Kód (http://lxr.free-electrons.com/ident) Demo: pomocí Ixr najděte v jádře obecnou (v lib/) a optimalizovanou pro x86 32-bity (v arch/x86/) implementaci strlen Jiri Slabý (Fakulta informatiky, MU) PB173/04 24.9.2015 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_iNFO ".. .\n"); (ne, není tam čárka) • Nebo zkráceně: pr_inf o(".. An"); • 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 O Můžete udělat commit a push do svého repozitáře Jiri Slabý (Fakulta informatiky, MU) PB173/04 24.9.2015 19/22 Paměť • 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 24.9.2015 20/22 Jednoduché alokace Malé alokace (sta bajtů, maximálně až cca. 4M) • 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/04 24.9.2015 21 /22 Úkol O V exit funkci naalokujte 1000 bytů (kmailoc) Q Udělejte do nich střepy „Bye" O Vypište paměť jako řetězec (printk a °/0s) 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 24.9.2015 22/22