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

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:韦东山

相关风雨

翦丧的意思
bt365手机投注

翦丧的意思

🌊 09-15 💨 阅读 865
世界杯冰岛隔离(冰岛队进过几次世界杯成绩如何)
bt365手机投注

世界杯冰岛隔离(冰岛队进过几次世界杯成绩如何)

🌊 09-03 💨 阅读 6057
鹿晗粉丝锐减200万背后的真相:明星光环下的危机
bt365手机投注

鹿晗粉丝锐减200万背后的真相:明星光环下的危机

🌊 07-12 💨 阅读 7373
有茶字的成语好听的
bt365手机投注

有茶字的成语好听的

🌊 07-30 💨 阅读 6762