首页/新闻资讯/正文详情

RT-Thread BSP 解析:NXP i.MX6 SoloX(i.MX6UL)SABRE 开发板的移植与构建

发布时间:2026/9/26 7:36:33 来源:云帆数科 栏目:资讯中心
RT-Thread BSP 解析:NXP i.MX6 SoloX(i.MX6UL)SABRE 开发板的移植与构建
操作系统嵌入式物联网嵌入式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点击查看免费下载NXP i.MX6 SoloX 是面向智能设备推出的异构双核应用处理器RT-Thread 在bsp/nxp/imx/imx6ul目录下提供了完整的板级支持包BSP。本文以该 BSP 的官方 READMEbsp/nxp/imx/imx6ul/README.md为核心骨架结合仓库内真实的启动代码、驱动实现与构建脚本深入讲解该平台的硬件资源、BSP 目录结构、GCC 构建流程、MMU 内存映射、EPIT 定时器与 UART 驱动实现帮助读者掌握在 SABRE 开发板上运行 RT-Thread 的完整技术路径并为自行移植 Cortex-A 系列 BSP 提供可复用的范式。硬件平台概览SABRE 板与 i.MX6 SoloX 处理器根据官方 README 的描述本 BSP 面向 Freescale现 NXP的 Smart Application Blueprint for Rapid EngineeringSABRE智能设备开发板硬件版本为 Rev.B主控芯片型号为 MCIMX6X4EVM10AB即 i.MX6 SoloXi.MX6SX应用处理器。该平台的核心硬件资源如下硬件类别具体配置应用处理器APARM Cortex-A9主频 1 GHz实时处理器RPARM Cortex-M4主频 200 MHz电源管理Freescale PF0200 PMIC内存1 GB DDR3存储32 MB × 2 QuadSPI Flash传感器Freescale MMA8451 三轴加速度计、Freescale MAG3110 三维磁力计i.MX6 SoloX 的典型特征在于其异构双核架构Cortex-A9 应用核运行 Linux 或 RT-Thread 等具备 MMU 能力的大型操作系统Cortex-M4 实时核则承担对实时性要求苛刻的任务两核间通过共享内存等机制协作。本仓库的 RT-Thread BSP 运行于 Cortex-A 侧rtconfig.h中SOC_MCIMX6X4、ARCH_ARM、ARCH_ARM_MMU、ARCH_ARM_CORTEX_A等宏见 bsp/nxp/imx/imx6ul/rtconfig.h从侧面印证了这一点该移植基于带 MMU 的 Cortex-A 内核。值得注意的是rtconfig.h同时定义了ARCH_ARM_CORTEX_A7与RT_USING_GIC_V2GICv2 中断控制器而构建脚本rtconfig.py中使用了-mtunecortex-a9的编译调优参数因此从源码结构看该 BSP 的代码同时兼容/覆盖了 i.MX6UL/6ULL 系列 Cortex-A7 内核与 SoloX 的 Cortex-A9 内核读者在实际使用时应以自己板卡的 CPU 型号为准核对相关宏。BSP 目录结构一个 Cortex-A BSP 的标准布局bsp/nxp/imx/imx6ul遵循 RT-Thread BSP 的标准布局顶层文件与子目录分工明确applications/应用入口与启动代码包含application.c应用初始化与startup.cRT-Thread 启动流程drivers/板级驱动包括board.c定时器与板级初始化、board.h、serial.c/serial.hUART 串口驱动以及iomux/引脚复用配置Kconfig、SConscript、SConstructmenuconfig 配置入口与 scons 构建脚本Makefile备用构建入口link.ldsGCC 链接脚本定义代码段、只读数据段、初始化函数表、页表与 BSS 的布局rtconfig.h由 menuconfig 生成的最终内核配置rtconfig.pyGCC 工具链与编译参数定义README.md板级硬件说明本文的核心依据。在驱动层面drivers/imx6ul.h定义了本 BSP 的中断基础设施通过协处理器指令mrc p15, 4, ...读取 Cortex-A 的 CBAR 寄存器获得 GIC通用中断控制器基址再叠加kGICDBaseOffset/kGICCBaseOffset得到 Distributor 与 CPU Interface 基址drivers/imx6ul.h。ARM_GIC_MAX_NR、MAX_HANDLERS等宏则确定了 GIC 与中断向量表的容量供 RT-Thread 的中断管理框架使用。构建环境scons 构建流程与依赖包检查该 BSP 采用 scons 构建入口脚本为SConstructbsp/nxp/imx/imx6ul/SConstruct。其特殊之处在于构建前会执行一次依赖包检查bsp_pkg_check()会验证packages/nxp-imx6ul-sdk-latest目录是否存在如果缺失则提示先执行pkgs --update若从未拉取过包则先pkgs --upgrade再pkgs --update并直接退出构建。这意味着本 BSP 依赖 NXP 官方 SDK 封装包nxp-imx6ul-sdk-latest该依赖也在rtconfig.h中以PKG_USING_NXP_IMX6UL_DRIVER宏登记构建前必须先通过 RT-Thread 包管理器获取该 SDK。工具链配置集中在rtconfig.pybsp/nxp/imx/imx6ul/rtconfig.py仅支持 GNU GCC 工具链前缀为arm-none-eabi-交叉编译器由RTT_CC/RTT_EXEC_PATH环境变量覆盖默认路径为/usr/bin架构参数-marcharmv7-a -mtunecortex-a9 -mfpuvfpv3-d16 -ftree-vectorize -ffast-math -mfloat-abisoftfp即 ARMv7-A 架构、VFPv3-D16 浮点单元、软浮点 ABIdebug 构建使用-O0release 构建使用-O2均开启-gdwarf-2调试信息链接参数包含--gc-sections剔除未使用段、-Maprtthread.map输出符号映射表、-u,system_vectors强制引用系统向量表以及-T link.lds链接脚本构建完成后自动执行objcopy -O binary生成rtthread.bin烧写镜像并调用size输出各段体积统计。因此标准构建命令为在 BSP 目录下先执行pkgs --update拉取 SDK 依赖再执行scons生成rtthread.elf与rtthread.bin。内核配置要点从 rtconfig.h 看系统裁剪rtconfig.h是本 BSP 经 menuconfig 裁剪后的最终配置集中反映了该平台的基本运行形态内核基础RT_NAME_MAX 12、RT_THREAD_PRIORITY_MAX 32、RT_TICK_PER_SECOND 1001000 Hz 节拍可由用户调整、空闲线程栈 256 字节内存管理启用RT_USING_SMALL_MEM_AS_HEAP小内存管理算法作为默认堆并开启RT_USING_MEMPOOL内存池后续又定义了RT_PAGE_AFFINITY_BLOCK_SIZE 0x10004 KB 页与RT_PAGE_MAX_ORDER 11对应 MMU 页式内存管理ARCH_MM_MMU组件启用RT_USING_COMPONENTS_INIT自动初始化机制、RT_USING_MSH/FINSH_USING_MSH命令行 Shell线程tshell优先级 20栈 4 KB命令最长 80 字符、RT_USING_DFS虚拟文件系统含 devfs最多 16 个文件描述符设备驱动启用RT_USING_SERIAL串口框架 V1支持 DMA 模式接收缓冲 64 字节与RT_USING_PINGPIO 框架控制台RT_CONSOLE_DEVICE_NAME uart1明确指定 UART1 作为系统调试控制台输出缓冲 128 字节架构相关ARCH_ARM_CORTEX_A、ARCH_ARM_CORTEX_A7、RT_USING_GIC_V2、RT_USING_HW_ATOMIC硬件原子操作、RT_USING_CACHE外设与 SoCRT_USING_UART1仅启用 UART1 实例与SOC_MCIMX6X4。这些宏与drivers/serial.c中的#ifdef RT_USING_UART1条件编译、board.c中的 MMU 描述表一一对应构成了配置宏 → 驱动实例的清晰映射。内存映射与 MMUplatform_mem_desc 与链接脚本Cortex-A 处理器必须开启 MMU 才能稳定运行 RT-Thread本 BSP 的内存映射定义在drivers/board.cbsp/nxp/imx/imx6ul/drivers/board.cstruct mem_desc platform_mem_desc[] { {0x00000000, 0x80000000, 0x00000000, DEVICE_MEM}, {0x80000000, 0xFFF00000, 0x80000000, NORMAL_MEM} };该表将地址空间划分为两段0x00000000 ~ 0x80000000映射为DEVICE_MEM设备内存不可缓存用于访问外设寄存器0x80000000 ~ 0xFFF00000映射为NORMAL_MEM普通可缓存内存对应 1 GB DDR3 的地址范围。platform_mem_desc_size则供 MMU 初始化代码遍历该表建立页表。内存布局的另一半由 GCC 链接脚本 link.lds 决定其关键设计如下首地址为0x80100000即代码从 DDR3 起始地址偏移 1 MB 处加载.text段依次包含向量表、代码、finsh 符号表FSymTab/VSymTab供FINSH_USING_SYMTAB使用、模块符号表RTMSymTab以及按SORT(.rti_fn*)排序的自动初始化函数表__rt_init_start ~ __rt_init_end——这正是 RT-ThreadINIT_BOARD_EXPORT/INIT_APP_EXPORT自动初始化机制的落点紧随其后是.ARM.exidx异常展开表、.rodata、构造函数/析构函数段以及按 16 KB 对齐、预留 16 KB 空间的.l1_page_table一级页表段__l1_page_table_start.data与.bss段结尾处的__bss_end符号正是board.h中堆起点HEAP_BEGIN的取值来源。堆范围在 drivers/board.h 中定义为从__bss_end到0x80000000 32MB即系统堆占用 DDR 前 32 MB 中未被代码、数据占用的剩余部分。系统时钟与节拍EPIT1 定时器驱动RT-Thread 的系统节拍由 i.MX6 的 EPITEnhanced Periodic Interrupt Timer外设提供。drivers/board.c中的rt_hw_timer_init()完整实现了定时器的初始化流程关闭并清零 ARM 全局定时器Global Timer使能其运行作为时间基准通过get_main_clock(IPG_CLK)获取 IPG 总线时钟频率以 IPG 时钟为源CLKSRC_IPG_CLK将 EPIT1 配置为 SET_AND_FORGET装载-递减模式以freq / 1000000作为分频值、计数初值 10000并启用 WAIT/STOP 模式支持调用epit_counter_enable()启动计数器并选择 IRQ 模式将rt_hw_timer_isr注册到IMX_INT_EPIT1中断向量并打开中断屏蔽。中断服务函数rt_hw_timer_isr()只做两件事调用rt_tick_increase()递增 RT-Thread 系统节拍以及调用epit_get_compare_event()清除 EPIT 比较事件标志。整个初始化通过INIT_BOARD_EXPORT(rt_hw_timer_init)挂入自动初始化机制在板级初始化阶段自动执行drivers/board.c。这种EPIT 递减计数器 中断内递增 tick的模式是 i.MX 系列 RT-Thread 移植的通用做法。串口驱动UART1 控制台与引脚复用系统控制台依赖 UART1其实现分为三层。第一层引脚复用iomux。drivers/iomux/uart_iomux_config.c 定义了 UART1 TX/RX 引脚的 IOMUX 配置宏MX6UL_PAD_UART1_TX_DATA__UART1_TX与MX6UL_PAD_UART1_RX_DATA__UART1_RX分别写入 MUX 控制寄存器偏移 0x084/0x088、Daisy Chain 选择寄存器偏移 0x624与 PAD 控制寄存器偏移 0x310/0x314pad_setting 值 0x10b0对应特定的驱动能力/上下拉配置。uart1_iomux_config()完成实际写入而iomux_config()统一调用它。值得注意的是uart_iomux_config()的分发函数中 UART6/7/8 均错误地回落到uart5_iomux_config()从源码结构看该分发函数仅对 UART1 做了完整实现其余实例尚未接线这与rtconfig.h只定义RT_USING_UART1的裁剪是一致的。第二层串口框架驱动。drivers/serial.c 实现了struct rt_uart_ops的四个回调uart_configure依据serial_configure将数据位/停止位/校验位映射为 i.MX UART 寄存器值调用 SDK 的uart_init()初始化硬件并设置 RX FIFO 中断模式、uart_control响应RT_DEVICE_CTRL_SET_INT/CLR_INT开断 RX 中断、uart_putc/uart_getc字符级收发。中断服务例程rt_hw_uart_isr()收到 RX 中断后调用rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND)通知串口框架进行接收。第三层设备注册。rt_hw_uart_init()以 115200-8-N-1BAUD_RATE_115200、DATA_BITS_8、PARITY_NONE、STOP_BITS_1为默认配置为 UART1 实例HW_UART1IMX_INT_UART1注册名为uart1的设备标志为RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX读写 中断接收随后通过INIT_BOARD_EXPORT自动执行。注册完成后board.c的rt_hw_board_init()中rt_console_set_device(uart1)将控制台绑定到该设备Shell 与rt_kprintf输出即可经此串口工作。启动流程从 main 到调度器applications/startup.capplications/startup.c给出了标准的 RT-Thread Cortex-A 启动序列main()先关闭中断随后调用rtthread_startup()其内部顺序为rt_hw_interrupt_init()初始化 GIC 中断控制器rt_hw_board_init()使能 NEON/FPUenable_neon_fpu()、关闭严格对齐检查disable_strict_align_check()、执行rt_components_board_init()完成板级自动初始化串口、定时器均在此阶段就绪并设置控制台设备rt_show_version()打印 RT-Thread 版本信息rt_system_heap_init(HEAP_BEGIN, HEAP_END)初始化堆内存rt_system_scheduler_init()/rt_system_timer_init()/rt_system_timer_thread_init()初始化调度器与软定时器rt_application_init()创建应用线程rt_thread_idle_init()创建空闲线程rt_system_scheduler_start()启动调度器此后系统不再返回。应用线程的创建位于applications/application.c配合FINSH_USING_MSH配置系统启动后即可在 UART1 上进入msh命令行执行内核信息查看、设备调试等 finsh 命令。小结一份可复用的 Cortex-A 异构平台 BSP 范例围绕 bsp/nxp/imx/imx6ul/README.md 描述的 i.MX6 SoloX SABRE 硬件本 BSP 用一份精简但完整的源码集给出了 RT-Thread 在带 MMU 的 Cortex-A 平台上的标准落地方式通过pkgs --update集成 NXP 官方 SDK 包以rtconfig.h完成内核与组件裁剪用platform_mem_desclink.lds搭建 MMU 映射与内存布局以 EPIT 定时器驱动系统节拍以串口框架 IOMUX 支撑控制台与 Shell。对于需要在 i.MX6UL/6ULL/SoloX 系列上评估 RT-Thread或希望参照移植到其他 Cortex-A 处理器的开发者这份 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 在 NXP i.MX6 SoloXSABRE 智能设备板上的 BSP 移植与运行指南RT Thread 在 NXP i.MX6 SoloXSABRE 智能设备板上的 BSP 移植与运行指南 导读 本文以 RT Thread 仓库中 bsp/操作系统嵌入式物联网嵌入式OSRTOSRT-Thread 的 GD32107C-EVAL 开发板 BSP 移植与使用指南RT Thread 的 GD32107C EVAL 开发板 BSP 移植与使用指南 本指南以 RT Thread 仓库中 bsp/gd32/arm/gd3210操作系统嵌入式物联网嵌入式OSRTOSRT-Thread 在 NXP i.MX RT1170 EVK 上的 BSP 移植与实战指南RT Thread 在 NXP i.MX RT1170 EVK 上的 BSP 移植与实战指南 本篇技术指南以 RT Thread 仓库中 bsp/nxp/imx操作系统嵌入式物联网嵌入式OSRTOS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Zotero Better Notes:嵌入式知识图谱构建指南
Zotero Better Notes:嵌入式知识图谱构建指南

