Zephyr学习 - 第二章-1:depends on`与配置文件合并
02-1depends on与配置文件合并验证方式源码、生成配置、native_sim/native/64验证结论模拟确认1. 本节目标理解四个问题depends on如何限制 Kconfig symbol为什么关闭的布尔配置通常不会生成值为0的 C 宏CONF_FILE和EXTRA_CONF_FILE有什么区别如何通过.config、autoconf.h和 ELF 证明配置结果。实验源码C:\study\1-zephyr\labs\ch02_kconfig2. 实验中的依赖关系Kconfig中定义config LEARN_FEATURE bool Enable the learning feature default y config LEARN_PERIOD_MS int Learning feature period in milliseconds default 1000 range 10 5000 depends on LEARN_FEATURE config LEARN_VERBOSE bool Print verbose configuration details default n depends on LEARN_FEATURE依赖关系LEARN_FEATURE ├── LEARN_PERIOD_MS └── LEARN_VERBOSE含义不是“打开LEARN_PERIOD_MS时自动打开LEARN_FEATURE”而是只有LEARN_FEATUREy时LEARN_PERIOD_MS和LEARN_VERBOSE才允许生效。因此depends on是正向依赖约束不是自动启用依赖。3. 功能开启时的基线prj.confCONFIG_LEARN_FEATUREy CONFIG_LEARN_PERIOD_MS250 CONFIG_LEARN_GREETINGKconfig is active CONFIG_LEARN_VERBOSEy运行结果*** Booting Zephyr OS build v4.1.0-rc1 *** greetingKconfig is active featureenabled period_ms250 verbose: period is provided by Kconfig最终.configCONFIG_LEARN_FEATUREy CONFIG_LEARN_PERIOD_MS250 CONFIG_LEARN_GREETINGKconfig is active CONFIG_LEARN_VERBOSEy最终autoconf.h#defineCONFIG_LEARN_FEATURE1#defineCONFIG_LEARN_PERIOD_MS250#defineCONFIG_LEARN_GREETINGKconfig is active#defineCONFIG_LEARN_VERBOSE14. 关闭主功能disabled.confCONFIG_LEARN_FEATUREn CONFIG_LEARN_GREETINGfeature is disabled4.1 使用CONF_FILE替换主配置cd~/project/exportZEPHYR_SDK_INSTALL_DIR/home/yff/zephyr-sdk/zephyr-sdk-0.17.1sourcezephyr/zephyr-env.sh west build\-bnative_sim/native/64\/mnt/c/study/1-zephyr/labs/ch02_kconfig\--build-dir /mnt/c/study/1-zephyr/work/ch02_disabled\-palways\---DCONF_FILEdisabled.conf west build\--build-dir /mnt/c/study/1-zephyr/work/ch02_disabled\-trunCONF_FILEdisabled.conf表示本次 application configuration 使用disabled.conf替代默认的prj.conf。实际输出*** Booting Zephyr OS build v4.1.0-rc1 *** greetingfeature is disabled featuredisabled period_msnot compiled5. 关闭后的生成结果5.1.config# CONFIG_LEARN_FEATURE is not set CONFIG_LEARN_GREETINGfeature is disabled这里需要注意布尔值n保存为# CONFIG_LEARN_FEATURE is not set而不是CONFIG_LEARN_FEATUREn这是 Kconfig 最终.config的常见表示方式。5.2autoconf.h#defineCONFIG_LEARN_GREETINGfeature is disabled以下宏完全没有生成CONFIG_LEARN_FEATURE CONFIG_LEARN_PERIOD_MS CONFIG_LEARN_VERBOSE所以 C 代码不能假设关闭的 bool symbol 一定存在且等于0。6.IS_ENABLED()为什么安全不安全写法if(CONFIG_LEARN_FEATURE){/* ... */}关闭功能后CONFIG_LEARN_FEATURE没有定义这段代码可能编译失败。安全写法if(IS_ENABLED(CONFIG_LEARN_FEATURE)){/* ... */}IS_ENABLED()能把“宏定义为 1”和“宏不存在”转换成可用的编译期常量1或0。适合两条分支都具备完整声明、都能通过编译的情况。7. 为什么还需要#if实验代码#ifdefined(CONFIG_LEARN_FEATURE)printf(period_ms%d\n,CONFIG_LEARN_PERIOD_MS);#elseprintf(period_msnot compiled\n);#endif当LEARN_FEATUREn时CONFIG_LEARN_PERIOD_MS也不存在。如果改成普通运行期ifif(IS_ENABLED(CONFIG_LEARN_FEATURE)){printf(%d\n,CONFIG_LEARN_PERIOD_MS);}预处理器和编译器仍然需要解析CONFIG_LEARN_PERIOD_MS可能因宏不存在而报错。因此IS_ENABLED() 适合两条代码路径自身都能编译 #if/#ifdef 适合某些类型、宏、API 或源码只在配置开启时存在8. ELF 也能证明代码被移除执行strings /mnt/c/study/1-zephyr/work/ch02_disabled/zephyr/zephyr.elf\|rgverbose:|period is provided结果没有输出。这说明字符串verbose: period is provided by Kconfig没有进入关闭版本的 ELF。相关代码不是运行后“跳过”而是在编译阶段被排除了。9.EXTRA_CONF_FILE的冲突实验如果使用west build\-bnative_sim/native/64\/mnt/c/study/1-zephyr/labs/ch02_kconfig\--build-dir /mnt/c/study/1-zephyr/work/ch02_disabled_extra\-palways\---DEXTRA_CONF_FILEdisabled.conf配置合并顺序为prj.conf FEATUREy PERIOD250 VERBOSEy disabled.conf FEATUREn ↓ 最终 FEATUREndisabled.conf关闭了 feature但prj.conf对 dependent symbols 的旧请求仍然存在。Kconfig 因此警告LEARN_PERIOD_MS was assigned the value 250 but got the value unsatisfied dependencies: LEARN_FEATURE (n) LEARN_VERBOSE was assigned the value y but got the value n unsatisfied dependencies: LEARN_FEATURE (n)本次实验仍能完成构建但配置 fragment 之间存在逻辑冲突。不要只看“编译成功”还要读 Kconfig warning。10.CONF_FILE与EXTRA_CONF_FILECONF_FILE 指定 application 主配置文件 设置后不再默认使用 prj.conf EXTRA_CONF_FILE 在主配置文件之后追加一个或多个 fragment 不会删除主配置中的旧赋值请求选择原则完整的另一套应用配置使用CONF_FILE在主配置基础上增加少量调试选项使用EXTRA_CONF_FILE多个 fragment 必须保证依赖关系一致任何assigned ... but got ...警告都应检查。11. 为什么LEARN_GREETING仍然存在LEARN_GREETING的定义没有depends on LEARN_FEATURE因此即使 feature 关闭它仍然是一个有效的独立 symbol并生成#defineCONFIG_LEARN_GREETINGfeature is disabled这说明 Kconfig 只按照明确定义的依赖关系计算不会根据 symbol 名称或开发者意图猜测依赖。12. 本节结论depends on 限制当前 symbol 何时允许生效 不会自动打开依赖项 booln .config 中通常表示为 “# CONFIG_xxx is not set” autoconf.h 中通常不生成宏 IS_ENABLED() 安全判断可能不存在的 bool CONFIG 宏 #if/#ifdef 在预处理阶段彻底排除依赖不存在的代码 CONF_FILE 替换主 application configuration EXTRA_CONF_FILE 在主配置之后继续追加 fragment14. 自测题depends on会自动把它依赖的 symbol 设置为y吗为什么CONFIG_LEARN_FEATUREn后autoconf.h中找不到该宏为什么IS_ENABLED(CONFIG_LEARN_FEATURE)可以编译而直接使用该宏可能失败什么情况下必须使用#if defined(...)为什么关闭 feature 后CONFIG_LEARN_GREETING仍然存在想完全换一套 application 配置时应使用CONF_FILE还是EXTRA_CONF_FILEKconfig 输出assigned y but got n时说明了什么下一节02-2-select、imply与depends-on的区别。

相关新闻

DSP协处理器VCU-II流水线对齐与并行指令编程实战指南

DSP协处理器VCU-II流水线对齐与并行指令编程实战指南

1. 项目概述在嵌入式数字信号处理器(DSP)的内核与协处理器协同设计中,指令流水线的精细化管理是榨干硬件性能、实现算法实时性的关键。这不仅仅是理论上的优化,更是每一个在资源受限的嵌入式平台上追求极致效率的工程师必须面对的…

2026/7/22 2:50:13阅读更多 →
记忆体系工程实战:从设计选型到生产落地

记忆体系工程实战:从设计选型到生产落地

一个团队在构建 Agent 记忆系统时做了一个看起来合理的技术选择:用 Pinecone 存储所有的记忆——用户偏好、对话历史、技术知识、程序性方法,全部打成向量塞进一个托管向量数据库。 六个月后,他们遇到了三个问题: 第一&#xff…

2026/7/22 2:50:13阅读更多 →
两大AI开发神器:代码知识图谱与AI团队协作框架解析

两大AI开发神器:代码知识图谱与AI团队协作框架解析

1. 项目概述:两大AI开发神器解析最近GitHub热榜上出现了两个令人眼前一亮的开源项目:codebase-memory-mcp和agency-agents。作为长期关注AI开发工具的技术博主,我深入研究了这两个项目的技术细节和应用场景。它们分别解决了AI开发中的两个关键…

2026/7/22 2:50:13阅读更多 →
Python字符串拼接性能优化:从+、join到f-string的实战指南

Python字符串拼接性能优化:从+、join到f-string的实战指南

1. 项目概述:为什么字符串拼接值得深究?刚接触Python那会儿,我也觉得字符串拼接不就是加号连一连的事儿吗?直到后来在项目中处理日志、拼接SQL、生成动态配置,甚至是在做性能敏感的数据处理时,才被现实狠狠…

2026/7/22 4:20:25阅读更多 →
Unity与React深度集成:WebView双向通信架构与工程实践

Unity与React深度集成:WebView双向通信架构与工程实践

1. 项目概述:为什么要在Unity WebView里跑React?这个问题乍一听有点“跨界”,一个做游戏和实时3D渲染的引擎,一个做现代Web前端界面的框架,它们俩怎么扯上关系了?但如果你正在开发一个需要复杂UI交互的3D应…

2026/7/22 4:20:25阅读更多 →
从面试翻车到生产落地,吃透长任务Agent的七大工程核心难点

从面试翻车到生产落地,吃透长任务Agent的七大工程核心难点

前段时间一位计算机硕士朋友面试头部AI基础设施公司算法岗,简历上亮眼的“企业级复杂流程Agent系统搭建”项目,本是他的加分王牌,结果被面试官几个直击生产痛点的问题问得全盘失语。 面试官没有追问复杂算法原理、模型微调技巧这些常规考点&a…

2026/7/22 4:20:25阅读更多 →
面试踩坑实录,为什么95%的程序员回答Agent意图识别,刚开口就失去录用机会

面试踩坑实录,为什么95%的程序员回答Agent意图识别,刚开口就失去录用机会

开篇:一场决定岗位去向的面试提问 近几年企业AI智能体岗位面试,有一道必考题反复出现在大厂、中腰部科技公司甚至传统行业数字化团队的笔面试环节,面试官轻描淡写抛出一句,就能快速筛掉绝大多数候选人,这个问题就是Age…

2026/7/22 4:20:25阅读更多 →
Windows LAPS本地管理员密码管理机制与部署实践

Windows LAPS本地管理员密码管理机制与部署实践

1. Windows LAPS 核心机制解析Windows LAPS(Local Administrator Password Solution)是微软针对企业环境中本地管理员账户密码管理难题设计的自动化解决方案。其核心工作原理可分解为三个关键环节:1.1 密码生命周期管理机制LAPS通过组策略客户…

2026/7/22 4:20:25阅读更多 →
PHP容器化部署与WebSocket服务在Kubernetes中的实践

PHP容器化部署与WebSocket服务在Kubernetes中的实践

1. 项目概述在云原生时代,PHP应用的容器化部署一直是个颇具挑战性的任务。最近我在阿里云ACK(Kubernetes)环境中成功部署了一个基于ThinkPHP框架的项目,并实现了WebSocket服务的搭建。整个过程踩了不少坑,也积累了一些…

2026/7/22 4:18:25阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

2026/7/22 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/21 18:53:30阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/21 18:53:30阅读更多 →