• kernel驱动配置文件的编写的记录


    概要:简单记录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 配置

    1. menu "Rivotek"
    2. config RIVOTEK
    3. bool "Rivotek Drivers"
    4. ---help---
    5. Enable support for various drivers write by Rivotek
    6. if RIVOTEK
    7. config HELLOWORLD
    8. tristate "Hello Word driver support"
    9. default m
    10. help
    11. This is a driver module test,just for pratice.
    12. endif # if RIVOTEK
    13. endmenu

    还需更改drivers下的Makefile配置,如下:

    1. diff --git a/drivers/Makefile b/drivers/Makefile
    2. index 527a6da8..0ef64a04 100644
    3. --- a/drivers/Makefile
    4. +++ b/drivers/Makefile
    5. @@ -165,3 +165,6 @@ obj-$(CONFIG_RAS) += ras/
    6. obj-$(CONFIG_THUNDERBOLT) += thunderbolt/
    7. obj-$(CONFIG_CORESIGHT) += coresight/
    8. obj-$(CONFIG_ANDROID) += android/
    9. +
    10. +
    11. +obj-$(CONFIG_RIVOTKE) += rivotek/

    编译后,居然没有Helloworld.ko 生成!

    检查 .config 文件,有配置,无误。

     检查 Makefile,和rivotek 文件夹下的Kconfig 对比

    配置名字写错了…………

    更改为

    1. diff --git a/drivers/Makefile b/drivers/Makefile
    2. index 527a6da8..0ef64a04 100644
    3. --- a/drivers/Makefile
    4. +++ b/drivers/Makefile
    5. @@ -165,3 +165,6 @@ obj-$(CONFIG_RAS) += ras/
    6. obj-$(CONFIG_THUNDERBOLT) += thunderbolt/
    7. obj-$(CONFIG_CORESIGHT) += coresight/
    8. obj-$(CONFIG_ANDROID) += android/
    9. +
    10. +
    11. +obj-$(CONFIG_RIVOTEK) += rivotek/

    主要更改点:CONFIG_RIVOTKE ====》 CONFIG_RIVOTEK

    编译,生成Helloworld.ko。

    drivers文件夹 下 Makefile 最初写错了,后面又修正;这里有占用篇幅的嫌疑,但真实的记录了debug的过程。同时,假如有读过这篇博客的朋友在自己工作中遇到类似的情况,此处提供一个debug思路。

  • 相关阅读:
    【MySQL】 Java的JDBC编程
    MyBatis:缓存机制详解
    为元素绑定事件的方法
    【C语言进阶】动态内存管理常见错误
    SpringBoot+SpringSecurity+JWT
    ChatGPT批量写作文章软件
    数据异动类问题分析-GMV下降
    知识经验分享——YOLOv5-6.0训练出错及解决方法(RuntimeError)
    OpenShift 4 - 在 Windows 上安装 OpenShift 单机开发环境
    Python编译后的pyc文件转py源码文件
  • 原文地址:https://blog.csdn.net/qq_20376499/article/details/127452902