1. 这不是普通插件:Better Notes 在 Zotero 生态里的真实定位Zotero Better Notes 这个名字听起来像一个“增强笔记功能”的小补丁,但实际用过的人很快会发现——它根本不是给笔记加几个高亮或标签那么简单。它是一套嵌入式知识编织系统,把 Z… · 2026/9/26 7:36:26

check_prose.py 完整教程:human-writing 成稿自查脚本如何把禁用项清零
check_prose.py 完整教程:human-writing 成稿自查脚本如何把禁用项清零

check_prose.py 完整教程:human-writing 成稿自查脚本如何把禁用项清零 【免费下载链接】human-writing 让 AI 写的中文读起来像一个具体的人在说话。通用创作与改稿 Skill,开箱即用。 项目地址: https://gitcode.com/gh_mirrors/hu/human-writing … · 2026/9/26 7:36:26

深度合成语音检测平台:技术原理、工程落地与数据安全实践
深度合成语音检测平台:技术原理、工程落地与数据安全实践

1. 从一段“以假乱真”的语音说起:深度合成语音检测到底在防什么前阵子有个做金融风控的朋友找我聊天,说他们内部做了一次红蓝对抗演练,蓝军只用了一段三十秒的合成语音,就骗过了客服系统的声纹初筛,差点把一笔大额转账… · 2026/9/26 7:36:26

