在内核目录外对驱动程序进行编译
1.在内核目录中需要对相关信息进行配置以适应不同架构的开发板,需要设置以下相关环境变量:
1.1板子架构 ARCH
1.2交叉编译工具 CROSS_COMPILE
1.3工具链路径 PATH
2.当上述环境变量配置完成之后就可以在内核目录以外对驱动进行编译,需要对Makefile进行修改;
选用交叉编译工具链时需要注意工具链所使用的的ARM指令集是否与目标板指令集相同,否则会导致交叉编译出来的可执行文件无法运行,与目标板无法适配。
配置环境变量
或者使用export单独设置如:
修改makefile,设置编译规则
KVERSION = $(shell uname -r) //内核版本
KERN_DIR = /lib/modules/$(KVERSION)/build //内核目录
all:
make -C $(KERN_DIR) M=`pwd` modules //-C $(KERN_DIR)为内核目录 M=`pwd`编译当前目录模块 modules编译模块
clean:
make -C $(KERN_DIR) M=`pwd` modules clean
rm -rf modules.order
obj-m += hello_drv.o //描述编译哪个模块
~
在内核目录中对驱动程序进行编译
在内核目录中的Makefile中编译选项通常有以下三种形式
obj-m为将驱动程序编译成模块的形式
obj-y为将驱动程序编译进内核中
第三种形式可以通过使用make menuconfig指令对编译的形式进行设置
对于第三种形式,变量的设置使用的是当前目录下.config文件中的设置,而.config就是通过make xxx_defconfig编译将xxx_defconfig复制成的.config文件。修改.config的相关配置需要用到make menuconfig,使用该命令会出现Ncurses界面,这个界面又是由当前目录下Kconfig文件对其进行设定的。
利用第三种形式编译一个驱动文件过程:
编写之前的有关信息
添加新程序之前的menuconfig
界面中的选项来自于各个目录下的Kconfig
查看内核目录里/driver/char中的Kconfig
1.在内核目录下使用gedit文本编辑工具进入相应的目录下Kconfig,添加新配置选项,设置为bool变量,只能有两种取值方式一种是编译进内核一种是无。
2.内核目录下执行make menuconfig
通过搜索找到新添加的配置项CAOHAI_LED,以及其在界面中的位置
在对应的界面路径中找到对应的配置选项
3.内核目录中使用vi .config查看配置
找到对应的选项可以看到已经被按照默认选项编译进内核
其他注意事项:
如果编译时不包含该选项时:
在make menuconfig中设置该选项
此时可以看到该项被注释掉
如果想要将配置项设置为编译成模块就要重新设置Kconfig中的相关选项将bool换成tristate
在make menuconfig界面中设置为编译成模块的形式
再查看.config中的形式
将配置项与对应的驱动程序相关联
进入到对应的驱动目录下,此处为内核的/driver/char内,在Makefile中添加相应的配置项
之后就可以在内核目录下使用make进行编译
learned from:韦东山