编译和运行
驱动编译要用到kernel的Makefile文件 — — 也就是源码树的编译系统。因此,源码需要被配置和编译,以ubuntu自带的源码为例:
编译外部模块(.ko)的编译命令是:
make -C M= mak*e−*C< pathtokernelsrc> M=PWD
也就是进入到kernel目录,利用kbuild系统来编译驱动文件。obj-m 告诉编译系统需要编译成一个module(.ko),foo.o表明需要源文件是foo.c或者foo.S,如果驱动模块包含多个文件(如: foo_main.c, foo_common.c),写法如下:
kbuild将编译$(foo-y)列出的所有文件,合并产生 foo.ko
在编译期间,模块的Makefile会被kbuild多次读取,因此建议使用$(KERNELRELEASE)来区分Makefile的使用阶段,优化后的Makefile如下:
第一次运行make的时侯,$(KERNELRELEASE) 为空,因此,Makefile的 'else' 内容首先被读取,然后,执行 ‘make -C .....’\, 执行过程中,会回读Makefile文件,这次, 'ifneq'