首页 > 其他分享 >i.MX8MP M核开发环境02-搭建编译、调试、运行环境

i.MX8MP M核开发环境02-搭建编译、调试、运行环境

时间:2022-11-08 21:44:05浏览次数:72  
标签:02 FreeRTOS 环境 OK8MP MX8MP linux world hello IAR

本系列介绍飞凌 OKMX8MPQ-C 开发板如何搭建M核开发、调试核运行环境。

一、VSCODE+IAR 集成开发环境(windows)

VSCode 的文本编辑功能强大,多光标操作,智能补全,格式化,大纲等等功能1,非常顺手。IAR编辑功能偏弱,但编译器稳定可靠。用IAR管理工程,VSCode编辑文本,综合两者优势可以大大提高开发效率,尤其IAR 官方提供VS Code 环境下 IAR Build 和 IAR C-SPY Debug 插件后2,下面介绍如何搭建VSCODE+IAR 集成开发环境。

首先,你应该有一个 IAR 工程,安装好 VSCode。接下来

1.1 安装VSCODE插件

所需要的插件为:

  1. ARM assembly :Arm® assembly highlighting for Visual Studio Code

  2. C/C++ for Visual Studio Code:The C/C++ extension adds language support for C/C++ to Visual Studio Code, including editing (IntelliSense) and debugging features.

  3. IAR Embedded Workbench:This extension provides IAR Embedded Workbench project integration to automatize build and Intellisense support. As IAR works on Windows environment only, the extension is not been tested on different systems.(非官方,可删除)

  4. IAR Build:Build and develop your IAR Embedded Workbench projects from Visual Studio Code (带蓝色标志,IAR System官方)

  5. IAR C-SPY Debugger:Use IAR System's C-SPY Debugger to debug embedded programs using Visual Studio Code, with support for a wide range of embedded devices and debug probes. (带蓝色标志,IAR System官方)

forlinx01_introduction_IDE_01
forlinx01_introduction_IDE_01

1.2 配置相关插件

IAR Build 安装完成后,在侧边栏会出现其图标,点击后配置 IAR Embedded Workbench 位置和工程名称。

forlinx01_introduction_IDE_02
forlinx01_introduction_IDE_02

1.3 VSCODE 其他配置

快捷键设置

  • ”ctrl+shift+b“ 编译快捷键
    • 导航到终端 | 配置默认生成任务 | iar:Build Project
    • 文件 | 首选项 | 快捷键 | 搜索”运行生成任务“,保留 ”ctrl+shift+b“ 快捷键,去除其他选项
  • ”ctrl+shift+c“ 清除 clean
    • 文件 | 首选项 | 快捷键 | 搜索”运行任务“,添加 ”ctrl+shift+c“ 快捷键,并解绑其他冲突设置
  • 滚轮放大编辑区快捷键
    • ”ctrl+shift+p“ 唤起设置,输入"setting ui",打开设置UI界面
    • 输入”mouseWheelZoom“,使能该项配置

通过如上的配置,就可以愉快地使用 VSCode 编辑 IAR 工程代码了。

但是工程管理,比如常用的添加模块,头文件路径,更改调试方式等,就需要去IAR中操作了。一个小技巧是,在VSCODE 文件夹下,找到 .eww 文件,快捷键(”ctrl+alt+o“)使用默认的应用程序(即IAR)打开IAR工程进行管理。

1.5 IAR快速修改工程名称

第一步:修改工程名称

将工程文件夹下后缀为“dep、ewd、ewp、eww”的四个文件重命名为目标名称。

第二步:修改工程内容

用编辑器(记事本或者UE)打开“eww”后缀的文件,修改目的路径的“project.ewp”为目标名称。

第三步:修改编译输出文件

建议在工程文件中,输出设置为相对路径及名称设置为与获取工程名,则只需执行第一、第二步即可,不需手动修改。

更改bin文件名 更改out文件名

二、ARM GCC 编译工具(Ubuntu)

