当前位置: 首页 > news >正文

.config、Kconfig、***_defconfig之间的关系和工作原理

.config

.config文件本质是宏定义,Makefile中引用了该文件,利用该文件中定义的开关,控制编译流程,即那些模块需要编译,那些模块不需要。与此同时,C代码中也可以使用.config中定义的宏。

.config文件在一个工程中是通常是唯一地存在的,当项目工程越来越大,模块越来越多,.config文件中的宏定义项也就越来越多,不方便管理。

而且.config是纯文本,对于大型项目的几千个配置项,管理起来实属困难。

Kconfig

Kconfig的出现就是为了解决.confg文件管理困难问题,它相当于一个模板定义了这个项目中都有哪些配置项,也就是宏定义项,且可以针对各个配置项定义好数据类型和备注说明,以及默认值。而且采用模块化设计,项目根节点下的Kconfig文件可以通过source将子模块中定义的Kconfig引用进来,方便了管理。

当然,Kconfig最终还是要转化为.config,也就是以Kconfig为模板生成.config,最终提供给Makefile使用。

至于从Kconfig模板生成.config文件,就用很多种方法,比如鼎鼎大名的menuconfig,它就是读取Kconfig,生成菜单供用户选择,最终根据用户选择的结果,生成.config文件。当然,不局限与.config文件,我们可以把.config文件换个名字,比如my_proj_defconfig,于是就有了***_defconfig文件。

***_defconfig

***_defconfig本质上就是一个.config文件的副本,也就是为了某些工作需要,提前配置好的.config文件,在有需要的时候,将其名字改为.config就可以直接给Mackefile用了,用来指引编译流程。

同时,make工具还提供了一项功能,就是通过***_defconfig生成.config文件的功能,这跟直接拷贝***_defconfig文件为.config文件的区别在于,make工具会以Kconfig为模板,不全***_defconfig中未定义,且Kconfig中有默认值的宏定义项。同时,还会去除***_defconfig中定义了,但是Kconfig中未定义的项目。

总结

Kconfig的用法通常有两种,一种是使用带UI界面的工具,比如menuconfig;另一种是使用defconfig。使用defconfig的好处在于,我们只需要在defconfig中定义少量的,我们特别关心的,与Kconfig中默认值不符的项目,然后使用make工具,以Kconfig为模板,以defconfig为修正项,生成.config文件。

注意事项

基于defconfig,使用make工具生成.config时,defconfig中新增的宏定义项目,如果未在Kconfig中定义,将不会生效,也就是不会在.config文件中出现。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Hadoop里面MapReduce的序列化与Java序列化比较
  • Java知识点小结3:内存回收
  • 关于c#中异步async和await的理解
  • PyTorch 图像分割模型教程
  • csdn漏洞测试
  • 大数据处理技术:HBase的安装与基本操作
  • 二级C语言2023-9易错题
  • 数据结构与算法-Trie树添加与搜索
  • IDEA甚至前进后退跳转键
  • 【第十三章:Sentosa_DSML社区版-机器学习聚类】
  • 携手阿里云CEN:共创SD-WAN融合广域网
  • 吃透这本大语言模型入门指南,LLM就拿下了
  • python脚本编译为.so速度对比
  • 使用LangGPT提示词让大模型比较浮点数
  • 如何查看Android设备的dpi
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 10个确保微服务与容器安全的最佳实践
  • android图片蒙层
  • CSS魔法堂:Absolute Positioning就这个样
  • docker容器内的网络抓包
  • EOS是什么
  • JavaScript 基础知识 - 入门篇(一)
  • JavaScript异步流程控制的前世今生
  • java第三方包学习之lombok
  • PHP面试之三:MySQL数据库
  • python学习笔记 - ThreadLocal
  • Shadow DOM 内部构造及如何构建独立组件
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 从重复到重用
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 如何在 Tornado 中实现 Middleware
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 携程小程序初体验
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #if等命令的学习
  • #QT(TCP网络编程-服务端)
  • #QT(智能家居界面-界面切换)
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (¥1011)-(一千零一拾一元整)输出
  • (C++哈希表01)
  • (补)B+树一些思想
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (含笔试题)深度解析数据在内存中的存储
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...