内核模块编程之helloworld
时间:2010-11-19 来源:Bean_lee
虽然没有完成任何功能,但是helloworld表明总算弄出个内核模块来,这么个简单功能,也搞了好久。腿疼在家养病,除了用红花油揉腿,用电吹风烤腿,就捣鼓这个了。希望能给后来人以帮助,少走点弯路吧。当然我也是菜鸟,希望高手多指教。
__________________________________________________________________hello.c______
1 #include <linux/init.h> 2 #include <linux/kernel.h> 3 #include <linux/module.h> 4 5 static int hello_init(void) 6 { 7 printk("Hello! This is the helloworld module!\n"); 8 return 0; 9 } 10 11 static void hello_exit(void) 12 { 13 printk("Module exit! Bye Bye!\n"); 14 return; 15 } 16 17 module_init(hello_init); 18 module_exit(hello_exit); 19 MODULE_LICENSE("GPL");
___________________________________________________________________hello.c______
_________________________________________________________________Makefile______ 1 obj-m := hello.o 2 KERNELBUILD :=/lib/modules/`uname -r`/build 3 all: 4 make -C $(KERNELBUILD) M=$(shell pwd) modules 5 clean: 6 rm -rf *.o *.ko *.mod.c .tmp_versions modules* Module* _________________________________________________________________Makefile______
Makefile注意: 1 名字为 Makefile,最初,我命名为makefile结果报错,没有Makefile。不知道别的同学有没有遇到 这个问题,我是ubuntu系统 2 Makefile第二行uname -r 两边不是单引号,是波浪号同一个键的那个字符。
执行make之后,看到 root@libin:~/project/hello_kernel# make make -C /lib/modules/`uname -r`/build M=/home/libin/project/hello_kernel modules make[1]: 正在进入目录 `/usr/src/linux-headers-2.6.32-26-generic' Building modules, stage 2. MODPOST 1 modules make[1]:正在离开目录 `/usr/src/linux-headers-2.6.32-26-generic' root@libin:~/project/hello_kernel# ll 总用量 92 drwxr-xr-x 3 libin libin 4096 2010-11-19 13:03 ./ drwxr-xr-x 16 libin libin 4096 2010-11-19 12:07 ../ -rw-r--r-- 1 root root 361 2010-11-19 12:39 hello.c -rw-r--r-- 1 root root 2683 2010-11-19 12:39 hello.ko -rw-r--r-- 1 root root 279 2010-11-19 12:39 .hello.ko.cmd -rw-r--r-- 1 root root 690 2010-11-19 12:39 hello.mod.c -rw-r--r-- 1 root root 1852 2010-11-19 12:39 hello.mod.o -rw-r--r-- 1 root root 22698 2010-11-19 12:39 .hello.mod.o.cmd -rw-r--r-- 1 root root 1416 2010-11-19 12:39 hello.o -rw-r--r-- 1 root root 22603 2010-11-19 12:39 .hello.o.cmd -rw-r--r-- 1 root root 178 2010-11-19 12:36 Makefile -rw-r--r-- 1 root root 49 2010-11-19 13:03 modules.order -rw-r--r-- 1 root root 0 2010-11-19 12:39 Module.symvers drwxr-xr-x 2 root root 4096 2010-11-19 13:03 .tmp_versions/
执行 insmod ./hello.ko 执行dmesg可以看到最后一行显示 [13887.977542] Hello! This is the helloworld module! 同样执行 rmmod hello 执行dmesg可以看到最后一行显示: [13973.243671] Module exit! Bye Bye!
也可以去/var/log/messages去查看,同样有打印信息
__________________________________________________________________hello.c______
1 #include <linux/init.h> 2 #include <linux/kernel.h> 3 #include <linux/module.h> 4 5 static int hello_init(void) 6 { 7 printk("Hello! This is the helloworld module!\n"); 8 return 0; 9 } 10 11 static void hello_exit(void) 12 { 13 printk("Module exit! Bye Bye!\n"); 14 return; 15 } 16 17 module_init(hello_init); 18 module_exit(hello_exit); 19 MODULE_LICENSE("GPL");
___________________________________________________________________hello.c______
_________________________________________________________________Makefile______ 1 obj-m := hello.o 2 KERNELBUILD :=/lib/modules/`uname -r`/build 3 all: 4 make -C $(KERNELBUILD) M=$(shell pwd) modules 5 clean: 6 rm -rf *.o *.ko *.mod.c .tmp_versions modules* Module* _________________________________________________________________Makefile______
Makefile注意: 1 名字为 Makefile,最初,我命名为makefile结果报错,没有Makefile。不知道别的同学有没有遇到 这个问题,我是ubuntu系统 2 Makefile第二行uname -r 两边不是单引号,是波浪号同一个键的那个字符。
执行make之后,看到 root@libin:~/project/hello_kernel# make make -C /lib/modules/`uname -r`/build M=/home/libin/project/hello_kernel modules make[1]: 正在进入目录 `/usr/src/linux-headers-2.6.32-26-generic' Building modules, stage 2. MODPOST 1 modules make[1]:正在离开目录 `/usr/src/linux-headers-2.6.32-26-generic' root@libin:~/project/hello_kernel# ll 总用量 92 drwxr-xr-x 3 libin libin 4096 2010-11-19 13:03 ./ drwxr-xr-x 16 libin libin 4096 2010-11-19 12:07 ../ -rw-r--r-- 1 root root 361 2010-11-19 12:39 hello.c -rw-r--r-- 1 root root 2683 2010-11-19 12:39 hello.ko -rw-r--r-- 1 root root 279 2010-11-19 12:39 .hello.ko.cmd -rw-r--r-- 1 root root 690 2010-11-19 12:39 hello.mod.c -rw-r--r-- 1 root root 1852 2010-11-19 12:39 hello.mod.o -rw-r--r-- 1 root root 22698 2010-11-19 12:39 .hello.mod.o.cmd -rw-r--r-- 1 root root 1416 2010-11-19 12:39 hello.o -rw-r--r-- 1 root root 22603 2010-11-19 12:39 .hello.o.cmd -rw-r--r-- 1 root root 178 2010-11-19 12:36 Makefile -rw-r--r-- 1 root root 49 2010-11-19 13:03 modules.order -rw-r--r-- 1 root root 0 2010-11-19 12:39 Module.symvers drwxr-xr-x 2 root root 4096 2010-11-19 13:03 .tmp_versions/
执行 insmod ./hello.ko 执行dmesg可以看到最后一行显示 [13887.977542] Hello! This is the helloworld module! 同样执行 rmmod hello 执行dmesg可以看到最后一行显示: [13973.243671] Module exit! Bye Bye!
也可以去/var/log/messages去查看,同样有打印信息
相关阅读 更多 +