配置Kconfig 让内核支持mach-xxx开发板
文章目录
配置Kconfig 让内核支持mach-xxx开发板
前言
1. 了解Linux内核编译过程
2. Kconfig 基本配置方法
2.1. 添加驱动编译选项
2.1.1. 配置 Kconfig
2.1.2. 配置 Makefile
2.1.3. 配置上层 Makefile 和 Kconfig
2.2. 添加 mach-xxx 平台配置选项
2.2.1. 配置SOC Kconfig
2.2.2. 配置SOC Makefile
2.2.3.添加驱动设备
3. Kconfig 基本语法
3.1. menuconfig 语句
3.2. config 语句
3.3. 变量类型
3.3.1 bool 类型
3.3.2 int 类型
3.3.3. string 类型
3.3.4. hex 类型
3.3.5. tristate 类型
3.4. choice/endchoice 语句
3.5. comment 语句
3.6. source 语句
前言
补充之前写的向 Linux 内核添加硬件平台向 Linux 内核添加硬件平台
Linux内核支持的芯片可以通过内核配置直接对SOC进行配置,这些芯片的硬件平台对应的实现文件也都集成在内核中(arch/arm/mach-xxx),每一个mach-xxx都表示一个SOC硬件平台。
向内核添加soc平台主要完成两个工作:
Makefile:mach-xxx 各层 Makefile 对文件的编译(所有的编译文件可变翼的前提下)。
Kconfig:将添加的soc平台中的驱动进行配置(开/关、关联、依赖)。
配置目标结果如下图:
注:本文主要对 Kconfig 配置方法说明。
1. 了解Linux内核编译过程
对内核配置进行操作前,我们需要先了解下Linux内核的编译过程:
遍历每个源码目录的 Makefile文件
每个 Makefile 会根据 Kconfig 来定制需要编译的对象
最后回到顶层目录的 Makefile 执行编译
总的来说,Kconfig 文件就是各种配置界面的源文件。当遍历完了 Makefile 和 Kconfig 以后,会在顶层目录生成一个 .config 文件(.config文件保存着所有的内核配置选项),然后回到顶层 Makefile 编译。
(通过配置 Kconfig 将驱动选项添加到内核的编译选项中,我们主要配置的是自己硬件平台mach-asu的Kconfig)
2. Kconfig 基本配置方法
2.1. 添加驱动编译选项
例如,完成了一个 ASU_TEST 驱动,需要将选项加入到内核的编译选项中,可以按照以下步骤进行:
2.1.1. 配置 Kconfig
在 ASU-imx6ull-test/drivers 目录下建立 asu_test 子目录,进入该目录下创建 Kconfig 文件,内容如下:
// ASU-imx6ull-test/drivers/asu_test/Kconfig
config TEST
bool "ASU_TEST"
help
Support for ASU TEST!!
这里定义了一个 TEST 句柄,Kconfig 可以通过这个句柄来控制在 Makefile 中是否编译,ASU_TEST 是显示在中端的名称。具体的语法在Kconfig语法中介绍。
2.1.2. 配置 Makefile
同样在 ASU-imx6ull-test/drivers/asu_test 下新建一个 Makefile 文件,内容如下:
# ASU-imx6ull-test/drivers/asu_test/Makefile
obj-y$(CONFIG_TEST) += asu_test.o
Obj - $(CONFIG_选项名) += xxx.o
# 当CONFIG_选项名=n时,表示对应目录下的xxx.c不参与编译
# 当CONFIG_选项名=y时,表示对应目录下的xxx.c将被编译进内核
# 当CONFIG_选项名=m时,表示对应目录下的xxx.c将被编译成一个.ko模块
2.1.3. 配置上层 Makefile 和 Kconfig
在 ASU-imx6ull-test/drivers/Kconfig 中添加内容如下:
// ASU-imx6ull-test/drivers/Kconfig
menu "Device Drivers"
source "drivers/asu_test/Kconfig" // 前面添加的内容地址
在 ASU-imx6ull-test/drivers/Makefile 中添加内容如下:
obj-y += asu_test/ # 加入编译队列
检验结果,如下图:
2.2. 添加 mach-xxx 平台配置选项
配置过程和 2.1 节大同小异,基本都是对Makefile和Kconfig进行修改
2.2.1. 配置SOC Kconfig