Zephyr 在 Radxa ROCK 5B+(RK3588)上的移植与启动实战指南
Zephyr 在 Radxa ROCK 5BRK3588上的移植与启动实战指南【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr本指南以 Zephyr 仓库中 boards/radxa/rock_5b_plus/doc/index.rst 为核心结合板级源码、设备树与 SOC 级实现系统讲解如何为基于 Rockchip RK3588 的单板计算机 Radxa ROCK 5B 构建、配置和引导 Zephyr 固件。读完本文你将掌握 Zephyr 板级支持包的完整结构、UART2 串口控制台配置、8 核 SMP 构建方法以及通过 Radxa U-Boot 的 legacy 镜像加载路径把 Zephyr 跑起来的完整流程。板卡概览RK3588 与 ROCK 5BROCK 5B 是一块以 Rockchip RK3588 为核心的单板计算机SBC。RK3588 是一款大小核异构 SoC集成4 个 Cortex-A76 大核与 4 个 Cortex-A55 小核。该板卡最高可选配32 GB LPDDR5 内存并提供了 eMMC、microSD、PCIe、USB、以太网以及 40-pin 扩展排针等丰富外设接口。在 Zephyr 仓库中该板卡的官方标识为rock_5b_plus其定义位于 boards/radxa/rock_5b_plus/board.ymlvendor: radxaSoC 为rk3588提供名为smp的板级变体variant对应多核启动版本基础板与 SMP 变体均为arm64架构RAM 声明为 131072 KB128 MB与设备树中预留的 DRAM 区一致。从 SOC 层看SOC_RK3588由 soc/rockchip/rk35/rk3588/Kconfig.soc 定义并归属于SOC_SERIES_RK35系列板级 Kconfig boards/radxa/rock_5b_plus/Kconfig.rock_5b_plus 通过select SOC_RK3588完成绑定。注意文档明确说明板载以太网接口目前尚未被 Zephyr 支持。虽然 RK3588 设备树中已描述了两个 dwmac GMAC 节点见 dts/arm64/rockchip/rk3588.dtsi但它们默认处于disabled状态板级 dts 也未启用因此当前阶段不要依赖网口进行开发调试。板级配置结构解析rock_5b_plus板卡目录下的文件组成了一个标准的 Zephyr 板级支持包BSP文件作用board.yml板卡元数据名称、厂商、SoC、变体Kconfig.rock_5b_plus板级 Kconfig 符号绑定 SoCrock_5b_plus.dts板级设备树基础版rock_5b_plus_smp.dtsSMP 变体设备树rock_5b_plus.yaml基础版 hwmv2 描述rock_5b_plus_smp.yamlSMP 变体 hwmv2 描述rock_5b_plus_defconfig基础版默认配置rock_5b_plus_smp_defconfigSMP 变体默认配置设备树console、DRAM 与 UART2基础设备树 rock_5b_plus.dts 首先包含arm64/rockchip/rk3588.dtsi与common/mem.h然后声明model Radxa ROCK 5B; compatible radxa,rock-5b-plus, rockchip,rk3588; chosen { zephyr,console uart2; zephyr,shell-uart uart2; zephyr,sram dram; }; dram: memory10000000 { compatible mmio-sram; device_type memory; reg 0x10000000 DT_SIZE_M(128); }; uart2 { status okay; current-speed 1500000; };关键点chosen节点把zephyr,console与zephyr,shell-uart都指向uart2同时把zephyr,sram指向dram——这就是0x10000000 加载地址的来源Zephyr 镜像被设计为加载并运行在0x10000000设备树在对应地址声明了 128 MB 内存区域UART2 被显式启用并配置为 1.5 Mbit/s这就是文档所述“串口控制台 1.5 Mbit/s”的设备树依据。在 SoC 设备树 dts/arm64/rockchip/rk3588.dtsi 中uart2节点描述为uart2: serialfeb50000 { compatible rockchip,rk3588-uart, ns16550; reg 0xfeb50000 0x100; interrupts GIC_SPI 333 IRQ_TYPE_EDGE IRQ_DEFAULT_PRIORITY; clock-frequency 12000000; reg-shift 2; status disabled; };它兼容ns16550驱动基地址0xfeb50000通过 GICv3 中断控制器接收 SPI 333 中断GIC 位于 dts/arm64/rockchip/rk3588.dtsi地址0xfe600000。板级 dts 将其status改为okay并覆盖波特率串口控制台随即生效。基础版默认配置rock_5b_plus_defconfig 中开启了以下关键项CONFIG_ARM_ARCH_TIMERy # ARM 架构通用定时器 CONFIG_SERIALy # 串口驱动 CONFIG_CONSOLEy # 控制台子系统 CONFIG_UART_CONSOLEy # UART 控制台后端 CONFIG_ARMV8_A_NSy # ARMv8-A 非安全世界 CONFIG_CACHE_MANAGEMENTy # Cache 管理 CONFIG_TICKLESS_KERNELy # 无节拍tickless内核其中CONFIG_ARMV8_A_NSy表明 Zephyr 运行在 ARMv8-A 的非安全Non-Secure世界配合CONFIG_CACHE_MANAGEMENT做缓存管理CONFIG_TICKLESS_KERNELy则让内核在空闲时关闭周期性时钟中断以降低功耗。定时器与 PSCI 依赖见下文 SMP 章节。串口控制台UART2 与 1.5 Mbit/sZephyr 在 ROCK 5B 上使用 UART2 作为串口控制台波特率为 1.5 Mbit/s1500000。这一设置由三处共同决定板级设备树中chosen的zephyr,console uart2与zephyr,shell-uart uart2板级设备树中uart2 { current-speed 1500000; }defconfig 中的CONFIG_UART_CONSOLEy。需要注意的是1.5 Mbit/s 属于非标准波特率实际连接时请确保你的 USB 转串口适配器及终端软件如 minicom、picocom、screen支持该速率并据此配置波特率否则无法正常看到 Zephyr 的启动日志与 shell 输出。从源码结构可以推断该串口驱动走 ns16550 兼容路径reg-shift 2表明寄存器按 4 字节步进访问这些细节在驱动实现中drivers/serial下的 ns16550 驱动会被使用板级无需额外处理。构建 Zephyr 固件标准单镜像构建按照文档给出的标准构建方式以hello_world为例适用于 Unix 主机west build -p always -b rock_5b_plus samples/hello_world构建产物为build/zephyr/zephyr.bin以及对应的zephyr.elf、zephyr.hex等。-p always会先执行 pristine 清理确保构建环境干净。SMP 变体构建启用全部 8 核RK3588 拥有 4 个 Cortex-A55 与 4 个 Cortex-A76 核心SMP 变体支持全部 8 个核心。构建时板卡名写作rock_5b_plus//smpwest build -p always -b rock_5b_plus//smp samples/synchronizationboard.yml中socs[].variants[].name: smp定义了该变体hwmv2 描述文件 rock_5b_plus_smp.yaml 显式声明supported: [smp]。samples/synchronization是多线程同步示例适合在 SMP 环境下观察多核调度行为。SMP 变体的配置差异对比 rock_5b_plus_smp_defconfig 与基础版SMP 变体额外启用了CONFIG_SMPy # 开启对称多处理 CONFIG_MP_MAX_NUM_CPUS8 # 最大 CPU 数为 8 CONFIG_PM_CPU_OPSy # CPU 电源管理操作PSCI其设备树 rock_5b_plus_smp.dts 通过#include rock_5b_plus.dts直接复用基础设备树不重复定义硬件节点。从 SoC 设备树 dts/arm64/rockchip/rk3588.dtsi 可以看到全部 8 个 CPU 节点均已描述cpu0~cpu300为 Cortex-A55cpu400~cpu700为 Cortex-A76且每个节点都使用enable-method psci。PSCI 节点dts/arm64/rockchip/rk3588.dtsi声明为arm,psci-0.2、method smc这正是CONFIG_PM_CPU_OPSy所对接的 CPU 启动/电源管理通道——Zephyr 通过 PSCI SMC 调用唤醒并管理各核心这是 8 核 SMP 得以运行的基础。此外soc/rockchip/rk35/rk3588/Kconfig.defconfig.rk3588 定义了 SoC 级默认参数NUM_IRQS 508对应 RK3588 丰富的 GIC 中断资源系统时钟频率取自设备树/cpus/cpu0的clock-frequency即 24 MHz 的 Cortex-A55 基准频率见 dts/arm64/rockchip/rk3588.dtsi。通过 U-Boot 引导 ZephyrROCK 5B 的常规启动流程由 Radxa U-BootAArch64 Linux 启动路径接管因此需要用legacy U-Boot 镜像Legacy Image打包 Zephyr 固件再由 U-Boot 加载并跳转。第一步生成 legacy 镜像将构建产物zephyr.bin封装为加载地址与入口地址均为0x10000000的 legacy 镜像这与设备树中dram: memory10000000声明的运行区域严格对应mkimage -C none -A arm64 -O linux -a 0x10000000 -e 0x10000000 \ -d build/zephyr/zephyr.bin build/zephyr/zephyr.img参数含义参数含义-C none不压缩负载-A arm64目标架构为 AArch64-O linux操作系统类型标记为 linuxlegacy 镜像约定-a 0x10000000负载应加载到的地址-e 0x10000000入口点地址-d输入数据文件zephyr.bin输出为 zephyr.img第二步准备 FAT 分区与设备树Radxa U-Boot 的 AArch64 Linux 启动路径要求提供 devicetree。请从 Radxa Linux 发行版中获取rk3588-rock-5b-plus.dtb然后将rk3588-rock-5b-plus.dtb与zephyr.img一并拷贝到 U-Boot 可访问的 FAT 分区例如 SD 卡或 eMMC 的 FAT 分区上。第三步查看加载地址环境变量U-Boot 会为临时加载内核与设备树预留地址通过环境变量提供。先查询当前取值printenv kernel_addr_r fdt_addr_r记录输出的kernel_addr_r与fdt_addr_r不同 U-Boot 版本或配置下具体地址可能不同务必以实际打印为准。第四步加载镜像与设备树并 bootm按对应地址加载两个文件并把设备树地址传给bootm-表示跳过 ramdisk。MMC 设备号与分区号需根据实际启动介质调整下面的mmc 1:1表示 MMC 设备 1 的第 1 个分区fatload mmc 1:1 ${kernel_addr_r} zephyr.img fatload mmc 1:1 ${fdt_addr_r} rk3588-rock-5b-plus.dtb bootm ${kernel_addr_r} - ${fdt_addr_r}启动交接原理地址为何如此安排这段流程的背后逻辑值得展开说明bootm读取 legacy 镜像头后会按头部的-a字段把负载从kernel_addr_r搬运到0x10000000再跳转到入口0x10000000执行 ZephyrZephyr 运行时数据区位于0x10000000起的 128 MB 区域内见 rock_5b_plus.dts因此临时镜像、设备树与 Zephyr 运行时区域必须保持分离避免 U-Boot 搬移镜像或 Zephyr 初始化内存时互相覆盖导致启动失败。正是基于这一考虑文档强调“Keeping the temporary image, devicetree, and Zephyr runtime regions separate avoids overwriting any of them during the handoff”——在自定义启动流程如调整kernel_addr_r、改用 TFTP 或 NVMe 加载时务必核对三者地址区间是否重叠。参考资料与延伸阅读板卡文档正文boards/radxa/rock_5b_plus/doc/index.rst板级 BSPboards/radxa/rock_5b_plus/RK3588 SoC 设备树dts/arm64/rockchip/rk3588.dtsiSoC Kconfigsoc/rockchip/rk35/rk3588/Kconfig.defconfig.rk3588官方参考文档Radxa ROCK 5B documentation详见原文References一节关于 RK3588 更详细的硬件手册、引脚复用与 U-Boot 环境说明可查阅 Radxa 官方 ROCK 5B 文档原文链接位于 boards/radxa/rock_5b_plus/doc/index.rst 的 References 部分。【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Pandas进行MySQL数据库CRUD

