虽然没有完成任何功能,但是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去查看,同样有打印信息