Zephyr移植到NXP MIMXRT1060_EVK-RT1061 CVL5A过程

本文讲述了作者在将Zephyr移植到FeiLing OK10xx-S工业级MCU(MIMXRT1061CVL5A)上的经历,涉及到硬件环境配置、内存区划分问题和Zephyr移植过程中的调试难题,最终通过调整DTS文件和理解芯片特性的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

硬件与软件环境

Zephyr移植过程


硬件与软件环境

厂商:FeiLing
型号:OK10xx-S
版本:V1.1
级别:工业级
主频:528MHZ
MCU:MIMXRT1060_EVK-RT1061 CVL5A
  SOC:i.mxRT1061
RAM:内置RAM
ROM:QSPI Nor Flash
  SYS:Zephyr 7.0

Zephyr移植过程

我最初认为我的MCU是MIMX RT1060,而Zephyr支持的官方板中对MIMX RT1060是支持的

但遗憾的是烧录进去无法正常运行,我开始使用Jlink-SWD调试,发现Zephyr在初始化BSS段时出现错误。
我在调试之前查过cpu寄存器的值,PC寄存器指向的是NOR_FLASH地址,0x60000000所以是正确的

(gdb) info registers
r0             0x600033f9          1610626041
r1             0x0                 0
r2             0x3e75d             255837
r3             0x90f0              37104
r4             0x600033f9          1610626041
r5             0x20203a70          538983024
r6             0xc6f1bf4b          3337731915
r7             0xf0                240
r8             0x200300            2097920
r9             0x0                 0
r10            0x0                 0
r11            0x400f8000          1074757632
r12            0x1fe               510
sp             0x20200f70          0x20200f70
lr             0x215329            2183977
pc             0x600033fa          0x600033fa <z_arm_reset+2>
xpsr           0x41000000          1090519040
msp            0x20200f70          538972016
psp            0x0                 0
primask        0x0                 0
basepri        0x0                 0
faultmask      0x0                 0
control        0x0                 0
fpscr          0x0                 0

我开始继续调试
Zephyr 在执行到 z_bss_zero() 时崩溃

z_arm_prep_c () at C:/Users/zhihao3x/work/zephyrproject/zephyr/arch/arm/core/aarch32/prep_c.c:183
183             z_bss_zero();

尝试进入z_bss_zero函数进行调试,发现是先执行memset函数清除bss基地址
基地址从 0x80000000 开始

我觉得这里有问题,我开始查看我的芯片手册
仔细看了一下我的芯片说明书,发现我的MCU使用的SOC是RT1061 CVL5A。 据我所知,MIMXRT1060有两个版本。 这两个版本使用不同的 SOC。 一个版本使用 RT1061 CVL5A,另一个版本。 使用的是RT1062 DVL6A,Zephyr可以在RT1062 DVL6A版本上正常运行。
于是我继续调试和排除故障。 我通过文档发现RT1061_继承了RT1050的特性。 内部没有RAM,也没有划分SDRAM。

内存划分目的:

内存区

作用

ITCM将需要运行的函数代码存放在RAM中,属于cache,cpu一级缓存,速度较快,可以将一些想要快速运行的代码放入此处,它距离CPU最近,总线传输速度最快
DTCM用于存放内核读写的变量数据,如栈,频率与主频一致
OCRAM用于通用变量,外设读写缓存,频率为主频的1 / 4
同时发现我的SDRAM(0x80000000)被划分在了SEMC片外控制器中。 如果要访问它,必须通过SEMC 访问它。 Zephyr 无法直接访问此内存。 
根据我手册中的RAM内存划分,我把Zephyr DTS文件中的SDRAM改成了DTCM地址
sdram0: memory@0x20000000 {
        /* Micron MT48LC16M16A2B4-6AIT:G */
        device_type = "memory";
        reg = <0x20000000 DT_SIZE_KB(128)>;
    };

然后在重新编译,并烧录bin文件,注意是烧录bin文件,这里Zephyr生成的xip格式的elf文件无法正常运行,这里推测可能是Zephyr生成的xip文件里的向量表与1061不兼容导致的,但bin文件是可以的。

虽然最终不是大问题,但是调试过程非常缓慢,因为是使用最初不了解问题原因在哪儿,需要验证的东西太多了,如zephyr有没有被bootload正确引导,xip格式是否正确等经过一系列验证才能找到最终问题原因,这是一个非常缓慢且需要耐心的过程。

最后我向zephyr的官方提交了一个patch和一个lssuse