Pandas进行MySQL数据库CRUD

在数据分析和处理的过程中,MySQL是一种常见的关系型数据库管理系统,而Pandas则是Python中处理数据的强大工具。通过Pandas与MySQL的结合,能够更高效地进行数据的增删改查(CRUD)操作,并为后续的数据分析打下基础。这篇教程旨在介绍如何使用Pandas来连接MySQL数据库并执行基…

2026/9/21 16:42:42 阅读更多 →
使用skimage进行图片读取与存储

使用skimage进行图片读取与存储

在图像处理和计算机视觉领域,Python提供了许多强大的库来帮助程序员进行图片的读取与处理工作。其中,skimage(Scikit-Image)是一个开源的图像处理库,专为科学研究设计。它的功能涵盖了基础的图像处理任务,如图片的读取、过滤、转换、几何变换、颜色处理等,且与NumPy紧密…

2026/9/21 16:42:42 阅读更多 →
使用OpenCV进行图片读取与存储

使用OpenCV进行图片读取与存储

在图像处理和计算机视觉的领域中,OpenCV(Open Source Computer Vision Library)是一个非常流行的开源库。它提供了强大的工具,用于对图像进行处理、分析和操作。无论是简单的图片读取与保存,还是复杂的图像处理算法,OpenCV都能提供丰富的支持。在机器学习和人工智能等多个…

