2014.04.28
module 首测
1)环境:Centos release 6.5 (Final)
kernel: 2.6.32-358.23.2.e16.centos.plus.i686
2)源文件及Makefile
源文件:是一个入门的Hello.c文件,网上到处可以找得到。
Makefile 第一版本内容如下:
obj-m := hello.o
3)make 时的命令
make -C /lib/modules/$(uname -r)/build SUBDIRS=$PWD modules
能*生 hello.ko 文件
4)测试
insmod hello.ko 在虚拟终端没有任何消息
dmesg | tail 可以看到有 printk() 输出的一个 “Hello world”消息
modinfo hello.ko 有模块的相应信息。(注意此命令只能在这个模块文件存在的目录才能使用成功)
rmmod hello.ko 在虚拟终端没有任何消息
dmesg | tail 可以看到由 printk()输出的一个“Module exits...”消息
5)改进的 Makefile :
obj-m := hello.o
KERNELDIR =/lib/modules/$(shell uname -r)/build
PWD=$(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(RM) *.o *.ko *.mod.c *.order *.unsigned
# make end
我的总结:
重点在Makefile文件的编写,它需要明确的指出内核的版本及内核文件的路径。
注意在生成 target的command中每个部分的含义 .
参见 The Linux Kernel Module Programming Guide
http://www.tldp.org/LDP/lkmpg/2.6/html/x181.html
。