PB173 - Ovladače jádra - Linux i. Jiří Slabý ITI, Fakulta Informatiky 27. 9. 2011 J. Slabý (ITI) PB173/02 27.9.2011 1 / 16 Úvodní informace • Semestr = 12 týdnů (25. 10. Kernel Summit) • Cvičící « Vývoj jádra od r. 2005 (NetBSD, Linux) o Student Fl • Cíle cvičení • Nastínit trochu jiný model programování Prohloubit znalosti vnitřností OS a HW • Ukončení: k • Splnění domácích úkolů • 2 body na úkol, alespoň | z celkového počtu • Vše potřebné ve studijních materiálech v ISu J. Slabý (ITI) PB173/02 27.9.2011 2/ 16 S čím budeme pracovat? - HW • satyr01-satyr10 • CentOS 5.x • Login/heslo: vyvoj/vyvoj • COMB06X karty Později; k PCI, l/O, na přerušení, DMA • http://www.liberouter.org/ J. Slabý (ITI) PB173/02 27.9.2011 3/ 16 S čím budeme pracovat? - SW • GIT • Domáci úkol • 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) Owned • full-history-linux GIT (od 0.01 do 2.6.26) • Qemu nebo jiná VM 9 Ze začátku J. Slabý (ITI) PB173/02 27.9.2011 4/ 16 Úkol Práce s GITem O Domácí úkol • Dotazy? O Proveďte klon • git cloně git://github.com/jirislaby/pbl73.git O Prozkoumejte • Příklady ze cvičení • Adresář pro domácí úkoly J. Slabý (ITI) PB173/02 27.9.2011 5/ 16 Záplatování Výstup GITu = patch (záplata) Záplaty v linuxovém jádře O Poslat Odpovídajícímu správci (scripts/get_maintainer .pl) O Poslat na ML „pull request" a vystavit celý GIT strom • Popis V Documentation/SubmittingPatches Stejným způsobem odevzdávání domácích úkolů J. Slabý (ITI) PB173/02 27.9.2011 6/ 16 Záplaty v linuxovém jádře • Záplatováním se opravuje i přidává nová funkcionalita • Někdo odpovědný aplikuje záplatu/provede pull • Co když není správce opravovaného kódu? • L. Torvalds má právo veta J. Slabý (ITI) PB173/02 27.9.2011 7/ 16 Část I Rozdíly J. Slabý (ITI) PB173/02 27.9.2011 8/ 16 Jádro vs. programy Hlavní rozdíly • Žádné libc (printf, strien, mailoc, ...), ani ostatní (pthread) • Ne/oddělený paměťový prostor • Počáteční funkce (main) « Pád systému => pád všeho J. Slabý (ITI) PB173/02 27.9.2011 9/ 16 Kód jádra • GNU C (x86 už jen gcc >= 4.x) • CodingStyle • Kontrola: scripts/checkpatch.pl (ne 100%) • Monolit (vmlinux (b) zlmage) • Ale moduly (standardní ELF: * . ko) • module_init (=main), module_exit (=on_exit) J. Slabý (ITI) PB173/02 27.9.2011 10/ 16 Ú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 objdump -d sekce .modinfo sekce O Porovnejte oba výstupy J. Slabý (ITI) PB173/02 27.9.2011 11 / 16 Dokumentace • Documentation/* • Generovaná tamtéž (podobná DocBook) • Kód (http://lxr.linux.no/) Demo: pomocí Ixr najděte v jádře obecnou (v lib/) a optimalizovanou (V arch/) implementaci strlen J. Slabý (ITI) PB173/02 27.9.2011 12/ 16 Úkol Hello World O Spusťte virtuální stroj O git cloně git://github.com/jirislaby/pbl73.git O Prozkoumejte adresář 01 z pb173 git repozitáře o Makefile,pbl73 . c O Do init funkce doplňte výpis „Hello World" • printk(KERN_INFO "..."); • 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 J. Slabý (ITI) PB173/02 27.9.2011 13/ 16 Paměť • Omezený zásobník (4k-8k) • Žádná nebo malá rekurze o Jen pro malá data (int, malé struct, krátká pole, ...) • Pracuje se se stránkami (na x86 4K-1G) • Omezená velikost alokace (fragmentace) • Podrobnosti v dalších cvičeních J. Slabý (ITI) PB173/02 27.9.2011 14/ 16 Jednoduché alokace Malé alokace (sta bajtů, max. až cca. 4M) • Horní mez závislá na architektuře • kmalloc, kfree 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(1 00 , GFP_KERNEL) ; if (mem) { } kfree (mem) ; J. Slabý (ITI) PB173/02 27.9.2011 15/ 16 Úkol O V exit funkci naalokujte 1000 bytů O Udělejte do nich střepy „Bye" Q Vypište paměť jako řetězec O Uvolněte paměť O Vložte a odeberte modul ze systému 0 Můžete commit+push 27.9.2011 16/ 16