从0到1搭建企业级AI Agent平台:Agent工厂实用指南
从0到1搭建企业级AI Agent平台:Agent工厂实用指南

自己手写过 Agent 的人应该都有同感:单个 Agent 跑通 demo 不难,难的是“养不活”。这里说的“养不活”,是指你写了一个能回答问题的 Agent,但它只属于你个人,没有命名规范、没有版本管理、没有日志追踪、没有安全审批… · 2026/9/26 8:15:29

基于Python+Django的连锁超市线上管理系统开发实战
基于Python+Django的连锁超市线上管理系统开发实战

这个标题我第一眼看到就觉得很熟悉,典型的课程设计或者毕业设计项目代号——hx2008多半是你学号、班级名称或者老师给的项目编号,实际作用就是把一个完整项目标签化。但不管编号叫什么,这类“基于Python的连锁超市线上管理系统”几乎是每年都… · 2026/9/26 8:15:29

网络空间安全课程设计复现指南:从吃灰压缩包到简历实战项目
网络空间安全课程设计复现指南:从吃灰压缩包到简历实战项目

简介:本资源为网络空间安全学院课程设计与课程实验的合集压缩包,面向计算机科学、信息安全、数据科学与大数据、人工智能、通信及物联网等专业的在校学生、教师与企业技术人员,可用于课程设计、大作业、毕业设计选题及入门项目立项演示。压缩… · 2026/9/26 8:15:22

