SWI 075 – Linux Kernel
Úvod
Outline ● ● ●
● ●
Organizace semináře “Vývojový model kernelu” Developer essentials – jak si kernel stáhnout, zkompilovat, ... Dokumentace Témata referátů, zápočťáky, ...
Organizace semináře ●
●
●
●
Zápočet za (přiměřeně kvalitní) referát nebo (přiměřeně kvalitní) patch do kernelu Témata poměrně libovolná (týkající se kernelu); návrhy na závěr prezentace Neobsazené semináře/témata odpřednáším já, na libovolné téma na kterém se domluvíme http://www.jikos.cz/lk/ návrhy na témata, přidělená témata a “rozvrh”, odpřednášené referáty, ...
“Vývojový model kernelu” ●
●
●
Žádná oficiální roadmap, žádné UML diagramy, žádne formální specifikace, žádné release plány, design dokumenty, ... “Linux is evolution, not intelligent design” Linus 15 let od svého vzniku se kernel stále vyvíjí značnou rychlostí (bug fixy, nové featury, cleanupy, ...)
“Vývojový model kernelu”
“Vývojový model kernelu” ● ●
●
●
Cca 9200 řádek kódu denně změněno Distribuovaný vývoj – pro správu verzí používán GIT Většina subsystémů má vlastní vývojovou větev – seznam “hlavních” větví na kernel.org viz http://www.kernel.org/git/ Patche do konkrétních subsystémů vždy skrz příslušné větve, ze kterých Linus periodicky “pulluje” do mainline
“Vývojový model kernelu” ●
●
●
●
Andrew Morton udržuje (mimo GIT) speciální sadu patchů – mm větev Experimentální nové featury (reiser4, ext4, rozsáhlé změny subsystémů, apod) Určena pro testování – po čase kdy je patch v mm a ukáže se jako správný ho Andrew “pushuje” upstream (subsystem tree, mainline) Funguje dobře – Andrew je daleko pečlivější maintainer než Linus
“Vývojový model kernelu” ● ●
●
Stabilní release každé cca 23 měsíce (2.6.x) Pro opravy kritických chyb (security, crashe, data corruption, ...) stable kernel releases: 2.6.x.y Každý 2.6.x release je “major” release – obsahuje nové featury, mění vnitřní kernelové API, ...
“Vývojový model kernelu” ●
Týden 0 –
●
Týden 23: 2.6.xrc1 – – –
●
Zavřené “merge okno” (vetšinou) žádné nové featury, jen bugfixy Stále vysoký “patchrate”
Týdny 38: další 2.6.xrcY releases. –
●
Několik set patchů začleněno – nové featury, změny API, zásadní změny, ...
Po snížení bugfix patchrate – release dalšího 2.6.(x+1)
Později dle potřeby releases 2.6.x.y stable, paralelně s dalším vývojem
Developer essentials
●
● ●
http://www.kernel.org/ seznam aktualních releases (stable, rc, mm, git (snapshot)) GIT http://git.or.cz/ Documentation/Changes obsahuje seznam minimálních SW požadavků ke kompilaci kernelu
Developer essentials
●
● ● ●
make defconfig/allyesconfig/oldconfig/allmo dconfig/allnoconfig/randconfig make menuconfig/xconfig/gconfig make make modules_install && make install
Dokumentace ● ● ● ●
●
●
●
Documentation/* KernelNewbies http://kernelnewbies.org/ LXR http://lxr.linux.no/ Robert Love – Linux Kernel Development 2nd Edition http://rlove.org/kernel_book/ (není zdarma) Alessandro Rubini & Jonathan Corbet – Linux Device Drivers 3rd Edition http://lwn.net/Kernel/LDD3/ Mel Gorman – Understanding the Linux Virtual Memory Manager http://www.skynet.ie/~mel/projects/vm/guide/pdf/un derstand.pdf
Témata návrh ● ● ●
●
●
●
Kernel build systém, přenositelnost VCS – GIT, Cogito Konfigurace kernelu, Kconfig, závislosti mezi konfiguračními volbami Stavba Makefiles, jak přidat svůj driver/kód do build systému Jak kernel řeší přenositelnost mezi různými architekturami – oddělení archdependent kódu od zbytku Přenositelnost datových typů – opaque typy, endianita, typy s explicitně udanou velikostí, padding struktur, ...
Témata návrh ● ●
●
● ●
Procesy a plánování Vznik procesu, datové struktury (task_struct, thread_info), mechanismus copyonwrite, signály Alokace PID, stavy procesu a přechody mezi nimi, přechod mezi userspace a kernelspace; processcontext, interruptcontext Implementace threadů v linuxu; kernelové thready Scheduler – I/Obound vs. CPUbound procesy, O(1) scheduler, priority, timeslices, runqueues, waitqueues, loadbalancer na SMP a HT, context switch
Témata návrh ● ●
●
● ●
Syscally, zámky Pasivní a aktivní čekání (spinlocky, semafory, mutexy); kdy co použít Co je potřeba zamykat, jak může dojít k race condition (preemptivní vs. nepreemptivní kernel, interrupt, sleep, SMP, ...). Lockdep validator. RCU – lockless data access. Completion variables, BKL, memory barriers Syscall – vztah mezi libc a kernelem, int 0x80 vs. SYSENTER. Co je vsyscall, vDSO page. Předávání argumentů mezi kernelem a userspacem
Témata návrh ● ●
●
●
●
●
Interrupt handling Asynchronní a synchronní interrupty. ISR – co se v ní smí a co ne. Přiřazení ISR k IRQ. Sdílené a reentrantní ISR, interrupt context. Povolení a zakázání přerušení, cli()/sti() vs. local_irq_{disable,restore}(). disable_irq() a disable_irq_nosync(). Bottom halves. Softirqs, tasklety. Kernelový thread ksoftirqd. Workqueues. Zamykání v interruptech a mezi bottom halves
Témata návrh ● ●
●
●
VFS a filesystémy Co je abstrakce VFS. Nejdůležitější datové struktury (superblock, inode, file, dentry) a operace nad nimi. Vztah mezi VFS a “skutečnými” filesystémy. Vazba mezi VFS a procesem. Přehled filesystémů, jejich vlastností a implementace (ext2,3,4, ReiserFS3,4, XFS, GFS2, ...)
Témata návrh ● ●
●
●
●
Memory management Alokace paměti v kernelu kmalloc() vs. vmalloc() struct page. Zóny (DMA, NORMAL, HIGHMEM). Alokace a dealokace stránek alloc_pages(), __get_free_pages(), get_zeroed_page(). Slab allocator – princip cachování u slab cache, vztah mezi cache, slab a object. Alokace na stacku, dočasná mapování kmap(), highmem, 3:1 split, ...
Témata návrh ● ●
●
●
●
Adresní prostor procesu, stránkování Memory deskriptor (struct mm_struct). Kernel thready a jejich address space. Co jsou to VMA, jak jsou v kernelu reprezentovány. Přemisťování, spojování, rušení VMA, přístupová práva. Co se stane když proces volá mmap() či malloc() Jak funguje stránkování a swapování, pagetables, co je page cache a buffer cache. K čemu slouží thread pdflush
Témata návrh ● ●
●
●
Ovladače zařízení Co je ovladač zařízení. Ovladače v userspace (vgalib, libusb) Bloková a znaková zařízení, SCSI, PCI, input drivers (myš, klávesnice, joystick) Bloková zařízení – struct bio, request queues, I/O schedulery (deadline, anticipatory, elevator, cfq)
Témata návrh ● ●
● ●
Síť Síťová zařízení (jak funguje transport mezi různými vrstvami (i v vzhledem k ISO/OSI), co je skb, netfilter, nastavování parametrů socketu, raw sockety) NAPI – nové síťové API Nové protokoly v kernelu – DCCP, SCTP, ...
Témata návrh ● ●
● ●
●
Debugging, Time Problémy s debugováním kernelu a jejich řešení – sériová konzole, printk(), kgdb, kprobes. Co je kernel oops a jak ho použít k ladění – ksymoops, kallsyms. Usermodelinux Počítání času v Kernelu – hodnota HZ (přesnější timery, select(), poll(), scheduler). Co jsou jiffies a jejich reprezentace. RTC. BogoMIPS, hrtimers kernel patch, podpora pro realtime scheduling.
Témata návrh ● ● ●
●
● ●
Bezpečnost LSM, SELinux. Podpora kernelu pro šifrování – cryptoAPI, šifrované filesystémy rd Bezpečnostní 3 party patche do kernelu (grsecurity, RBAC, ...) Exploity Rootkity
Témata návrh ● ●
●
●
ACPI (, APM) K čemu ACPI je, stav implementace v linuxu. Problémy s HW neodpovídajícímu specifikaci. Co je DSDT, její dekompilace, úpravy, kompilace. ...
Zápočťáky ● ●
●
Kernelová bugzilla http://bugzilla.kernel.org/ http://www.kerneljanitors.org/ “We go through the Linux kernel source code, doing code reviews, fixing up unmaintained code and doing other cleanups and API conversions. It is a good start to kernel hacking.” ...