カーネルモジュールプログラミング超入門 #1(仮)
DESCRIPTION
筑波大学 Linux User Group (つくらぐ)http://www.tsukuba-linux.org/TRANSCRIPT
- 1. (The Linux) Kernel Module Programming ...forDummies #1 Takayuki Horimoto opentaka[at]tsukuba-linux.org http://www.tsukuba-linux.org/
2. $whoami
- Takayuki Horimoto
3. (opentaka) 4. Gentoo Linux geek
- GMN-ja ( ...)
5. CJK team bug Open Source Software != Free Software 6. Agenda
- What is akernel module?
7. lsmod ,insmod andmodprobe 8. hello world withprintk() 9. Creating aMakefile 10. Introduction toMODULE_*() 11. Summary 12. What is a kernel module?
- load/unload
13. 14. 15. config 16. eg. ipv6, ipfilter, usblp (USB printer), usb-storage 17. lsmod ,insmodandmodprobe
- $cat /proc/modules
- load
18. $lsmod pppoe 9320 2 - Live 0xc0c4d000 0xf8969000 pppox 5226 1 pppoe, Live 0xc0c4b000 0xf896d000 ppp_generic 15328 6 pppoe,pppox, Live 0xc0c47000 0xf8962000 slhc 7802 1 ppp_generic, Live 0xc0c45000 0xf8966000
- #insmod /lib/.../ppp_generic.ko
19. File Locations ?
- /lib{.,32,64}/modules//kernel///.ko
- :/lib/modules/2.6.29-gentoo-r5/kernel/drivers/net/s2io.ko
#modprobeppppppppppppoe(p..oe )
- /etc/modprobe.conf
- aliasp....oe
- p...oe.ko
/lib/modules//modules.dep
- p...oe ppppppppp p..
20. # 1 Hello World 21. #include < linux/module.h > #include < linux/kernel.h > int init_module(void){ printk(KERN_INFO "Hello World "); return 0; } void cleanup_module(void){ printk(KERN_INFO "..dying "); } helloworld.c 22. printk() printk(KERN_INFO ); printk(KERN_ WARNING ... ); 23. printk()
- printf()
printf() : printf() 24. printk()
- printk( KERN_INFO );
printk( KERN_WARNING ... ); linux/kernel.h[L91]: #defineKERN_EMERG""/* system is unusable*/ #defineKERN_ALERT""/* action must be taken immediately*/ #defineKERN_CRIT ""/* critical conditions*/ #defineKERN_ERR""/* error conditions*/ #defineKERN_WARNING""/* warning conditions*/ #defineKERN_NOTICE""/* normal but significant condition*/ #defineKERN_INFO""/* informational*/ #defineKERN_DEBUG""/* debug-level messages*/ 25. printk()
- printf() printk() syslogd
26. KERN_*
- syslog()
27. /**/ #include < linux/module.h > /* KERN_INFO */ #include < linux/kernel.h > /* load */ int init_module(void){ printk(KERN_INFO "Hello World "); return 0; } /* rmmod*/ void cleanup_module(void){ printk(KERN_INFO "..dying "); } helloworld.c 28. $ make
- vanilla*
- (*kernel.org )
build-essential emerge 29. $ make Makefile: obj-m += helloworld.o make : $make -CM=$(PWD) modules ------------------------------ helloworld.ko load : # insmodhelloworld.ko unload : # rmmodhelloworld 30. $ make /var/log/messages Hello World#insmod ...dying#rmmod 31. 32. 33. /**/ #include < linux/module.h > /* KERN_INFO */ #include /* load */ int init_module(void){ printk(KERN_INFO "Hello World "); return 0; } /* rmmod*/ void cleanup_module(void){ printk(KERN_INFO "..dying "); } MODULE_*() 34. MODULE_*() $KERNEL_SRC/include/ linux/module.h : % cat linux/module.h | grep '#define MODULE_' #defineMODULE_INFO (tag, info) __MODULE_INFO(tag, tag, info) #defineMODULE_ALIAS (_alias) MODULE_INFO(alias, _alias) #defineMODULE_LICENSE (_license) MODULE_INFO(license, _license) #defineMODULE_AUTHOR (_author) MODULE_INFO(author, _author) 35. MODULE_*() $KERNEL_SRC/include/ linux/module.h : % cat linux/module.h | grep '#define MODULE_' #defineMODULE_INFO (tag, info) __MODULE_INFO(tag, tag, info) #defineMODULE_ALIAS (_alias) MODULE_INFO(alias, _alias) #defineMODULE_LICENSE (_license) MODULE_INFO(license, _license) #defineMODULE_AUTHOR (_author) MODULE_INFO(author, _author) Doesn't look that hard to implementMODULE_*()tohelloworld.c ... 36. /**/ #include < linux/module.h > /* KERN_INFO */ #include < linux/kernel.h > MODULE_LICENSE(GPL); MODULE_AUTHOR(TsukuLUG); /* load */ int init_module(void){ printk(KERN_INFO "Hello World "); return 0; } /* rmmod*/ void cleanup_module(void){ printk(KERN_INFO "..dying "); } helloworld.c 37.
- Kbuild
38. module_init()module_exit() 39. helloworld syslog() Icons: http://www.iconlook.com/ 40. Linux User Group Twitter:@tsukuba_linux http://www.tsukuba-linux.org/