More Related Content
Similar to カーネルモジュールプログラミング超入門 #1(仮) (20)
More from University of Tsukuba Linux User Group (11)
カーネルモジュールプログラミング超入門 #1(仮)
- 1. (The Linux) Kernel Module Programming ...for Dummies #1 Takayuki Horimoto opentaka[at]tsukuba-linux.org http://www.tsukuba-linux.org/
- 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
- 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
- 29. $ make Makefile: obj-m += helloworld.o make します : $ make -C <PATH_TO_THE_KERNEL> M=$(PWD) modules ------------------------------ helloworld.ko ができるので load : # insmod helloworld.ko 用がないので unload : # rmmod helloworld
- 33. /* モジュール作成に必要 */ #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"); } MODULE_*()
- 34. MODULE_*() $KERNEL_SRC/include/ linux/module.h : % cat linux/module.h | grep '#define MODULE_' … #define MODULE_INFO (tag, info) __MODULE_INFO(tag, tag, info) #define MODULE_ALIAS (_alias) MODULE_INFO(alias, _alias) #define MODULE_LICENSE (_license) MODULE_INFO(license, _license) #define MODULE_AUTHOR (_author) MODULE_INFO(author, _author) … …
- 35. MODULE_*() $KERNEL_SRC/include/ linux/module.h : % cat linux/module.h | grep '#define MODULE_' … #define MODULE_INFO (tag, info) __MODULE_INFO(tag, tag, info) #define MODULE_ALIAS (_alias) MODULE_INFO(alias, _alias) #define MODULE_LICENSE (_license) MODULE_INFO(license, _license) #define MODULE_AUTHOR (_author) MODULE_INFO(author, _author) … Doesn't look that hard to implement MODULE_*() to helloworld.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