• 嵌入式Linux驱动开发3---内核配置 Kconfig以及.config


    在内核源码树中的每个目录下都存在两个文件:
    Kconfig和.config
    每个Kconfig都代表了其所在目录源文档相关的内核配置菜单
    执行make menuconfig时,Kconfig配置菜单被取出来以图形化的方式显示
    用户根据自己的需要使用键盘“点完菜”(Y/M/N?)之后保存,就会将用户所需要的”菜“的信息保存到.config这个文件中
    主目录里的Makefile调用这个.config文件时就知道用户的选择了

    以I2C为例,找到/driver/i2c/kconfig
    这个文件包含了所有关于I2C的配置信息,其中就有一下这一段

    config I2C_CHARDEV
    	tristate "I2C device interface"
    	help
    	  Say Y here to use i2c-* device files, usually found in the /dev
    	  directory on your system.  They make it possible to have user-space
    	  programs use the I2C bus.  Information on how to do this is
    	  contained in the file <file:Documentation/i2c/dev-interface>.
    
    	  This support is also available as a module.  If so, the module 
    	  will be called i2c-dev.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    其中tristate指示了这个是个三态的配置选项:
    Y — 编译进内核
    M — 编译成模块
    N — 不编译


    应用实例

    在drivers目录下创建一个想要添加到内核中的模块
    给文件夹起名为my_module_intokernel,里面应该有如下文件:
    mydrv.c
    mydrc.h
    test.c
    Kconfig
    Makefile

    .c和.h为模块功能必要的源文件 test.c用于测试模块的文件
    Kconfig里面应该填入如下内容:

    menu "MY_DRV_INTOKERNEL"
    	comment "MY_DRV_INTOKERNEL"
    config CONFIG_MY_DRV_INTOKERNEL
    	boolean "MY_DRV support"
    	default y
    config CONFIG_TEST
    	tristate "MY_DRV test support"
    	depends on CONFIG_MY_DRV_INTOKERNEL
    	default y
    endmenu
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    上面这段脚本应该这么解释:

    menuconfig界面里...
    配置里应该多一个配置实体,叫MY_DRV_INTOKERNEL
    	有实体,不显示怎么行,使用comment显示出来,让用户看到这个选项
    配置里还要多个子配置实体,MY_DRV_INTOKERNEL下面还得有个子选项
    	他应该是boolean二项的,可以选是或否,叫做"MY_DRV support"
    	默认是 y
    配置里还要多个子配置实体,MY_DRV support下面还得有个子选项
    	他应该是tristate三项的,可以选择Y/N/M,叫做"MY_DRV test support"
    	他是有依赖的 不能随便被配置到,一定要上级菜单被配置为Y才行
    	默认是 y
    这级菜单结束啦!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    我们自定义的文件夹下的Kconfig修改完还不够,因为Kconfig是被层级遍历的,上一级目录下的Kconfig还需要配置一下,要不然这里写的还没法起作用。
    我们找到driver目录下的Kconfig,可以看到这里面全是 :
    在这里插入图片描述
    这些source命令 就是他让drivers目录下所有子目录里的Kconfig文件起效果的
    所以想让我们自己写的Kconfig起作用,也得照葫芦画瓢:source "drivers/my_drv_intokernel/Kconfig

    同样的Makefile也是需要修改的,my_drv_intokernel下的Makefile应该追加:

    obj-$(CONFIG_MY_DRV_INTOKERNEL)+=my_drv.o
    obj-$(CONFIG_TEST)+=test.o
    
    • 1
    • 2

    my_drv_intokernel 父目录下的Makefile还应该追加:

    obj-$(MY_DRV_INTOKERNEL)+=my_drv_intokernel /
    
    • 1

    可以让我们新建的目录能够被编译器注意到,用户在进行编译内核时能够进入到my_drv_intokernel 目录下

  • 相关阅读:
    Java18+​App端采用uniapp+开发工具 idea hbuilder智能上门家政系统源码,一站式家政服务平台开发家政服务
    2023.10(u盘刻录iso)主机,vmware,virtualbox安装linux/ubuntu/kali/centos stream9/arch
    detect_topic
    【JS】Chapter14-深入面向对象
    java毕业设计在线视频教育平台Mybatis+系统+数据库+调试部署
    Java面试之数据库面试题
    MySQL【基本select语句】
    尚硅谷 webpack高级配置 笔记
    ViT细节与代码解读
    大数据信用报告查询应该选什么样的平台?
  • 原文地址:https://blog.csdn.net/weixin_43604927/article/details/125817615