PB173 - Ovladače jádra - Linux i. Jiří Slabý ITI, Fakulta Informatiky 21. 9. 2010 J. Slabý (ITI) PB173/01 21.9.2010 1/11 Úvodní informace • Semestr = 12 týdnů (28. 9. svátek) • Cvičící • Vývoj jádra od r. 2005 (NetBSD, Linux) o Student Fl a Cíle cvičení • Nastínit trochu jiný model programování Prohloubit znalosti vnitřností OS a HW • Ukončení: k • Splnění úkolů (možno ve skupinkách) Vše potřebné na: https://minotaur.fi.muni.cz:8443/~xsvenda/ docuwiki/doku.php?id=public:pbl73:pbl7 3_2 010_systemlinux J. Slabý (ITI) PB173/01 21.9.2010 2/ 11 S čím budeme pracovat? • satyrOI-satyiiO • CentOS 5.5 • Login/heslo: vyvoj/vyvoj a GIT • Úvod do GITu dnes • Podrobněji: http : //book. git-sem. com/ • Zdroje jádra 9 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 9 Ze začátku • COMB06X karty • Později; k PCI, l/O, na přerušení, DMA • http://www.liberouter.org/ J. Slabý (ITI) PB173/01 21.9.2010 3/ 11 Úkol Práce s GITem © Na aise ve svém ~ proveďte klon • git cloně git://decibel.fi.muni.cz/~xslaby/pfc>173 © Změňte cokoliv v souboru sandbox/heiio © Zkontrolujte změny (git diff --color) O git commit -a (správný log: suma, volný řádek, zdůvodnění, VOlný řádek, podpis (-s); VZOr git. kernel. org) • Git může chtít nastavit jméno+e-mail (instrukce jsou na stdout) O Smažte sandbox/hello (git rm) O git commit -a © Zkontrolujte log, zda obsahuje 2 změny (git log - -color) © Vygenerujte 2 patche (git format-patch -2) J. Slabý (ITI) PB173/01 21.9.2010 4/ 11 Záplatování Co s patchem dále? • Poslat Odpovídajícímu správci (scripts/get_maintainer .pl) • Poslat na ML a vystavit celý GIT strom, aby někdo provedl „merge" • Popis V Documentation/SubmittingPatches Vývojový proces jádra • L. Torvalds má právo veta « Záplatováním se opravuje i přidává nová funkcionalita • Ovladače mohou být zařazeny přes drivers/staging • Začištění, smazání nepotřebného a přesun ze staging • Správce Greg KH Stejným způsobem odevzdávání úkolů J. Slabý (ITI) PB173/01 21.9.2010 5/ 11 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/01 21.9.2010 6/ 11 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) 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/01 21.9.2010 7/ 11 Úkol O Spusťte QEMU (./qemu-start /home/local/centos . img) O git clone git + ssh://xlogin@aisa.fi.muni.cz/home/xlogin/pbl7 3 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_* • Objeví se v /proc/kmsg a na konzoli O Přeložte a vložte do systému • make, insmod Q Zkontrolujte výstup dme s g O git commit -a O Pošlete na aisu (git push) J. Slabý (ITI) PB173/01 21.9.2010 8/ 11 Paměť • Omezený zásobník (4k-8k) • Žádná nebo malá rekurze • Jen pro malá data (int, malé struct, krátká pole, ...) • Pracuje se se stránkami (na x86 4K-1G) • Nesouvislá paměť/halda • Omezená velikost alokace (fragmentace) J. Slabý (ITI) PB173/01 21.9.2010 9/ 11 Práce s pamětí O Po stránkách (makro page_size) • _get_free_page, free_page • get_free_pages, free_pages (řád) • Vracejí adresu jako unsigned long O Malé alokace (sta bajtů, max. až cca. 4M) • 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 *mem1 = (void *)__get_free_page (GFP_KERNEL) ; void *mem2 = kmalloc(PAGE_SIZE, GFP_KERNEL) ; if (merní && mem2) { } kfree (mem2) ; free_page (meml) ; J. Slabý (ITI) PB173/01 21.9.2010 10/11 Úkol O V exit funkci naalokujte stránku O Udělejte do ní střepy „Bye" O Vypište paměť jako řetězec O Uvolněte stránku O Vložte a odeberte modul ze systému 0 Jako obvykle commit+push J. Slabý (ITI) PB173/01 21.9.2010 11 / 11