我的第一個內核模塊hello.c

編譯環境:

主機:      dell n4030 
操作系統:ubuntu 10.10 i386
內核:linux-2.6.35-22

第一步:編寫holle.c

zengkejie@zengkejie-Inspiron-N4030:~/module$ vi hello.c

  1 #include<linux/module.h>

  2 #include<linux/init.h>
  3 MODULE_LICENSE("GPL");
  4 static int __init hello_init(void)
  5 {
  6         printk("Hello world!\n");
  7         return 0;
  8 }
  9 static void __exit hello_exit(void)
 10 {
 11         printk("Goodbye");
 12 }
 13 module_init(hello_init);
 14 module_exit(hello_exit);

第二步:編寫makeifle

 1 obj-m := hello.o
  2 K:=$(shell uname -r)
  3 KDIR:=/usr/src/linux-headers-$(K)
  4 modules:
  5         make -C $(KDIR) M=$(shell pwd) modules
  6 clean:
  7         rm -rf *.mod.c *.o modules.order *.ko *.mod.o Module.*

第三步; make

zengkejie@zengkejie-Inspiron-N4030:~/module$ make
make -C /usr/src/linux-headers-2.6.35-22-generic M=/home/zengkejie/module modules
make[1]: 正在進入目錄 `/usr/src/linux-headers-2.6.35-22-generic'
  CC [M]  /home/zengkejie/module/hello.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/zengkejie/module/hello.mod.o
  LD [M]  /home/zengkejie/module/hello.ko
make[1]:正在離開目錄 `/usr/src/linux-headers-2.6.35-22-generic'

第四步:安裝模塊

zengkejie@zengkejie-Inspiron-N4030:~/module$ ls
hello.c   hello.mod.c  hello.o   modules.order
hello.ko  hello.mod.o  Makefile  Module.symvers


zengkejie@zengkejie-Inspiron-N4030:~/module$ sudo insmod hello.ko
[sudo] password for zengkejie: 

無提示,成功!

查看日誌:sudo dmesg

最後一行顯示:[ 1293.746472] Hello world!

第五步:移除模塊

zengkejie@zengkejie-Inspiron-N4030:~/module$ sudo rmmod hello

查看日誌:sudo dmesg

最後一行顯示: 

[ 1293.746472] Hello world!
[ 1525.828854] Goodbye


注:

參考資料:

linux內核之旅:http://www.kerneltravel.net/?p=82

fudan_abc:        http://blog.csdn.net/fudan_abc/article/details/5380511













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章