i.MX8M mini内置4核Cortex-A53和一个通用Cortex-M4小核,大核可以用来处理复杂的任务,而小核可以执行一些轻便任务。

今天给大家演示如何用启扬i.MX8M mini开发板的Cortex-M4内核运行一个“Hello World”的demo。

如何使用i.MX8M mini开发板的Cortex-M4内核进行程序编译?_Cortex-M4

如何使用i.MX8M mini开发板的Cortex-M4内核进行程序编译?_Cortex-M4_02

环境搭建

启扬i.MX8M mini开发板在启动时会首先启动A53核,然后再启动M4核,所以我们需要先从外部存储器将M4的镜像加载到内存中,这里我们选择SD卡加载到内存(TCML/DDR)。

首先我们需要从NXP官网下载官方提供的​​M4核SDK以及相关演示镜像​​。

下载内容如图所示:

如何使用i.MX8M mini开发板的Cortex-M4内核进行程序编译?_Cortex-M4_03

因为这里需要编译M4核镜像,所以就不再使用编译A53内核镜像的交叉编译器,而是使用新的交叉编译器,如下图所示:

如何使用i.MX8M mini开发板的Cortex-M4内核进行程序编译?_i.MX8M mini_04

交叉编译器安装完毕后我们需要将交叉编译器声明,命令如下:

export ARMGCC_DIR=GCC路径

export PATH=$PATH:GCC路径/bin

在编译之前我们还需要安装一些工具,防止编译出错,命令如下:

sudo apt-get install make

sudo apt-get install cmake

以上便是相关环境的搭建。

M4内核演示程序编译

首先,进入启扬i.MX8M mini的demo文件中,这里的路径是

/home/ylook/Linux/m4/sdk/boards/evkmimx8mm/demo_apps/hello_world

内容如下图所示,主要是demo的相关源文件以及头文件,还有已经编译好的bin文件。 

如何使用i.MX8M mini开发板的Cortex-M4内核进行程序编译?_Cortex-A53_05

因为我们要将demo编译到自己的内存上使用,所以就不再使用它提供的bin镜像。首先进入到armgcc目录中,这里有NXP提供用于制作镜像的脚本,不同的内存使用不同的脚本进行编译,且镜像的链接地址也不尽相同,具体可见sdk目录下的docs目录。

如何使用i.MX8M mini开发板的Cortex-M4内核进行程序编译?_i.MX8M mini_06

这里我们选择build_release.sh这个脚本,符合我们sd卡加载ddr的配置,./build_release.sh运行编译,编译结束后会在release目录下生成我们需要的bin镜像文件,如下图所示:

如何使用i.MX8M mini开发板的Cortex-M4内核进行程序编译?_Cortex-A53_07

hello_world.bin就是我们所需要的镜像文件。

接下来,我们首先将bin文件拷贝到SD卡中,这里需要注意SD卡最好保留一个分区以便uboot加载时能够很好地找到拷贝的文件。

插入SD卡,停留在uboot处,通过mmc list命令可以查看目前我们板子上有哪些mmc设备,如图显示有sd卡和emmc两种。

如何使用i.MX8M mini开发板的Cortex-M4内核进行程序编译?_启扬智能_08

mmc dev 0命令将当前mmc设备设置为sd卡;

mmc info命令查看sd卡的信息,保证我们的sd卡是完好且被识别的;

mmc part命令查看mmc分区信息,显示一个分区。

如何使用i.MX8M mini开发板的Cortex-M4内核进行程序编译?_i.MX8M mini_09

如何使用i.MX8M mini开发板的Cortex-M4内核进行程序编译?_Cortex-M4_10

确认无误后,将M4调试串口连接。因启扬i.MX8M mini开发板的M4调试串口为ttl电平,所以需要对应的串口连接,串口配置如下:

如何使用i.MX8M mini开发板的Cortex-M4内核进行程序编译?_Cortex-M4_11

配置完M4调试串口后,我们在A53上加载M4镜像,命令如下:

fatload mmc 0:1 0x48000000 hello_world.bin

cp.b 0x48000000 0x7e0000 0x20000

bootaux 0x7e0000

如何使用i.MX8M mini开发板的Cortex-M4内核进行程序编译?_Cortex-A53_12

运行成功的话就可以在m4调试串口上看到打印hello world.字样。

如何使用i.MX8M mini开发板的Cortex-M4内核进行程序编译?_启扬智能_13