概要:简单记录Kconfig 编写方法和 make menuconfig 配置时的展现形式的对应。
平台:ubuntu 20.04
kernel 版本:linux-4.0
在上一篇博客《驱动的第一个模块》中,编写驱动Kconfig后,配置时呈现的效果和代码对比如下:
此时进了 Device drivers 就可以看到 Hello Word driver support,也就是说 Hello Word 是在二级目录下。假如rivotek下的驱动很多,希望进入三级目录进行配置呢?
仿照着kernel里的的其他模块编写了Makefile 和修改了 drivers下的Makefile,编译老是报错:
linux-4.0$ make menuconfig
scripts/kconfig/mconf Kconfig
drivers/rivotek/Kconfig:18: 'endmenu' in different file than 'menu'
drivers/rivotek/Kconfig:1: location of the 'menu'
drivers/Kconfig:187: 'endmenu' in different file than 'menu'
drivers/rivotek/Kconfig:1: location of the 'menu'
make[1]: *** [scripts/kconfig/Makefile:24:menuconfig] 错误 1
make: *** [Makefile:543:menuconfig] 错误 2
核对许久,没有找到问题,百度了该错误,找到如下相同错误的博客:编译错误-----Kconfig之'endmenu' in different file than 'menu'
再仔细对比,缺少少了一个回车,添加后可以出配置界面。 查看配置项,和代码对应关系如下:
Kconfig 配置
- menu "Rivotek"
-
- config RIVOTEK
- bool "Rivotek Drivers"
- ---help---
- Enable support for various drivers write by Rivotek
-
- if RIVOTEK
-
- config HELLOWORLD
- tristate "Hello Word driver support"
- default m
- help
- This is a driver module test,just for pratice.
-
- endif # if RIVOTEK
-
- endmenu
还需更改drivers下的Makefile配置,如下:
- diff --git a/drivers/Makefile b/drivers/Makefile
- index 527a6da8..0ef64a04 100644
- --- a/drivers/Makefile
- +++ b/drivers/Makefile
- @@ -165,3 +165,6 @@ obj-$(CONFIG_RAS) += ras/
- obj-$(CONFIG_THUNDERBOLT) += thunderbolt/
- obj-$(CONFIG_CORESIGHT) += coresight/
- obj-$(CONFIG_ANDROID) += android/
- +
- +
- +obj-$(CONFIG_RIVOTKE) += rivotek/
编译后,居然没有Helloworld.ko 生成!
检查 .config 文件,有配置,无误。
检查 Makefile,和rivotek 文件夹下的Kconfig 对比
配置名字写错了…………
更改为
- diff --git a/drivers/Makefile b/drivers/Makefile
- index 527a6da8..0ef64a04 100644
- --- a/drivers/Makefile
- +++ b/drivers/Makefile
- @@ -165,3 +165,6 @@ obj-$(CONFIG_RAS) += ras/
- obj-$(CONFIG_THUNDERBOLT) += thunderbolt/
- obj-$(CONFIG_CORESIGHT) += coresight/
- obj-$(CONFIG_ANDROID) += android/
- +
- +
- +obj-$(CONFIG_RIVOTEK) += rivotek/
主要更改点:CONFIG_RIVOTKE ====》 CONFIG_RIVOTEK
编译,生成Helloworld.ko。
drivers文件夹 下 Makefile 最初写错了,后面又修正;这里有占用篇幅的嫌疑,但真实的记录了debug的过程。同时,假如有读过这篇博客的朋友在自己工作中遇到类似的情况,此处提供一个debug思路。