发现需要使用内核编程,今天写了第一个内核编程的程序,纪念下.
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);
obj-m:=hello.o CURRENT_PATH :=$(shell pwd) VERSION_NUM :=$(shell uname -r) LINUX_PATH :=/usr/src/kernels/$(VERSION_NUM) all: make -C $(LINUX_PATH) M=$(CURRENT_PATH) modules clean : 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