在任意一个目录下编写驱动程序,然后把此驱动程序编译为指定内核的模块,那么就要为此驱动程序写Makefile文件,假设驱动程序为:helloworld.c.此时编写Makefile文件。
/Makefile/
KERNAL ?=/home/forlinx/work/linux-3.2.0/ //KERNAL是定义的一个变量,来指定我们要驱动程序要运行内核的源码的路径,“?=”表示如果这个变量没有被赋值
就把后面的变量赋给它。/home/forlinx/work/linux-3.2.0/ 表示内核源码的路径
obj-m +=helloworld.o // 把helloworld.c编译为内核模块
default:
make -C $(KERNAL) M=$(PWD) modules //make -C 是改变当前目录进入到变量KERNAL所指定的目录,M=$(PATH) 回到当前 目录下,执行当前 Makefile modules是编译为模块
clean:
@rm -f *.o *.order.o *.ko *.order *.mod* //删除文件,@德作用是去掉删除时在屏幕上的显示的打印信息;-f 表示强制删除,忽略 不存在的文件,从不给出提示。
补充:
http://tscsh.blog.163.com/blog/static/2003201032013151544087/(参数的意义)
http://www.cnblogs.com/wanqieddy/archive/2011/09/21/2184257.html(=,?=,:=,+=的意义)