"); //-->
1). 简介
NXP i.MX7 处理器是一款具有 Cortex-A7 和 M4 的异构多核处理器。A7能够运行 Linux 等操作系统,完成 GUI、网络、文件管理和算法运算等复杂任务,而 M4 则可以运行诸如 FreeRTOS 实时操作系统性或者低功耗应用。传统的 Cortex-M 开发可以借助 JTAG,在线实时调试用户程序。i.MX7 由于其特殊的架构,除了要求能够调试片上的 M4 外,同时还需要调试 A7 运行的任务。ARM 针对此类异构多核系统提供了调试解决方案:DS-MDK。本文就基于Toradex 基于NXP i.MX7处理器发布的Colibir i.MX7计算机模块来进行演示如何使用DS-MDK来调试i.MX7。
DS-MDK 是 ARM 公司针对 32-bit ARM® Cortex®-A 以及 32-bit ARM Cortex-A 和 ARM Cortex-M 异构系统所推出的开发环境,其结合了 DS-5 和 CMSIS-Pack 技术。 目前你可以通过 DS-MDK 和 ULINKpro 调试开发 Colibri i.MX7 嵌入式计算机模块。DS-MKD 支持在 M4 上单步执行、设置断点、应用重置等功能,在调试的过程中实时查看片上寄存器,保留传统 Cortex-M 的开发调试功能。DS-MDK 还可以调试 Linux 应用,捕获 A7 和 M4 之间的通信。实现在保持 A7 运行的同时,重置 M4 内核,方便用户在线实时调试 M4 上的应用。
2). 准备
a). 软件准备
你可以从下面链接下载能够在 DS-MDK 中使用的 Linux 镜像以及相关调试文件。
./ Linux 镜像:
https://armkeil.blob.core.windows.net/products/Colibri_iMX7_LinuxImageV2.6_20161014_sdcard_files.zip
./ Debug Symbols:
https://armkeil.blob.core.windows.net/products/vmlinux-Colibri-iMX7-20161014.zip
./ Kernel Source:
https://armkeil.blob.core.windows.net/products/kernel-source-Colibri-iMX7-20161014.tar.gz
b). 硬件连接
./ 插入装有 Linux 镜像的 SD 卡(参考“Flashing Embedded Linux”)
./ 使用 RS232(X27)USB 接口连接 ARM Cortex-A7
./ 使用 RS232(X25 顶部 UART B)接口连接 ARM Cortex-M4
./ 使用 ULINKpro 连接 JTAG 接口
./ 连接以太网接口,使用 RSE 连接 Linux 系统
./ 连接电源
为了能够使用 X27 USB 转串口,你需要设置 J17、J19、J20 和 J21 短路帽。正确连接四个对应的引脚。
3). 创建 Linux 镜像
a). Toradex OpenEmbedded (core) guide 介绍了从源码编译 BSP 的具体步骤。
b). 软件安装
./ 我们需要一个 Linux 系统来运行编译步骤。当然也可以使用 Linux 虚拟机,但是速度将会很慢。在 Linux 主机上需要安装下面的软件:
----------------------------------
sudo apt-get install libsdl1.2-dev xterm sed cvs
subversion coreutils texi2html docbook-utils python-pysqlite2
help2man make gcc g++ desktop-file-utils libgl1-mesa-dev
----------------------------------
./ 使用 bash 代替系统默认的 dash。如果有必要,可以重新配置 bash/dash:
----------------------------------
sudo dpkg-reconfigure dash
----------------------------------
./ 安装 repo 工具
----------------------------------
mkdir ~/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
----------------------------------
c). 编译镜像
./ Toradex 有专门的文档调试如何从源码编译 BSP。在最后使用 bitbake 命令之前,你需要运行下面的命令:
----------------------------------
bitbake -c menuconfig linux-toradex
----------------------------------
./ 使用你想要的内核配置选项。以 .config 文件为例。修改 ~/oe-core/build/out-glibc/work/colibri_imx7-angstrom-linux-gnueabi/linux-toradex/4.1.15-r0/defconfig ,创建新的 .config 文件。并用新的配置文件重新编译和部署内核:
----------------------------------
bitbake -c compile -f linux-toradex
bitbake -c deploy linux-toradex
----------------------------------
./ 生成的文件位于 ~/oe-core/build/out-glibc/deploy/images/colibri-imx7。
./ 按照这里的说明重新烧写 iMX7 的镜像。
./ 按照这里的说明配置 u-boot 环境参数。
----------------------------------
setenv defargs clk_ignore_unused;
setenv fdt_fixup 'fdt addr ${fdt_addr_r} && fdt rm /soc/aips-bus@30800000/spba-bus@30800000/serial@30890000';
----------------------------------
4). Linux 内核模块调试
只需要一些简单的配置,就可以开始内核模块调试工作。这一部分内容将以 imx_rpmsg_tty 模块为例,阐述如何进行配置。该模块在 Getting Started with DS-MDK 用户手册中的例程项目中有详细的说明。
a). 从 i.MX 7 软件包中复制并编译 RPMSG TTY RTX 和 Linux Application TTY 。
./ 下载并解压 Linux 内核符号 vmlinux。
./ 下载并解压内核模块源码和 object 文件 imx_rpmsg_tty.zip。
b). 创建 CMSIS C/C++ 项目
./ 为 i.MX 7 的 Cortex-A7 处理器创建一个新的 CMSIS C/C++ 项目。名字为 Kernel_Debug
./ 添加两个 DS-5 Debugger 脚本:右击项目,选择 New -> Other....
./ 在窗口中选择 DS-5 Debugger -> DS-5 Debugger Script。 设置文件名为 "stop" 和 "load_ko"。
./ 在 stop.ds 脚本中添加:
----------------------------------
stop
----------------------------------
在 load_ko.ds 脚本中添加:
----------------------------------
add-symbol-file imx_rpmsg_tty.ko
----------------------------------
注意:确认脚本文件保存在 workspace 中,DS-MDK 能找到该文件。否则请指定完整的路径。
./ 第一个脚本中的 stop 命令会在加载内核符号之前暂停处理器,add-symbol-file 命令可以加载内核模块的 object 文件。
./ 右击项目,选择 Debug As -> CMSIS DS-5 Debugger....
在 Connections 选项中,设置 CPU Instance 为 0 或者 SMP。点击 Advanced 标签,设置 vmlinux 文件路径并选择 Load symbols only。 同时按照下面的图片,设置 initialization debugger 脚本:
应用以上的设置,并关闭对话框。
c). 调试内核模块
下面的步骤将向你介绍如何调试内核模块:
./ 重启你的开发板并停止在 u-boot。
./ 调试和运行 Cortex-M4 应用 RPMSG TTY RTX。
./ 启动 Linux
./ 在 Linux 命令模式中,运行下面命令安装内核模块: modprobe imx_rpmsg_tty。
./ 调试和运行 Kernel_Debug project。
./ 现在你可以打开 imx_rpmsg_tty.c 并设置断点
./ 最后,调试 Linux Application TTY (确保 RSE 连接任然有效)。当开始运行应用时,debugger 会停留在之前设定的断点。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
使用Ptotel99软件设计的WH5307DB电路图和PCB设计文件
最新小产品,电话防卷器
DDR5内存现在可能比PlayStation 5还贵
三星提供的串口调试软件dnw
西门子手机S10短消息接口
微机并口在电子制作和维修中的应用
CW7900构成具有外接扩流管保护的大电流集成稳压电源电路
CW7900构成的高输入-高输出电压集成稳压电源电路之四
CW7900构成的高输入-高输出电压集成稳压电源电路之三
数字集成电路前端设计
Physical Intelligence筹集6亿美元用于改进其AI机器人大脑
微控制器系统抗干扰能力与电磁兼容性
Sunday推出家庭机器人Memo,经 1000 万组家庭日常场景训练
这个新型人形机器人吸引我注意的三个原因
大家快来看看
模拟电子技术 第十三讲
Uber Eats 通过 Starship Rollout 进入欧洲机器人配送市场
模拟电子技术 第十五讲
让您的产品一夜成名!并非神话的杰作!
模拟电子技术 第十四讲
Windows 11 的文件资源管理器很快会更快、更易作
据报道,iOS 27将跳过重大升级,专注于改进
罗兰贝格最新《汽车行业颠覆性数据探测》重磅发布
CW7900、F007构成的可调输出集成稳压电源电路之一
求助:关于IIS的问题
中国在光子量子芯片研究取得新进展
CW7900、F007构成的可调输出集成稳压电源电路之二
模拟电子技术 第十七讲
英特尔的EMIB据报道借助AI ASIC、智能手机客户端、可能封装台积电的故障而获得关注
模拟电子技术 第十六讲