2026/9/21 16:42:42 阅读更多 →

最新新闻

DeepSeek Harness 首次启动引导演进:移除内测 Beta 通知的决策、遥测默认关闭与 settings.onboarding 缝合点设计

DeepSeek Harness 首次启动引导演进:移除内测 Beta 通知的决策、遥测默认关闭与 settings.onboarding 缝合点设计

人工智能AI AgentAgent 框架DeepSeek 【免费下载链接】deepseek-harness DeepSeek Harness: Everything is a Plugin. 项目地址: https://gitcode.com/gh_mirrors/de/deepseek-harness 点击查看 免费下载 本文依据 DeepSeek Harness 仓库中已归档的技术决策记录 20…

2026/9/21 17:09:49 阅读更多 →
Java 21 + Spring Boot 3 构建企业级 RAG 智能体工作流引擎

Java 21 + Spring Boot 3 构建企业级 RAG 智能体工作流引擎

1. 项目概述:为什么在 Java 生态里重做 RAG 智能体工作流不是“倒退”,而是精准卡位别卷 Python 了——这句话不是情绪宣泄,是我在连续交付 7 个 AI 增强型企业系统后的真实判断。过去两年,我带团队用 Python LangChain LangGr…

2026/9/21 17:08:48 阅读更多 →
system.img修改全攻略:格式识别、解包重打包与刷写避坑指南

