4_关于编写驱动那些事

编写驱动前的小实验,将led驱动不编译进内核

Posted by Jerry Chen on June 18, 2019

本文主要介绍了内核编译前的设置,以及如何将led驱动不编译进内核。

编译器路径设置

在内核源码根目录的Makefile文件中有CROSS_COMPILE定义,在这里更新为自己的编译器地址。

下面截图的窗口标题中有目录路径,为我目前的源码根目录存放地址。

注释:vim中 /关键字 是搜索关键字,回车搜索后按下n是下一个结果,N是上一个结果

强制编译和配置编译

Makefile中确定是否编译文件/目录,如果是目录就找目录下的Makefile。

obj-y表示强制编译,obj-$(CONFIG_HELLO)表示根据宏CONFIG_HELLO的值判断配置编译,也就是.config文件定义的宏的值。

而.config中的宏可以使用make menuconfig进行裁剪(进行定义)。使用之前,需要确保有含CONFIG_HELLO的Kconfig配置文件,CONFIG_HELLO最多有三种状态:m、y、n。

obj-y表示编译进内核zImage,obj-n表示不编译,obj-m表示编译成模块(单独的*.ko)。

编写驱动之前的小试验

尝试通过上面的知识通过make menuconfig的方式把一个存在的驱动不编译进内核。

这里以leds驱动为例。ls /dev/led*发现存在leds设备节点,说明内核存在leds驱动。

通过make menuconfig命令配置去掉leds,然后执行make zImage完成生成zImage镜像,再通过fastboot或者tf卡烧写进开发板。

烧写完成后发现leds设备节点已不存在。