Linux驱动——编译驱动的两种形式(内核目录外、内核目录中)

在内核目录外对驱动程序进行编译
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:韦东山

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值