本文主要介绍了内核编译前的设置,以及如何将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设备节点已不存在。