# 1. 安装 cmake
$ sudo apt-get install cmake
$ cmake --version
cmake version 3.10.2 cmake 的版本要大于 3.0.x 才行。
# 2. 设置 FreeRTOS 环境变量
# 2.1 将 Linux\源码中 OK8MP-linux-sdk.tar.bz2.00 到 OK8MP-linux-sdk.tar.bz2.03文件拷贝到~/work 中,执行如下命令解压:
$ cat OK8MP* > OK8MP-SDK.tar.bz2
$ tar xvf OK8MP-SDK.tar.bz2
# 2.2 设置环境变量
$ cd OK8MP-linux-sdk
$ export ARMGCC_DIR=/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/tools/gcc-arm-none-eabi-10-2020-q4-major
$ export PATH=$PATH:$ARMGCC_DIR
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/tools/gcc-arm-none-eabi-10-2020-q4-major
# 3. 编译
$ cd OK8MP-FreeRTOS/boards/evkmimx8mp/demo_apps/hello_world/armgcc
$ ./build_release.sh
-- TOOLCHAIN_DIR: /mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/tools/gcc-arm-none-eabi-10-2020-q4-major
-- BUILD_TYPE: release
-- TOOLCHAIN_DIR: /mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/tools/gcc-arm-none-eabi-10-2020-q4-major
-- BUILD_TYPE: release
-- The ASM compiler identification is GNU
-- Found assembler: /mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/tools/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gcc
-- The C compiler identification is GNU 10.2.1
-- The CXX compiler identification is GNU 10.2.1
-- Configuring done
-- Generating done
-- Build files have been written to: /mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/boards/evkmimx8mp/demo_apps/hello_world/armgcc
Scanning dependencies of target hello_world.elf
[  4%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/boards/evkmimx8mp/demo_apps/hello_world/hello_world.c.obj
[  9%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/devices/MIMX8ML8/drivers/fsl_rdc.c.obj
[ 14%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/devices/MIMX8ML8/drivers/fsl_audiomix.c.obj
[ 19%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/boards/evkmimx8mp/demo_apps/hello_world/empty_rsc_table.c.obj
[ 23%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/devices/MIMX8ML8/utilities/str/fsl_str.c.obj
[ 28%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/components/serial_manager/fsl_component_serial_port_uart.c.obj
[ 33%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/devices/MIMX8ML8/utilities/debug_console/fsl_debug_console.c.obj
[ 38%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/components/lists/fsl_component_generic_list.c.obj
[ 42%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/boards/evkmimx8mp/demo_apps/hello_world/pin_mux.c.obj
[ 47%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/components/serial_manager/fsl_component_serial_manager.c.obj
[ 52%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/boards/evkmimx8mp/demo_apps/hello_world/board.c.obj
[ 57%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/components/uart/fsl_adapter_iuart.c.obj
[ 61%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/devices/MIMX8ML8/drivers/fsl_uart.c.obj
[ 66%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/devices/MIMX8ML8/utilities/fsl_assert.c.obj
[ 71%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/devices/MIMX8ML8/drivers/fsl_clock.c.obj
[ 76%] Building ASM object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/devices/MIMX8ML8/gcc/startup_MIMX8ML8_cm7.S.obj
[ 80%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/devices/MIMX8ML8/drivers/fsl_common.c.obj
[ 85%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/devices/MIMX8ML8/system_MIMX8ML8_cm7.c.obj
[ 90%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/devices/MIMX8ML8/utilities/fsl_sbrk.c.obj
[ 95%] Building C object CMakeFiles/hello_world.elf.dir/mnt/OK8MP/OK8MP-linux-sdk/OK8MP-FreeRTOS/boards/evkmimx8mp/demo_apps/hello_world/clock_config.c.obj
[100%] Linking C executable release/hello_world.elf
[100%] Built target hello_world.elf
$ cd release/
$ ls
hello_world.bin  hello_world.elf

三、运行、调试和自启动

3.1 使用 u-boot 运行3

  1. 串口线连接,查看设备管理器串口端口号

    a. 安装CH343SER驱动,连接PC和开发板调试端口。

    OKMX8MPQ-C 开发板接口示意图

    b. 打开 PC ”设备管理器“查看串口端口号,以电脑实际识别的端口号为准(==SERIAL-A 为 Linux== 的默认调试串口、 ==SERIAL-B 为 M7== 的调试串口) 。

    设备管理器查看串口端口号
    设备管理器查看串口端口号

  2. 打开 MobaXterm 客户端,连接两个终端,一个连接Linux,一个连接M7。串口设置如下图:

    MobaXterm 中串口设置
  3. 将编译出来的 hello_world.bin 拷贝到 TF(Fat32 分区) 的根目录下面,将 SD 插到开发板上,重
    启开发板, 通过==敲击空格键==进入 u-boot 菜单项,输入 1 进入shell 命令行 。

    switch to partitions #0, OK
    mmc2(part 0) is current device
    a1007 auth ok!
    flash target is MMC:2
    Net:   config yt8521
    eth0: ethernet@30be0000
    Fastboot: Normal
    Normal Boot
    Autoboot in 1 seconds
    
    -------------------------------------
    1: shell
    2: boot linux
    3: Display select
    0: reboot uboot
    -------------------------------------
    
  4. 在 u-boot 命令行执行如下命令:
    对于 debug/release 版本的 bin 文件,它运行在 ==TCM==,执行下列命令:

    fatload mmc 1:1 0x48000000 iuart_interrupt.bin;cp.b 0x48000000 0x7e0000 20000
    fatload mmc 1:1 0x48000000 amk4001.bin;cp.b 0x48000000 0x7e0000 20000 
    bootaux 0x7e0000
    
    

这些命令将镜像文件从SD卡的第一个分区复制到Cortex®-M7’的存储器,并从复位中释放Cortex®-M7。

The Cortex-M7 Core Platform includes the following:
• 32 KB L1 Instruction Cache
• 32 KB L1 Data Cache
• 256 KB TCM

终端执行命令
终端执行命令

​ 在 M7 的调试串口工具上可以看到打印信息如下 :

调试串口输出

3.2 VSCode 在线调试

步骤1:连接 JLINK 和硬件 JTAG 口

步骤2:开发板进入按空格进入Uboot阶段

步骤3:选择进入 IAR C-SPY 调试

步骤4:可进行单步调试、局部变量监控、调用堆栈、寄存器分析

3.4 开机自启动运行

  1. 用网线将开发板(上端网口)和PC连接到交换机上,并串口连接,启动后进入Linux系统,使用ifconfig命令查看开发板ip

飞凌网口连接图
飞凌网口连接图

  1. OKMX8MPQ-C板载2个千兆网卡,插入网线连接网络的情况下, 默认OKMX8MP开发板启动时固定
    eth0 IP地址为192.168.0.232。 配置如下:
    开发板IP: 192.168.0.232
    路由器IP: 192.168.0.1
    子网掩码: 255.255.255.0

    root@OK8MP:~# vi /etc/systemd/network/10-eth.network
    [Match]
    Name=eth0
    KernelCommandLine=!root=/dev/nfs
    [Network]
    Address=192.168.0.232/24
    Gateway=192.168.0.1
    DNS=192.168.0.1
    

    互相ping通

  2. 下载安装winscp并按图中配置

  3. 将固件 bin 文件拷贝到/run/media/img/img/mmcblk2p1 目录下 ,命名为forlinx_m7_tcm_firmware.bin (固定)

    • 可以设置 IAR/ARMCC 生成的文件名为 forlinx_m7_tcm_firmware.bin
    • 也可以修改直接修改生成的文件名为 forlinx_m7_tcm_firmware.bin

​ 拷贝完成后,在A核调试串口中输入【reboot】(==一定要输入reboot,直接电源开关,数据无法保存==)重启 OKMX8MPQ-C 板卡。

通过以上四步,可以实现 SCP 方式在开发 windows 主机和飞凌开发板Linux系统之间共享数据(包括 M 核生成的 bin文件)。当然也可以通过SD卡进入命令行后拷贝。

  1. 重启过程按空格键进入 uboot 命令行控制台 ,按“1”,进入shell,输入以下命令,配置自启动
# 使能 Cortex M7 核固件自启动环境变量
$ setenv load_forlinx_firmware "yes"
$ printenv bootcmd
# 将原来的 bootcmd 值前面加上 loadm7:
`` setenv bootcmd "loadm7;mmc dev ``{mmcdev}; if mmc rescan; then if run loadbootscript;then run bootscript; elif test ${fastboot_dev} = mmc1 && run loadupdate; then run mmcupdate; else if run loadimage; then run mmcboot; else run netboot; fi; fi; fi;"
$ saveenv
# 输入reset启动
$ reset
  1. 关闭自启动 FreeRTOS 固件,在 uboot 命令行终端输入以下内容:
$ setenv load_forlinx_firmware "no" 
$ saveenv 
$ reset

用户可以除/run/media/img/img/mmcblk2p1/forlinx_m7_tcm_firmware.bin 文件关闭 M7 核自启动。

如上第四、五步骤,参考OKMX8MPQ-C_MCU手册_V1.0_2021.08.25 1.4节。

  1. 强大的文本编辑器:VSCode介绍 | w3c笔记 (w3cschool.cn)

  2. IAR重大升级,支持VSCode,ST发布第一个带有处理单元的传感器-面包板社区 (eet-china.com)

  3. i.MX 8M Mini EVK快速入门指南_NXP 半导体

标签:02,FreeRTOS,环境,OK8MP,MX8MP,linux,world,hello,IAR
From: https://www.cnblogs.com/oddpage/p/imx8mp-devenv-02-compile-debug-run-env.html

相关文章

  • #yyds干货盘点#【愚公系列】2022年11月 微信小程序-导航(功能页)
    前言functional-page-navigator组件:是一个非常强大的组件,用于跳转插件的功能页,主要的参数如下:属性类型默认值必填说明最低版本versionstringrelease否......
  • 强化学习代码实战-02马尔科夫决策(蒙特卡洛方法)
    importnumpyasnpimportrandom#状态转移概率矩阵#很显然,状态4(第5行)就是重点了,要进入状态4,只能从状态2,3进入(状态2,3对于完成此项任务价值很大)P=np.array......
  • 【2022-11-08】Git使用
    一、Git介绍#Git简介Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很......
  • 702001 TXT 22G101-2图集的简介
    22G101-2图集的全称:混凝土结构施工图平面整体表示方法制图规则和构造详图(现浇混凝土板式楼梯)本图集制图规则适用于现浇混凝土板式楼梯。......
  • DASCTF X CBCTF 2022九月挑战赛
    DASCTFXCBCTF2022九月挑战赛期中考结束了有点时间,做点题熟一下手,欢迎讨论dino3D审计源码找到了发送请求的部分importrequestsfromhashlibimportmd5import......
  • [蓝桥杯 2022 省 B] 积木画
    [蓝桥杯2022省B]积木画题目描述小明最近迷上了积木画,有这么两种类型的积木,分别为\(I\)型(大小为\(2\)个单位面积)和\(L\)型(大小为\(3\)个单位面积):同时......
  • 【流水】2022.11.08
    今天有是信息课看python,孩子人傻了赶紧luogu上用python水了几道题。今天考试除了暴力分拿的十分健全就没啥优点了可怜紫飨被gank到三机房去了,可怜(悲听说要......
  • 构建golang本地编译开发环境
    1构建golang开发环境FROMcentos:centos7.6.1810USERrootRUNyuminstall-ywget&&cd/usr/local/src&&wgethttps://studygolang.com/dl/golang/go1.16.3.linu......
  • 2022.11.08 NOIP2022 模拟赛五
    「LibreOJNOIPRound#1」DNA序列注意到\(k=10\),\(|\Sigma|=4\),故本质不同的子串个数只有\(4^10\)种,可以直接压位存下来。时间复杂度\(O(nk)\)。Codeconstint......
  • 数据库编程——Oracle环境配置
    ​系统:win10x64目录:一、上节扩展——CP/UDPSocket调试工具v2.2二、数据库Oracle环境配置1、安装配置》常用Linux系统下载及学习网址2、linux-oracle服务器启动 一、上......