tiny11builder:基于DISM的Windows镜像标准化构建流水线
tiny11builder:基于DISM的Windows镜像标准化构建流水线

1. tiny11builder 不是“魔改工具”,而是 Windows 镜像工程的标准化流水线你在网上搜“tiny11builder”,十有八九会看到一堆“一键精简”“秒变轻量”“告别卡顿”的标题。但我要先泼一盆冷水:tiny11builder 本身不删任何系统文件&#xff0c… · 2026/9/26 8:15:22

Atlas 300V推理卡实战:从环境搭建到YOLO多路视频流调优
Atlas 300V推理卡实战:从环境搭建到YOLO多路视频流调优

先给结论:Atlas 300V 24G是一块AI推理加速卡,不是训练卡。很多人第一次看到这个型号,会被“24G”带偏,以为它能像A100、训练卡那样直接拿来训模型。实际上它跑得最顺的场景,恰恰是YOLO这类检测模型的在线推理&#xff… · 2026/9/26 8:15:16

从0到1搭建AI Agent平台:核心模块与企业级落地指南
从0到1搭建AI Agent平台:核心模块与企业级落地指南

最近经常有人问我:“AI Agent 到底是个啥?跟 DeepSeek 这种模型有什么区别?”“我想自己搭一个 Agent,但不知道从哪儿下手。”问的人多了,我发现大家其实不是不懂技术,而是缺一个全局视角:你知道… · 2026/9/26 8:15:16

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

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

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码