news 2026/9/29 6:48:46

Zephyr BSP: 31-配置 Company SoC平台

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Zephyr BSP: 31-配置 Company SoC平台

摘要:本文是 Zephyr BSP 移植系列的第 31 篇,聚焦 Kconfig 在 Company SoC 平台化中的核心作用。文章首先厘清 Devicetree 与 Kconfig 的分工——前者描述硬件资源,后者决定软件编译与功能配置;随后系统讲解 Kconfig 的生成链路(.config→autoconf.h→ C 编译)、SoC/Board/Driver 三层的 Kconfig 组织方式,以及depends on、select、default等关键机制的区别。通过 Company UART 驱动实例,串联起 Devicetree、Kconfig、CMake 与 Device Model 的完整协作链路,最终建立「Kconfig(软件配置)— Devicetree(硬件描述)— CMake(编译组织)」的三角模型,帮助读者把 Company SoC 从固定代码升级为可配置的硬件软件平台。

Kconfig:把 Company SoC 变成可配置平台

前面我们已经完成了:

20理解 Zephyr ↓21SoC Port Skeleton ↓22CPU / Architecture ↓23Startup ↓24Interrupt Controller ↓25Clock / Reset ↓26Devicetree ↓27Binding ↓28UART Driver ↓29GPIO / SPI / I2C / Timer ↓30Board Support Package

到31 — Kconfig,我们要解决一个非常关键的问题:

Devicetree 描述「硬件是什么」,Kconfig 决定「软件编译什么、启用什么、配置成什么」。

对于公司自己的 SoC,这一步意味着:

Company SoC │ ├── Devicetree │ └── 描述硬件资源 │ └── Kconfig └── 控制软件功能

最终形成:

┌────────────────────────────────────────────┐ │ Company Zephyr BSP │ │ │ │ Devicetree Kconfig │ │ ────────── ─────── │ │ UART0 CONFIG_UART │ │ UART1 CONFIG_GPIO │ │ GPIO CONFIG_SPI │ │ SPI0 CONFIG_I2C │ │ Timer CONFIG_TIMER │ │ IRQ CONFIG_SOC_... │ │ │ └────────────────────────────────────────────┘

一、先搞清楚:Devicetree 和 Kconfig 为什么都需要?

这是 Zephyr BSP 最容易混淆的地方之一。

假设 Company SoC 有:

UART0 UART1 UART2 GPIO SPI0 SPI1 I2C0 TIMER0 TIMER1

Devicetree 可以描述:

uart0: uart@40000000{compatible="company,uart";reg=<0x40000000 0x1000>;interrupts=<5>;status="okay";};

它回答:
UART0 在哪里?
但是它不回答:
UART 驱动要不要编译?
这就是 Kconfig 的职责。
例如:

CONFIG_SERIAL=yCONFIG_UART_CONSOLE=yCONFIG_UART_COMPANY=y

于是:

Devicetree ↓ UART0 存在 Kconfig ↓ UART 驱动参与编译 ↓ UART Console 开启

两者共同决定最终系统。

二、一个非常重要的理解

可以先记住这个模型:

Devicetree=Hardware Description Kconfig=Software Configuration

或者更准确一点:

Devicetree → 描述具体硬件实例、资源、连接关系 Kconfig → 决定功能、驱动、编译选项、系统能力

例如:

Devicetree

uart0{reg=<...>;interrupts=<...>;clocks=<...>;};

描述:

UART0 地址 IRQ Clock

Kconfig

CONFIG_SERIAL=yCONFIG_UART_INTERRUPT_DRIVEN=yCONFIG_UART_CONSOLE=y

描述:

编译 UART 支持 IRQ 把 UART 作为 Console

三、Zephyr Kconfig 最终生成什么?

这一点和前面讲 Devicetree 的过程非常类似。

你执行:

west build-bcompany_board app

Kconfig 会参与:

Kconfig ↓ menuconfig / configuration ↓ .config ↓ autoconf.h ↓ C/C++ 编译

最重要的文件之一是:

build/zephyr/.config

例如:

CONFIG_SOC_SERIES_COMPANY_X=yCONFIG_SOC_COMPANY_X1=yCONFIG_SERIAL=yCONFIG_UART_CONSOLE=yCONFIG_UART_COMPANY=yCONFIG_GPIO=yCONFIG_GPIO_COMPANY=y

然后生成:

build/zephyr/include/generated/zephyr/autoconf.h

里面会出现类似:

#defineCONFIG_SERIAL1#defineCONFIG_UART_CONSOLE1#defineCONFIG_UART_COMPANY1#
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 6:48:31

LLM事后重评估(Hindsight)工程实践指南

1. “Hindsight”不是工具名&#xff0c;而是LLM工程中一个被严重误读的隐喻概念最近在多个技术社区和内部项目评审会上&#xff0c;反复看到“hindsight”这个词被当作某个新出的开源框架、Docker镜像名&#xff0c;甚至API服务来讨论——有人在GitHub上搜hindsight-llm&#…

作者头像 李华
网站建设 2026/9/29 6:48:24

JETBRAINS 插件 FreqFiles 配置 TaoToken:settings.json 骨架与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/29 6:48:18

基于 Qwen Code Skills 实践:用 SKILL.md 构建自定义数据分析智能体

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/29 6:48:18

【Codex教育管理系统】配置WORKFLOW服务管理工作流项目与所属API

WORKFLOW服务在教育管理系统中的价值,在于围绕 WORKFLOW服务 的核心字段、接口动作和页面状态维护业务数据。模块需要和现有接口、权限、页面状态保持一致,不能只写成普通后台表格。 本文基于 系统功能/三方服务_WORKFLOW服务 对应源码,把业务目标拆成模型字段、接口规则、页…

作者头像 李华
网站建设 2026/9/29 6:44:36

从桌面到万卡集群:TaoToken 统一 Key 打通 AI 存储基础设施配置链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华