カーネルモジュールプログラミング超入門 #1(仮)

Download カーネルモジュールプログラミング超入門 #1(仮)

If you can't read please download the document

Upload: university-of-tsukuba-linux-user-group

Post on 24-May-2015

4.769 views

Category:

Education


3 download

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/