内核编程 初探

来源:互联网 发布:手机怎么查自己淘宝id 编辑:程序博客网 时间:2024/06/10 03:47

发现需要使用内核编程,今天写了第一个内核编程的程序,纪念下.

centos

Linux localhost.localdomain 2.6.32-431.29.2.el6.x86_64 #1 SMP Tue Sep 9 21:36:05 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux


//hello.c

#include<linux/kernel.h>#include<linux/init.h>#include<linux/module.h>MODULE_LICENSE("Dual BSD/GPL");static int __init hello_init(void){        printk("Hello world\n");        return 0;}static void __exit hello_exit(void){        printk("Bye Corne\n");}module_init(hello_init);module_exit(hello_exit);

//Makefile

obj-m:=hello.oCURRENT_PATH :=$(shell pwd)    VERSION_NUM :=$(shell uname -r)LINUX_PATH :=/usr/src/kernels/$(VERSION_NUM)all:        make -C $(LINUX_PATH) M=$(CURRENT_PATH) modulesclean :        make -C $(LINUX_PATH) M=$(CURRENT_PATH) clean

特别注意:

1.在 all 和 clean 下面的一行,即 make 之前必须用 Table 符隔开,不能用空 格隔开,否则编译错误 

2.其中 -C 后指定的是 Linux 内核源代码的目录,而 M= 后指定的是 hello.c 和 Makefile 所在的目录


运行:

[jz@localhost code]$ l
hello.c  Makefile
[jz@localhost code]$ make
make -C /usr/src/kernels/2.6.32-431.29.2.el6.x86_64 M=/home/jz/code      modules
make[1]: Entering directory `/usr/src/kernels/2.6.32-431.29.2.el6.x86_64'
  CC [M]  /home/jz/code/hello.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/jz/code/hello.mod.o
  LD [M]  /home/jz/code/hello.ko.unsigned
  NO SIGN [M] /home/jz/code/hello.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.32-431.29.2.el6.x86_64'
[jz@localhost code]$ l
hello.c   hello.ko.unsigned  hello.mod.o  Makefile       Module.symvers
hello.ko  hello.mod.c        hello.o      modules.order
[jz@localhost code]$ sudo insmod hello.ko 
[jz@localhost code]$ sudo  dmesg  -c 
Hello world
[jz@localhost code]$ 


参考博客:

http://blog.csdn.net/tigerjibo/article/details/6010997

0 0
原创粉丝点击