ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

RT-Thread Rockchip RK3500 系列 BSP:工具链搭建、SCons 编译与 U-Boot 引导启动实战

RT-Thread Rockchip RK3500 系列 BSP:工具链搭建、SCons 编译与 U-Boot 引导启动实战 操作系统嵌入式物联网嵌入式OSRTOS【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址https://gitcode.com/gh_mirrors/rt/rt-thread点击查看免费下载本文基于 RT-Thread 仓库中 RK3500 BSP 使用文档 展开系统讲解如何在 ARMv8/AArch64 架构的瑞芯微 RK35xx 系列 SoCRK3566/RK3568/RK3576 等上使用 RT-Thread Smart 专用工具链完成 RT-Thread 的下载、编译与启动。读完后你将掌握BSP 支持矩阵与 earlycon 调试串口配置、RTT_CC/RTT_EXEC_PATH/RTT_CC_PREFIX环境变量的作用、scons --menuconfig 软件包拉取的完整编译流程以及通过 U-Bootfatload/booti命令从 SD 卡引导rtthread.bin的实操步骤与启动日志解读。1. 支持芯片列表与调试串口Earlycon配置RK3500 BSP 位于 bsp/rockchip/rk3500 目录其 Kconfig 中定义了目标架构选型默认启用以下关键选项见 Kconfigconfig SOC_RK3500 bool select ARCH_ARMV8 select ARCH_CPU_64BIT select ARCH_ARM_MMU select RT_USING_CACHE select RT_USING_COMPONENTS_INIT select RT_USING_USER_MAIN select RT_USING_STDC_ATOMIC default y从源码结构看该 BSP 面向 64 位 Cortex-A 大核、带 MMU 的 SoC 设计并强制开启了缓存一致性支持RT_USING_CACHE、组件自动初始化RT_USING_COMPONENTS_INIT和用户态main入口RT_USING_USER_MAIN这些与后文启动日志中出现的msh /命令行及Hi, this is RT-Thread!!来自 applications/main.c一一对应。BSP 文档给出的 SoC 支持矩阵如下RK3562 与 RK3506 尚未支持SoC支持情况EarlyconRK3576支持earlyconuart8250,mmio32,0x2ad40000RK3588支持earlyconuart8250,mmio32,0xfeb50000RK3562--RK3568J支持earlyconuart8250,mmio32,0xfe660000RK3568支持earlyconuart8250,mmio32,0xfe660000RK3566支持earlyconuart8250,mmio32,0xfe660000RK3528支持earlyconuart8250,mmio32,0xff9f0000RK3506--表中earlycon参数指向各芯片上调试 UART 的物理基地址例如 RK3566/RK3568/RK3568J 均为0xfe660000RK3576 为0x2ad40000。这个值需要在设备树chosen.bootargs中配置启动早期控制台由此输出日志中即可看到[I/rtdm.ofw] Earlycon: uart8250 at MMIO/PIO 0x00000000fe660000。仓库中还有一份补充文档 Taishanpi-RK3566_CN.md详细给出了chosen节点与fiq-debugger节点的设备树写法示例含rockchip,baudrate 1500000等参数可作为设备树配置参照。2. 编译环境RT-Thread Smart 专用工具链RK3500 BSP 使用 RT-Thread Smart 专用 AArch64 musl 工具链。工具链解析逻辑位于 rtconfig.py关键实现如下ARCH aarch64 CPU cortex-a CROSS_TOOL gcc if os.getenv(RTT_CC): CROSS_TOOL os.getenv(RTT_CC) PLATFORM gcc EXEC_PATH os.getenv(RTT_EXEC_PATH) or /usr/bin ... PREFIX os.getenv(RTT_CC_PREFIX) or aarch64-none-elf- CC PREFIX gcc可以看到三个环境变量与源码的对应关系RTT_CCgcc决定交叉工具类别对应CROSS_TOOLRTT_EXEC_PATH指向工具链bin目录对应EXEC_PATHRTT_CC_PREFIX交叉编译器前缀如aarch64-linux-musleabi-拼接出gcc/ar/objcopy等工具全名默认回退为aarch64-none-elf-。此外rtconfig.py 中针对 Cortex-A53/A72 大核固定了编译参数DEVICE -g -mcpucortex-a53 -fdiagnostics-coloralways并以-nostartfiles、-u,system_vectors、-T link.lds方式链接最终POST_ACTION生成rtthread.bin并打印 md5。按文档操作下载并解压工具链到/optwget https://github.com/RT-Thread/rt-thread/releases/download/v5.2.0/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu_242520-979be38cba.tar.bz2 sudo tar -xf aarch64-linux-musleabi_for_x86_64-pc-linux-gnu_242520-979be38cba.tar.bz2 -C /opt然后设置环境变量可整体粘贴执行export RTT_CCgcc export RTT_EXEC_PATH/opt/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin/ export RTT_CC_PREFIXaarch64-linux-musleabi- export PATH$RTT_EXEC_PATH:$PATH3. 编译流程menuconfig 配置、软件包拉取与 scons 构建进入rt-thread/bsp/rockchip/rk3500目录后执行scons --menuconfig在菜单中选择并拉取 zlib 软件包BSP 构建过程依赖该压缩库随后执行以下命令拉取软件包并编译source ~/.env/tools/scripts/pkgs --update scons编译入口是 SConscript它遍历 BSP 目录子目录applications、driver收集源文件并额外挂载上层../dmDevice Model驱动目录objs objs SConscript(cwd /../dm/SConscript, variant_dir dm, duplicate 0)dm目录即瑞芯微系列 SoC 的公共设备驱动层其 Kconfig 中声明了 ADC、音频、CAN、时钟clk、DVFS、网口、显示帧缓冲、硬件加密、hwspinlock、硬件定时器、I2C、Mailbox、MFD、NVMEM、PCI、Phy、Pinctrl、PWM、Regulator、RTC、SDIO、SPI、热管理、UFS、看门狗等完整驱动模块。其中时钟驱动按芯片拆分为 clk-rk3528.c、clk-rk3568.c、clk-rk3576.c、clk-rk3588.c与第 1 节的支持矩阵相互印证。BSP 自身的板级初始化 driver/board.c 只有三行rt_hw_board_init直接调用rt_hw_common_setup完成通用初始化体现了 BSP 精简、依赖 dm 驱动层的设计。编译成功后当前目录生成rtthread.elf与rtthread.bin镜像供 SD 卡启动使用。4. 运行SD 卡引导与 U-Boot 命令行启动不同板卡有不同的内核安装方法文档推荐安装到 SD 卡并以 Orange Pi Compute Module 4RK3566为例说明。步骤 1连接开发板串口。打开串口工具选择对应串口设置波特率为1500000与设备树fiq-debugger节点的rockchip,baudrate一致。步骤 2将编译生成的rtthread.bin放置到 SD 卡FAT 分区中。步骤 3开发板上电按ctrl c中断自动引导进入 U-Boot 命令行步骤 4执行以下指令从 SD 卡加载镜像并启动 RT-Thread Smart 系统fatload mmc 1:1 0x480000 rtthread.bin;booti 0x480000 - 0x8300000命令含义fatload从 SD 卡mmc 1:1FAT 分区读取rtthread.bin到内存地址0x480000booti以0x480000为内核入口启动第三个参数指定设备树 blob 位于0x8300000即 U-Boot 自身加载时保留的 DTB 位置。注意booti要求内存中存在有效设备树。若未加载 DTB 会得到Could not find a valid device tree错误Taishanpi-RK3566_CN.md 给出了完整排错过程——需将板卡对应的.dtb文件一并拷入 SD 卡用fatload加载到0x8300000后再执行booti且每次引导失败后应完全断电再上电清空内存。启动日志解读正常启动的输出节选及含义如下reading rtthread.bin 1188080 bytes read in 102 ms (11.1 MiB/s) Fdt Ramdisk skip relocation ## Flattened Device Tree blob at 0x08300000 Booting using the fdt blob at 0x08300000 ... DO RELOCATE Kernel from 0x00280000 to 0x00480000 Starting kernel ... [I/rtdm.ofw] Booting RT-Thread on physical CPU 0x0 [I/rtdm.ofw] Machine model: Rockchip RK3566 Orange Pi CM4 Board [I/rtdm.ofw] Earlycon: uart8250 at MMIO/PIO 0x00000000fe660000 (options ) [I/rtdm.ofw] Memory node(1) ranges: 0x0000000000200000 - 0x0000000008400000 [I/mm.memblock] 4191 MB memory installed to system page [I/osi.psci] Using PSCI v1.1 Function IDs [I/clk.rk3568] set cpu_freq to 1800000000 [I/rtdm.ofw] Console: uart0 (fiq-debugger) \ | / - RT - Thread Smart Operating System / | \ 5.2.1 build Apr 28 2025 09:19:08 lwIP-2.1.2 initialized! [I/sal.skt] Socket Abstraction Layer initialize success. [I/drivers.serial] Using /dev/ttyS0 as default console Hi, this is RT-Thread!! I/TC: Secondary CPU 1 initializing [I/cpu.aa64] Call cpu 1 on success msh /各关键行的含义Machine model行确认 U-Boot 传递的设备树属于目标板卡此例为 RK3566 Orange Pi CM4说明该 BSP 被 RK356x 家族板卡共用Earlycon: uart8250 at MMIO/PIO 0xfe660000表示第 1 节支持矩阵中的 earlycon 参数生效[I/mm.memblock]段解析 DTB 的 memory 节点扣除reserved-memoryramoops、CMA 等保留区后最终4191 MB memory installed to system page表示约 4 GB 内存被装入系统页管理[I/osi.psci] Using PSCI v1.1 Function IDs表明 SMP 通过 PSCI 固件接口实现随后Secondary CPU 1/2/3 initializing ... Call cpu x on success即三个次核被逐个拉起完成四核启动[I/clk.rk3568] set cpu_freq to 1800000000来自 clk-rk3568.c 时钟驱动将 CPU 频率设为 1.8 GHzlwIP-2.1.2 initialized!与[I/sal.skt]表示网络协议栈和 Socket 抽象层就绪最终停在msh /提示符可执行 shell 命令。5. 小结RK3500 BSP 是 RT-Thread Smart 面向瑞芯微 RK35 系列 AArch64 SoC 的板级支持包其工程特点是BSP 目录本身非常精简板级初始化仅调用rt_hw_common_setup驱动能力集中在上层 dm 设备模型目录中按 Kconfig 可选编译编译侧通过RTT_CC/RTT_EXEC_PATH/RTT_CC_PREFIX三个环境变量与 rtconfig.py 解耦工具链路径运行侧完全依托板载 U-Boot用一条fatload; booti命令即可从 SD 卡引导rtthread.bin并通过 earlycon/fiq-debugger 串口1500000 波特率获得从 U-Boot、设备树解析、内存管理到 SMP 拉核的完整启动日志便于逐段验证系统状态。赞分享操作系统嵌入式物联网嵌入式OSRTOS【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址https://gitcode.com/gh_mirrors/rt/rt-thread点击查看免费下载相关推荐Rockchip RK35xx(RK3500 BSP)上编译与启动 RT-Thread Smart 的完整实践Rockchip RK35xx RK3500 BSP 上编译与启动 RT Thread Smart 的完整实践 本文围绕 Rockchip RK3500 BSP操作系统嵌入式物联网嵌入式OSRTOSRT-Thread Rockchip RK3300 BSPaarch64 工具链配置与 scons 完整构建指南RT Thread Rockchip RK3300 BSPaarch64 工具链配置与 scons 完整构建指南 本篇指南基于 RT Thread 仓库中的操作系统嵌入式物联网嵌入式OSRTOSRT-Thread 瑞萨 RA 系列 BSP 制作实战基于 FSP 与 Scons 构建可发布的板级支持包RT Thread 瑞萨 RA 系列 BSP 制作实战基于 FSP 与 Scons 构建可发布的板级支持包 本文以 RT Thread 仓库自带的《RA 系列操作系统嵌入式物联网嵌入式OSRTOS上一篇ansible-elasticsearch升级实战从7.x到8.x的平滑过渡方案下一篇Move 标准库 0x1::offer 模块详解用 Offer 资源实现两笔交易跨账户转移数据创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表