system.img修改全攻略:格式识别、解包重打包与刷写避坑指南

1. system.img为何要改:先搞清楚这张"系统盘"的脾气玩Android的时间稍微长一点,基本都会遇到这个需求:自带应用删不掉、想加个开机脚本、想把某几个系统应用替换成自己改过的版本、或者单纯想把谷歌全家桶从国行固件里拔掉。这些操…

2026/9/21 17:08:47 阅读更多 →
变频与定频空调负荷聚合模型及Matlab实现

变频与定频空调负荷聚合模型及Matlab实现

1. 项目背景与核心价值在电力系统运行中,空调负荷占比逐年攀升,夏季高峰时段甚至可达总负荷的40%以上。传统控制方式往往将空调视为不可控负荷,导致电网调峰压力巨大。这项研究通过建立空调负荷的精细化控制模型,实现了三点突破&a…

2026/9/21 17:08:46 阅读更多 →
MyBatis与EHCache整合优化数据库性能实践

MyBatis与EHCache整合优化数据库性能实践

1. 为什么需要整合MyBatis与EHCache在数据密集型应用中,数据库访问往往是性能瓶颈的主要来源。我们团队在电商促销系统开发中就深有体会——当秒杀活动开始时,商品详情查询的QPS瞬间从200飙升到8000,直接导致数据库连接池耗尽。这时候&#x…

2026/9/21 17:08:45 阅读更多 →
Spring AI实战:Java开发者快速集成AI能力指南

Spring AI实战:Java开发者快速集成AI能力指南

1. Spring AI初探:当Java生态遇上智能时代Spring框架作为Java开发者最熟悉的老朋友,如今正以全新姿态拥抱AI浪潮。去年我在一个企业级项目中首次尝试将Spring Boot与AI模型集成,原本需要两周开发的智能分类模块,用Spring AI仅用三…

2026/9/21 17:08:43 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →