一般在编译linux驱动时,我们需要在交叉编译环境中进行编译,所以要在编译环境中搭建交叉编译环境。编写驱动的makefile使需要制定驱动依赖的内核的路径,makefile写法如下:
KERN_DIR = /xxx/xxx/linux-2.6.22.6
all:
make -C $(KERN_DIR) M=`pwd` modules
clean:
make -C $(KERN_DIR) M=`pwd` modules clean
rm -rf modules.order
obj-m += buttons.o
KERN_DIR=/XXX/XXX/linux-2.6.22.6,这句是对KERN_DIR进行赋值,确定后面使用内核源码时的内核源码路径。
make -C $(KERN_DIR) M='pwd' modules,这句是makefile的规则:-C选项的作用是指将当前工作目录转移到你所指定的位置,当make的目标为all时,-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile。
M=$(PWD) 表明然后从内核makefile中返回到当前目录继续读入、执行当前的Makefile。M是内核根目录下的Makefile中使用的变量,"M="选项的作用是,当用户需要以某个内核为基础编译一个外部模块的话,需要在make modules命令中加入"m=dir",程序会自动到你所指定的dir目录中查找模块源码,将其编译,生成ko文件。M=‘pwd’这句话是用来制定我们编译的驱动的路径。这句可以这样来写PWD:=$(shell pwd) M='PWD'。
================================================================================
当make的目标为all时,-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile。
当从内核源码目录返回时,KERNELRELEASE已被被定义,kbuild也被启动去解析kbuild语法的语句,make将继续读取else之前的内容,其为kbuild语法的语句, 指明模块源码中各文件的依赖关系,以及要生成的目标模块名。
本文详细介绍了在Linux环境下,如何通过编写makefile并设置交叉编译环境来编译驱动程序。重点讲解了KERN_DIR变量的设定,以及makefile中-C选项的使用,帮助读者理解如何指定内核源码路径和驱动编译路径。
1360

被折叠的 条评论
为什么被折叠?



