目录

硬件与软件环境

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

这也是一个记录过程

Zephyr移植到NXP MIMXRT1060_EVK-RT1061 CVL5A过程相关推荐

  1. Linux系统移植:NXP 官板 uboot 移植

    文章目录 Linux系统移植:NXP 官板 uboot 移植 一.获取官板 U-Boot 二.编译下载 U-Boot 源码 三.官方驱动验证 Linux系统移植:NXP 官板 uboot 移植 移植 ...

  2. Open Harmony移植:build lite编译构建过程

    本文分享自华为云社区<移植案例与原理 - build lite编译构建过程>,作者: zhushy. 配置完毕产品解决方案.芯片开发板解决方案,就可以执行 hb build进行编译.但是产 ...

  3. 移植opencv到嵌入式arm详细过程

    你好!这里是风筝的博客, 欢迎和我一起交流. 看了好几篇一直opencv的文章,都是几年前的,而且版本比较旧,对着弄会发现有的地方是和现在是有改动的.所以,2017年末,记录了此次移植过程,移植版本比 ...

  4. apache arm 交叉编译_Apache 2移植到Arm开发板的过程整理——如何交叉编译Apache 2

    话说要在arm开发板的linux系统中运行apache服务器,需要在pc linux系统中交叉编译Apache源码,在网上参考了很多资料都是1.3版本的,最后终于找到apache 2移植到arm开发板 ...

  5. 【Linux系统移植】NXP 官方开发板 kernel内核 编译与烧录

    1.下载 NXP 官方 I.MX6ULL EVK 开发板的kernel :linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2 2.使用 FileZilla Client ...

  6. S3C2440移植Linux4.19.275内核以及过程中遇到的问题

    目录 1 问题一:内核移植时MTD分区问题 2 问题二:uboot的MTDPARTS_DEFAULT定义的MTD分区,bootargs中的文件系统分区,内核的mtd_partition smdk_de ...

  7. 移植移远4G模块EC20过程记录2-QMI+PPP拨号上网

    目录 1.背景 2.移植QMI_WWAN驱动 2.1 准备源码 2.2 修改源码 2.3 make 2.4 安装 2.5 编译cdc_wdm 2.6 再次安装 2.7 验证QMI驱动 3.ppp拨号 ...

  8. 玩转开发板--Linux系统移植至开发板fl2440实践过程

    一.开发板介绍     CPU:S3C2440(SAMSUNG).ARM920T.400MHz     Pone/mic:耳机和话筒 JTAG:可以通过外部插入直接控制CPU,因此在初始化内存时,起到 ...

  9. 瑞萨芯片程序移植到华大芯片,运行过程中出现HardFault

    记录一下遇见的大坑还没找到原因 如果有大佬遇见过同样问题可以唠唠T T 将原瑞萨芯片R5F100FG的程序移植到华大芯片HC32L176MATA上就移植底层的硬件初始化. 应用层逻辑不动,这样就不用自 ...

最新文章

  1. Linux upstart启动方式详解
  2. Android ListViewDemo
  3. ios 悬浮窗_多达2000个频道,支持7天回看!这才是我要的看电视app(安卓/ios)...
  4. Linux查看Bios信息
  5. 前端开发常用正则表达式
  6. (63)通信协议之一json
  7. 程序员求职之道(《程序员面试笔试宝典》)之程序设计基础(static的使用)?...
  8. pymysql.err.OperationalError: 1136, Column count doesn t match value count at row 1
  9. 5GC NEF网元功能介绍
  10. php mktime 2037,phpmktime计算两时间之差_PHP教程
  11. ycl-django网站搭建(持续更新中)
  12. 小米路由器 mini 刷 Padavan 详细教程
  13. apicloud 项目常用插件
  14. C#打印小票自带条形码打印
  15. 58同城智能推荐系统的演进与实践(转)
  16. DNA pull-down 要点
  17. 2020年拼多多校招面试题及答案-最全最新-持续更新中
  18. CTEX零基础基础入门Latex
  19. 电子商务系统的运维与评价(十三)
  20. 什么是增量表,全量表,快照表?

热门文章

  1. 冒泡排序java代码_美团面试,我竟然输给了冒泡排序。。。
  2. Java基础教程【第一章:Java概述】
  3. 碱性干电池的内阻测试方法_电池内阻怎么测
  4. python开发好吗_用Python开发应用好用吗?
  5. windows安装mysql修改密码_1、Windows下安装mysql-8.0.12及修改初始密码
  6. s和jquery设置disabled属性为true使按钮失效
  7. python控制窗口_Python : Turtle窗口控制
  8. python md5加密字符串_python md5加密字符串的例子
  9. nginx: [emerg] mkdir() /var/temp/nginx/client failed (2: No such file or directory)
  10. c语言表达式1 33的值是,2015年计算机二级C语言测试题及答案(1)