用户名: 密码: 忘记密码? 注册

内核模块编程之helloworld

作者:  时间: 2010-11-19
虽然没有完成任何功能,但是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去查看,同样有打印信息