RT-Thread 在先楫 HPM6P00EVK(RISC-V 双核)上的 BSP 移植与快速上手实战指南
发布时间:2026/9/24 17:05:27 作者:尧图编辑部 阅读量:1,286
上的 BSP 移植与快速上手实战指南)
操作系统嵌入式物联网嵌入式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 仓库中 bsp/hpmicro/hpm6p00evk/README_zh.md 为骨架系统讲解先楫半导体 HPM6P00EVK 开发板的 RT-Thread BSP板级支持包资源、环境搭建、编译烧录、调试方法与板级初始化原理并结合 BSP 目录下的 Kconfig、链接脚本、调试脚本等源码细节进行纵深剖析。读完本文你将能够在 HPM6P00EVK 上从零跑起 RT-Thread 5.x看到启动 Banner 与 LED 闪烁并能按需裁剪外设驱动配置。一、板级资源介绍HPM6P00EVK 是先楫半导体HPMicro推出的一款基于 RISC-V 内核的开发板片上与板上资源丰富官方定位可用于网络互联、音频和电机控制等应用场景。对应 BSP 位于仓库bsp/hpmicro/hpm6p00evk/目标芯片型号为 HPM6P81从 rtconfig.py 中的CHIP_NAMEHPM6P81、SOC_FAMILYHPM6P00以及调试脚本中的hpm6p80-single-core.cfg/hpm6p80-dual-core.cfg可确认该系列 SoC 支持单核与双核两种运行形态。BSP 目录整体结构如下applications/用户应用入口默认的 LED 闪烁示例 main.cboard/板级代码包括 board.c、rtt_board.c、pinmux.c、fal_cfg.h 等以及debug_scripts/OpenOCD 调试脚本、linker_scripts/GCC 链接脚本startup/启动代码含HPM6P81/toolchains/gcc/下的start.S、vectors.S、port_gcc.S与startup.c、trap.cfigures/文档配图顶层Kconfig、SConscript、SConstruct、rtconfig.h、rtconfig.py等为 RT-Thread 标准构建配置文件。二、板载外设支持情况本 BSP 对板载外设的支持情况如下表所示继承自原文档板载外设支持情况备注USB√QSPI Flash√以太网√GPIO√SPI√I2C√AUDIO√PWM√板载调试器√ft22322.1 从 Kconfig 看可裁剪的外设能力除了上表列出的已支持外设board/Kconfig 还揭示了更多片上外设驱动的可配置项它们通过menuconfig图形化界面勾选后即可启用。主要包括UART0UART7每个串口可单独使能支持 RX/TX DMA依赖RT_SERIAL_USING_DMA、串口 v2 缓冲大小配置RX 缓冲范围 6465535默认 128 或 1024与中断优先级范围 17默认 1SPI0SPI3支持 DMA、软/硬件片选BSP_SPIx_USING_SOFT_CS/BSP_SPIx_USING_HARD_CS以及 Single/Dual/Quad IO 模式以太网BSP_USING_ETH使能后会联动RT_USING_ETH、RT_USING_PHY并默认选择 ETH0PHY 为 RTL8211见BSP_USING_ENET_PHY_RTL8211I2C0I2C3、GPTMR03、MCAN03CAN、ADC16ADC03、PWMPWMV2均可独立开关并配置中断优先级音频BSP_USING_DAO播放、BSP_USING_PDM录音、BSP_USING_I2SI2S 设备板上 CODEC 为 WM8960见 hpm_wm8960.cXPI FLASH使能后联动RT_USING_FAL配合 fal_cfg.h 中的 FAL 分区表使用USB可分别使能 Device/Host二者都会自动打开RT_USING_CACHEEWDG硬件看门狗联动RT_USING_WDT。从源码结构看Kconfig 中这些开关与 rtconfig.h 生成宏一一对应开发者完全可以按项目需求裁剪出最小系统或全功能系统。三、快速上手指南本 BSP 支持通过scons命令完成编译。开始之前需要先准备好开发所需的环境。3.1 准备环境步骤 1准备 RT-Thread ENVRT-Thread ENV 是 RT-Thread 官方的命令行开发环境工具集成了menuconfig、scons等构建工具链可从 RT-Thread 官方下载页面获取对应工具的使用说明可参考仓库 documentation 目录下的相关文档。步骤 2准备 RISC-V 32 位 GCC 工具链下载riscv32-gnu-toolchain如 2022.04.12 版本解压到指定目录例如C:\DevTools\riscv32-gnu-toolchain步骤 3设置工具链环境变量将环境变量RTT_RISCV_TOOLCHAIN指向工具链的bin目录RTT_RISCV_TOOLCHAIN C:\DevTools\riscv32-gnu-toolchain\bin这一步与 rtconfig.py 的解析逻辑吻合构建脚本会优先读取RTT_RISCV_TOOLCHAIN环境变量作为交叉编译器路径EXEC_PATH os.getenv(RTT_RISCV_TOOLCHAIN)若未设置则回退到RTT_EXEC_PATH再回退到默认路径/opt/riscv-gnu-gcc/bin。工具链前缀为riscv32-unknown-elf-目标文件扩展名为elf。步骤 4准备 OpenOCDHPMicro 版下载 HPMicro 定制的 OpenOCD 调试器支持包如 v0.4.0解压到指定目录例如C:\DevTools\openocd-hpmicro将环境变量OPENOCD_HPMICRO设置为OPENOCD_HPMICRO C:\DevTools\openocd-hpmicro\bin该 OpenOCD 与 BSP 内 board/debug_scripts/openocd 目录下的配置脚本配套使用其中probes/提供了 ft2232、ft232、jlink、cmsis_dap、nds_aice_micro 等多种调试探针配置soc/提供hpm6p80-single-core.cfg与hpm6p80-dual-core.cfg两种内核形态配置。3.2 配置和构建工程通过 RT-Thread ENV 命令行切换到当前 BSP 所在目录bsp/hpmicro/hpm6p00evk后使用menuconfig命令配置 RT-Thread BSP 的功能外设开关、内核选项等均在此完成使用scons -jN完成构建其中N最大可指定为 CPU 的物理核心数使用scons -c清除构建产物。构建完成后会在 BSP 根目录生成rtthread.elf与rtthread.binrtconfig.py 中的POST_ACTION会在链接后用objcopy自动生成 bin 文件并打印size信息。3.3 硬件连接将 BOOT 引脚拨到2b00从 XPI Flash 启动通过 TYPE-C 线将板上的PWR_DEBUG接口连接到电脑该接口同时承担供电、板载调试器 ft2232 与调试串口的职责。3.4 下载与调试下载固件在 ENV 命令行执行如下命令一次完成擦除、烧写、复位与退出%OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm6p80-single-core.cfg -f boards\debug_scripts\boards\hpm6p00evk.cfg -c init; halt; flash write_image erase rtthread.elf; reset; shutdown命令中依次加载了三类脚本探针脚本ft2232、SoC 脚本hpm6p80 单核模式与板级脚本hpm6p00evk然后通过-c参数下发 OpenOCD 命令完成整条烧录流程。调试分两步先启动 OpenOCD 连接开发板不退出保持会话%OPENOCD_HPMICRO%\openocd.exe -f boards\debug_scripts\probes\ft2232.cfg -f boards\debug_scripts\soc\hpm6p80-single-core.cfg -f boards\debug_scripts\boards\hpm6p00evk.cfg再启动 GDB 连接 OpenOCD 进行调试%RTT_EXEC_PATH%\riscv32-unknown-elf-gdb.exe rtthread.elf在 GDB Shell 中依次输入如下命令加载并运行程序load c值得一提的细节板级 OpenOCD 脚本 hpm6p00evk.cfg 定义了 XPI0 Flash bank基址0x80000000容量0x2000000并在reset-init事件中通过 RISC-V DMI 写寄存器来使能各时钟域在gdb-attach事件中自动执行reset halt——这也解释了为什么下载命令中的flash write_image能直接以rtthread.elf为输入完成烧写。四、运行结果固件成功下载后程序会自动运行板载 LED 会周期性闪烁。将板卡串口连接到电脑使用串口终端工具串口配置为115200, 8-N-1并按复位键后串口终端会打印 RT-Thread 启动信息\ | / - RT - Thread Operating System / | \ 5.2.2 build Aug 16 2025 18:18:18 2006 - 2025 Copyright by RT-Thread team控制台默认设备为uart0见 rtconfig.h 中的RT_CONSOLE_DEVICE_NAME uart0BSP 同时使能了 MSH/Finsh ShellRT_USING_MSH、RT_USING_FINSH因此启动后可以直接在串口终端中使用list、ps、help等 RT-Thread 命令行交互。4.1 LED 闪烁示例的源码逻辑默认示例 applications/main.c 的逻辑非常清晰main()先调用app_init_led_pins()初始化 LED 引脚然后创建名为led_th的线程栈 1024 字节、优先级 1、时间片 10在线程入口中通过app_led_write()循环翻转 LED0 的亮灭状态每 500ms 切换一次。而app_led_write/app_init_led_pins的实现位于 board/rtt_board.c最终调用 HPM SDK 的gpio_write_pin()接口操作 GPIO0 的 PA25 引脚LED 定义见 board.h 中的BOARD_LED_GPIO_CTRL/BOARD_LED_GPIO_PIN。这为开发者编写自己的点灯、按键等 GPIO 应用提供了现成的模板。五、板级初始化流程与底层原理要深入理解这个 BSP可以顺着 rtt_board.c 的启动路径梳理板级初始化rt_hw_board_init()RT-Thread 内核启动后首先调用内部转调rtt_board_init()随后执行rt_components_board_init()完成组件级板载初始化rtt_board_init()依次完成——board_init_clock()系统时钟初始化、board_init_console()控制台初始化、board_init_pmp()PMP/PMA 内存保护与不可缓存内存配置、dma_mgr_init()DMA 管理器、rt_system_heap_init()堆初始化、os_tick_config()系统节拍配置、rt_hw_uart_init()串口驱动先于其他驱动初始化以便使用rt_kprintf、rt_console_set_device()设置控制台设备os_tick_config()将 MCHTMR0 挂到 CPU0 并配置比较值BOARD_MCHTMR_FREQ_IN_HZ / RT_TICK_PER_SECOND使能 MCHTMR 中断mchtmr_isr()作为 OS Tick 中断服务函数更新比较值并调用rt_tick_increase()驱动 RT-Thread 内核时钟。此外rtt_board.c 还通过MSH_CMD_EXPORT_ALIAS(rt_hw_cpu_reset, reset, reset the board)导出了reset命令开发者可在 Finsh Shell 中直接输入reset软复位开发板。5.1 内存布局与链接脚本BSP 提供三种 GCC 链接脚本board/linker_scripts/gccflash_rtt.ldFlash XIP 启动默认、flash_rtt_enet.ld带以太网、ram_rtt.ldRAM 调试运行。以flash_rtt.ld为例其内存区域划分清晰体现了 HPM6P8x 的存储架构区域起始地址默认长度说明XPI00x800000001M片外 XPI Flash可执行XIPILM0x00000000128K指令本地内存DLM0x00200000128K数据本地内存NONCACHEABLE_RAM0x01200000128K不可缓存内存AXI_SRAM0x01220000128KAXI SRAMbss/data/堆栈主战场AHB_SRAM0xF020000032KAHB SRAM链接脚本还在.fast段中通过KEEP()将 RT-Thread 内核关键对象context、port、irq、clock、scheduler、thread、ipc、timer、mem 等以及drv_*.o驱动放置到 ILM 中运行并把 Finsh 符号表FSymTab/VSymTab、自动初始化段SORT(.rti_fn*)、模块符号表RTMSymTab、USB Host 类信息段等 RT-Thread 特有段完整布局到 Flash 中。这正是 RT-Thread 的自动初始化机制INIT_BOARD_EXPORT等宏能够在此 BSP 上正常工作的链接层保证。5.2 Flash 分区与 FAL启用 XPI FLASHBSP_USING_XPI_FLASH后会自动引入 FAL 组件。fal_cfg.h 定义了名为norflash0的 Flash 设备基址0x80000000、大小0x1000000并预置了 4 个分区分区名起始偏移大小app0256KBeasyflash256KB256KBdownload512KB256KBflashdb768KB256KB配合 FAL 的在线升级、参数存储等能力开发者可以在menuconfig中开启FAL_PART_HAS_TABLE_CFG后按需调整该分区表。5.3 默认内核与外设配置速览rtconfig.h 是menuconfig的产物从当前默认配置可以看出该 BSP 的开箱状态内核优先级数 32、RT_TICK_PER_SECOND 1000、软件定时器线程优先级 4栈 1KB、空闲线程栈 1KB、使能 CPU 使用率统计RT_USING_CPU_USAGE_TRACER计算间隔 200msIPC信号量、互斥量、事件、邮箱、消息队列全部开启内存RT_USING_SMALL_MEM_AS_HEAP小内存管理算法作为堆组件MSH/Finsh Shell 开启历史 5 条、命令长度 80、参数上限 10、RT_USING_USER_MAIN与RT_USING_COMPONENTS_INIT开启主线程栈 2KB、优先级 10驱动串口 v2RT_USING_SERIAL_V2DMA 使能、GPIORT_USING_PINSDK使能 HPMicro SDK 软件包PKG_USING_HPM_SDK版本 V110。这些默认值均可通过menuconfig按需调整例如修改BSP_UART0_RX_BUFSIZE改变调试串口接收缓冲或关闭RT_USING_CPU_USAGE_TRACER换取更低的运行时开销。六、小结与延伸总体来看HPM6P00EVK 的 RT-Thread BSP 是一个开箱即用、裁剪方便的成熟移植环境变量与构建脚本衔接顺畅RTT_RISCV_TOOLCHAINOPENOCD_HPMICRO一条 OpenOCD 命令即可完成烧录OpenOCD/GDB 组合提供了标准的调试链路而 Kconfig 把 GPIO、UART、SPI、I2C、以太网、USB、音频、PWM、CAN、ADC 等丰富外设全部纳入了图形化配置。在此基础上你还可以进一步探索仓库内其他先楫 BSPbsp/hpmicro/下包含 hpm5300evk、hpm6200evk、hpm6750evk 等多个系列目录结构与本 BSP 高度一致对比不同系列的引脚定义与链接脚本差异也可以结合仓库components/drivers中的串口、SPI、I2C 等设备驱动框架理解 RT-Thread 设备模型在 HPM 平台上的落地方式从而快速开启自己的网络互联、音频或电机控制项目。赞分享操作系统嵌入式物联网嵌入式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 先楫 HPM6750EVK BSP 快速上手与进阶实践基于 RISC-V 双核 MCU 的板级移植与驱动开发指南RT Thread 先楫 HPM6750EVK BSP 快速上手与进阶实践基于 RISC V 双核 MCU 的板级移植与驱动开发指南 本指南以 RT Thre操作系统嵌入式物联网嵌入式OSRTOSRT-Thread HPM6750EVKMINI BSP 快速上手先楫双核 RISC-V 开发板的构建、下载与调试实战RT Thread HPM6750EVKMINI BSP 快速上手先楫双核 RISC V 开发板的构建、下载与调试实战 本篇技术指南以 RT Thread 仓操作系统嵌入式物联网嵌入式OSRTOSRT-Thread 在 HPM6200EVK 上的实践先楫 RISC-V 电机控制开发板 BSP 快速上手指南RT Thread 在 HPM6200EVK 上的实践先楫 RISC V 电机控制开发板 BSP 快速上手指南 本篇技术指南以 RT Thread 官方仓库中操作系统嵌入式物联网嵌入式OSRTOS上一篇lxmusic-source-all开源音乐音源汇总工具一个仓库收齐20多个音源下一篇DayZ 单机离线模组 3 分钟装好练枪、拍片、调世界全都能离线干创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考