patch收到了作者邮件回复

 但是我没有去提交分支,因为我的解决方案只能适用于当前的soc,并不能根据MCU使用不同的SOC来切换,由于我没有那么多时间去处理这些,就将问题提交到了lssuse上:https://github.com/zephyrproject-rtos/zephyr/issues/39293

这也是一个记录过程

<think>好的,我需要解释用户提供的命令`tar xvf zephyr-sdk-0.17.0_linux-x86_64.tar.xz`的作用及参数说明。首先,这个命令涉及到tar工具的使用,用户可能对tar命令不太熟悉,所以需要详细分解每个部分。 首先,命令的结构是`tar`后跟选项`xvf`,然后是文件名。tar是用于处理归档文件的工具,常见的用途包括打包和解压。这里的选项x代表提取(extract),v是verbose显示详细信息,f指定文件名。用户提供的文件名是zephyr-sdk-0.17.0_linux-x86_64.tar.xz,这是一个经过xz压缩的tar归档文件。 接下来需要解释每个参数的作用:x是解压,v是显示过程,f是指定文件。同时,文件扩展名.tar.xz说明这是先用tar打包,再用xz压缩的,所以解压时需要先解压xz,再解包tar。不过tar命令可能已经整合了处理不同压缩格式的功能,比如使用-J选项处理xz压缩,但用户这里用的是xvxf,可能不需要额外参数,因为tar可以自动识别? 不过根据常见的用法,解压.tar.xz文件通常需要加上`-J`选项,或者使用`tar xvf`,因为tar可能根据后缀自动选择解压方法。需要确认这一点,避免给出错误信息。例如,有些系统可能需要明确指定解压方式,而有些则自动处理。 另外,用户提供的引用内容中有多个例子,比如引用1和引用2中都是直接使用tar xvf来解压.tar.xz文件,这说明在这些情况下,tar命令可能已经支持自动识别xz压缩,或者系统已经配置了相应的解压工具。因此,在解释时应该提到,使用tar xvf会自动处理xz压缩,前提是系统安装了xz工具。 然后,需要详细说明每个参数的意义,以及整个命令的作用,即解压并提取指定的.tar.xz文件。可能还需要提到,解压后的文件会放在当前目录,或者可以指定目录,但用户命令中没有-C参数,所以默认是当前目录。 此外,用户可能还想知道这个命令在安装Zephyr SDK时的作用,根据引用内容,解压SDK文件是安装步骤的一部分,之后还需要运行setup.sh等脚本。因此,在回答中可以联系上下文,说明该命令是解压SDK安装包,为后续安装做准备。 最后,确保回答符合用户的要求,结构清晰,分点说明参数,并引用相关的引用内容,比如引用1和引用3中提到解压步骤,可以添加引用标识。</think>### `tar xvf zephyr-sdk-0.17.0_linux-x86_64.tar.xz` 命令解析 #### 命令作用 此命令用于解压并提取名为 `zephyr-sdk-0.17.0_linux-x86_64.tar.xz` 的压缩归档文件。该文件是 Zephyr SDK 的安装包,通常包含嵌入式开发所需的工具链、库和配置文件[^3][^4]。 --- #### 参数说明 1. **`x`**(extract) 表示从归档文件中提取内容。这是解压操作的核心参数。 2. **`v`**(verbose) 显示解压过程的详细信息,包括正在提取的文件名。便于用户观察进度。 3. **`f`**(file) 指定要操作的归档文件名。此处指向 `zephyr-sdk-0.17.0_linux-x86_64.tar.xz`。 4. **文件名后缀 `.tar.xz`** - `.tar`:表示未经压缩的归档文件。 - `.xz`:表示使用 `xz` 算法进行压缩,需通过两步解压: ```bash xz -d zephyr-sdk-0.17.0_linux-x86_64.tar.xz # 解压为 .tar 文件 tar xvf zephyr-sdk-0.17.0_linux-x86_64.tar # 提取 .tar 文件内容 ``` 但现代 `tar` 命令已支持自动处理压缩格式,因此直接使用 `tar xvf` 即可[^1][^2]。 --- #### 扩展说明 - **解压路径** 默认提取到当前目录。若需指定目录,可添加 `-C` 参数: ```bash tar xvf zephyr-sdk-0.17.0_linux-x86_64.tar.xz -C /目标路径 ``` - **安装上下文** 根据引用内容,解压 Zephyr SDK 后需执行 `setup.sh` 完成安装,并配置环境变量(如 `ZEPHYR_SDK_INSTALL_DIR`)[^3][^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

17岁boy想当攻城狮

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值