ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Zephyr RTOS 在 Khadas Edge-V(RK3399)上的移植与启动指南

Zephyr RTOS 在 Khadas Edge-V(RK3399)上的移植与启动指南 Zephyr RTOS 在 Khadas Edge-VRK3399上的移植与启动指南【免费下载链接】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 仓库中 Khadas Edge-V 板级支持文档 为核心系统讲解在 Khadas Edge-V 单板计算机基于 Rockchip RK3399 SoC、ARM64 架构上构建、打包并启动 Zephyr 应用以hello_world为例的完整流程。读完本文你将掌握该板的硬件资源与串口布局、Non-SMP 模式下的构建配置以及通过 U-Boot 将 Zephyr 镜像加载到 DDR 并引导运行的具体命令。板卡概览Khadas Edge-V 与 RK3399Khadas Edge-V 是 Khadas 推出的一款单板计算机SBC属于 Edge 系列中的 VVim 风格变体。其完整硬件资料可参阅 Khadas 官方文档Edge-V 产品页与 Edge 1 硬件文档本文不展开转载外部内容。从 board.yml 可以看到 Zephyr 对该板的官方定义board: name: khadas_edgev full_name: Edge-V vendor: khadas socs: - name: rk3399而 khadas_edgev.yaml 则明确了该板在 Zephyr 构建系统中的关键属性identifier: khadas_edgev name: Khadas Edge-V (single core, non SMP) type: mcu arch: arm64 toolchain: - zephyr - cross-compile ram: 8192 vendor: khadas几个关键点架构与工具链板级标识为khadas_edgev架构为arm64同时支持 Zephyr SDK 自带工具链zephyr与通用交叉编译工具链cross-compile内存资源ram: 8192表示板卡具备 8 GB DDR 内存Zephyr 镜像正是被加载进这段 DDR 中运行的单核模式板名中明确标注 single core, non SMP——本板移植当前仅启用 RK3399 的单个 Cortex-A72 核心不启用 SMP 多核调度。SoC 与板级代码的关联Kconfig.khadas_edgev 通过一行select SOC_RK3399将板卡与 Rockchip 的 RK3399 SoC 绑定。该符号在 soc/rockchip/rk3399/Kconfig.soc 中逐级展开config SOC_RK3399 bool select SOC_SERIES_RK3399 config SOC_SERIES_RK3399 bool select SOC_FAMILY_ROCKCHIP config SOC default rk3399 if SOC_RK3399 config SOC_SERIES default rk3399 if SOC_SERIES_RK3399由此形成BOARD_KHASAD_EDGEV → SOC_RK3399 → SOC_SERIES_RK3399 → SOC_FAMILY_ROCKCHIP的完整 Kconfig 依赖链构建系统据此自动选择 RK3399 的 SoC 移植代码、设备树与链接脚本。硬件特性与串口控制台Supported Features该板的支持特性由文档中的zephyr:board-supported-hw指令在文档生成阶段自动展开依据 khadas_edgev.dts 中的设备树节点生成。板级设备树的关键配置如下/dts-v1/; #include rockchip/rk3399.dtsi / { model Khadas Edge-V; compatible khadas,edgev; chosen { zephyr,sram sram0; zephyr,console uart2; zephyr,shell-uart uart2; }; cpus { /delete-node/ cpu1; /delete-node/ cpu2; /delete-node/ cpu3; /delete-node/ cpu4; /delete-node/ cpu5; }; }; uart2 { status okay; };值得注意的实现细节串口控制台板上有多个串口Zephyr 选用uart2作为串口控制台zephyr,console与 shell 串口zephyr,shell-uart且设备树中显式将uart2状态置为okay单核裁剪cpus节点通过/delete-node/删除了cpu1至cpu5共 5 个核仅保留cpu0从设备树层面固化了 Non-SMP 单核 的移植定位这与板名中 single core, non SMP 的描述完全一致。板级默认配置defconfigkhadas_edgev_defconfig 提供了运行 Zephyr 所需的最小化平台配置# Platform Configuration CONFIG_ARM64_VA_BITS_40y CONFIG_ARM64_PA_BITS_40y CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC24000000 CONFIG_CACHE_MANAGEMENTy CONFIG_ARMV8_A_NSy # Serial Drivers CONFIG_SERIALy CONFIG_UART_INTERRUPT_DRIVENy # Enable Console CONFIG_CONSOLEy CONFIG_UART_CONSOLEy逐项含义配置项作用CONFIG_ARM64_VA_BITS_40/CONFIG_ARM64_PA_BITS_40将 ARM64 虚拟地址与物理地址宽度限定为 40 位匹配 RK3399 的地址空间能力CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC24000000系统时钟硬件周期频率 24 MHz供内核周期计数与超时机制使用CONFIG_CACHE_MANAGEMENTy启用缓存管理Cache Management支持缓存维护操作CONFIG_ARMV8_A_NSy以 ARMv8-A 非安全Non-Secure模式运行CONFIG_SERIALyCONFIG_UART_INTERRUPT_DRIVENy启用串口驱动及中断驱动模式CONFIG_CONSOLEyCONFIG_UART_CONSOLEy启用内核控制台并通过 UART 输出构建 Zephyr 应用Non-SMP 模式按官方文档使用如下配置即可在 Khadas Edge-V 上运行基础 Zephyr 应用与内核测试。以hello_world为例west build -b khadas_edgev samples/hello_world等价地也可使用cmake直接构建cmake -DBOARDkhadas_edgev -B build samples/hello_world cmake --build build说明上述命令面向 Unix 主机环境host-os: unix要求已安装 Zephyr SDK 或等效的 ARM64 交叉编译工具链。文档原文指出 This will build an image with the synchronization sample app从仓库现状看samples/hello_world生成的是经典 Hello World 镜像其启动横幅与输出即本文后续展示的内容。生成可启动的 U-Boot 镜像Zephyr 直接产出 ELF 与zephyr.bin原始二进制。由于 RK3399 由 U-Boot 负责引导需要先用mkimage将裸二进制封装为 U-Boot 可识别的镜像格式mkimage -C none -A arm64 -O linux -a 0x10000000 -e 0x10000000 -d build/zephyr/zephyr.bin build/zephyr/zephyr.img参数拆解参数含义-C none不使用压缩-A arm64目标架构为 ARM64-O linux操作系统类型标记为 LinuxU-Boot 引导约定-a 0x10000000镜像加载地址 0x10000000DDR 起始区段-e 0x10000000入口点地址与加载地址一致-d build/zephyr/zephyr.bin输入Zephyr 构建产物原始二进制build/zephyr/zephyr.img输出U-Boot 镜像通过 U-Boot 引导 Zephyr从网络TFTP加载并启动板卡上电进入 U-Boot 后可通过 TFTP 将zephyr.img下载到 DDR 并引导tftpboot ${pxefile_addr_r} zephyr.img; bootm start ${pxefile_addr_r}; bootm loados; bootm go执行流程tftpboot ${pxefile_addr_r} zephyr.img通过 TFTP 将镜像下载到pxefile_addr_r所指向的 DDR 缓冲区bootm start ${pxefile_addr_r}启动 bootm 流程解析镜像头bootm loados将操作系统镜像此处即 Zephyr加载到其声明的加载地址 0x10000000bootm go跳转到入口点 0x10000000将控制权交给 Zephyr 内核。预期控制台输出引导成功后串口控制台uart2将输出 Zephyr 启动横幅与应用输出*** Booting Zephyr OS build XXXXXXXXXXXX *** Hello World! khadas_edgev其中XXXXXXXXXXXX为实际构建的版本字符串Hello World! khadas_edgev表明应用运行于khadas_edgev板。Flashing镜像的加载途径Zephyr 镜像可被加载到 DDR 地址0x10000000加载来源包括SD 卡SD Card将zephyr.img放入 SD 卡文件系统由 U-Boot 读取并加载EMMC烧写至板载 eMMC 存储U-Boot 从中读取QSPI Flash烧写至 SPI NOR FlashU-Boot 从中读取网络Network即上文介绍的 TFTP 方式在 U-Boot 中从网络下载。由于 RK3399 的 U-Boot 具备从上述介质引导的能力Zephyr 镜像无需烧写 Flash 也能以 下载即运行 的方式快速验证非常适合内核与驱动的迭代调试。参考资料与延伸阅读本文核心依据Khadas Edge-V 板级文档板级 KconfigKconfig.khadas_edgev板级设备树khadas_edgev.dts板级默认配置khadas_edgev_defconfigRK3399 SoC 移植soc/rockchip/rk3399/Kconfig.soc同系列板卡Edge2文档boards/khadas/edge2/doc/index.rstKhadas 板卡文档索引boards/khadas/index.rst如需了解 RK3399 SoC 层的时钟、串口等外设实现可继续查阅soc/rockchip/rk3399/目录下的源码实际硬件规格如引脚定义、供电、启动介质开关请以 Khadas 官方硬件文档为准。【免费下载链接】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),仅供参考
返回列表