i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT、4G模块、CAN、RS485等接口一应俱全。H264、VP8视频硬编码,H.264、H.265、VP8、VP9视频硬解码,并提供相关历程,支持8路PDM接口、5路SAI接口、2路Speaker。系统支持Android9.0(支持获取root限)Linux4.14.78+Qt5.10.1、Yocto、Ubuntu20、Debian9系统。适用于智能充电桩,物联网,工业控制,医疗,智能交通等,可用于任何通用工业和物联网应用、
第三部分 嵌入式平台入门实操
从这一部分开始,我们就要接触开发板了。在开始接下来的学习之前,有些前置知识需要大家掌握。切记不能跳过,否则会对接下来的学习造成困扰。
请先学习并熟练掌握:【北京迅为】iTOP-iMX8MM开发板使用手册第五部分开发板固件烧写和第四部分开发板固件编译中的Linux固件编译。
第二十七章 交叉编译器的安装和使用
我们写了linux上第一个c程序 heollo world ,是使用gcc 编译器进行代码的编译,编译得到的可执行文件只能在X86结构的PC上运行,不能在开发板上运行,如果要在arm开发板上运行,则需要交叉编译这个C程序。
什么是交叉编译呢?
如果我们想在ARM上运行,就要使用ARM的编译器,然后在X86上进行编译。因为我们使用 ARM 的编译器编译完了之后,是把我们的可执行程序放到开发板上来运行,而不是在PC上运行的,这个过程大家可以把它理解成交叉,然后再和我们的编译器结合起来就叫做交叉编译器。
接下来我们来看下,如何来交叉编译C程序呢?首先我们要安装交叉编译器,i.MX8MM的Linux系统的交叉编译器是单独提供的,需要先安装交叉编译器,路径为“iTOP-iMX8MM开发板/01_iMX8MM开发板光盘资料/20210601/02-烧写工具和编译器/编译器”。
我们现在ubuntu系统的任意目录下创建一个hello.c文件 ,这个程序也非常简单,就是一个 hello world ,我们来编译一下,然后运行下可执行文件,这个可执行文件可以在PC上运行的。如下图所示。
然后我们使用 file 命令来看下这个文件,这个文件可以在X86上运行的,但是它不能在ARM上运行,因为它这里写的是X86。如下图所示。
那么为了可以让程序运行在开发板上,我们需要将程序编译为arm,那么就需要交叉编译程序了,接下来将教大家如何交叉编译程序。
27.1 设置交叉编译工具
1 编译环境是开发的基础,首先我们来安装编译环境,我们将fsl-imx-xwayland-glibc-x86_64-meta-toolchain-qt5-aarch64-toolchain-4.14-sumo.sh脚本拷贝到Ubuntu的/home/topeet/linux目录下(linux文件夹是作者新建的目录)
2 然后输入以下命令:
./fsl-imx-xwayland-glibc-x86_64-meta-toolchain-qt5-aarch64-toolchain-4.14-sumo.sh
3 将安装路径设置保持默认,按下回车键,如果有You are about to install the SDK to "/opt/fsl-imx-xwayland/4.14-sumo". Proceed[Y/n]? 提示,则输入Y进行确认,然后输入密码,如下图所示:
4 安装完成后如下图所示:
5 安装完成后输入以下命令设置环境变量,并输入“aarch64-poky-linux-gcc -v”检查安装是否成功。出现如下图所示的信息代表安装成功。注意:每当重启虚拟机或者打开新的终端窗口都需要重新执行设置环境变量。
. /opt/fsl-imx-xwayland/4.14-sumo/environment-setup-aarch64-poky-linux
27.2 编写C程序
作者在/home/topeet/test目录下新建一个helloworld.c文件,此处helloworld.c文件仅为事例,大家可以选择要编译的程序,hello.c的内容为
#include <stdio.h>
int main(){
printf("hello world\n");
printf("hello world\n");
printf("hello world\n");
return 0;
}
编写好,保存文件。
27.3 交叉编译C程序
在第一步设置交叉编译工具的窗口编译C程序,注意!第一步设置交叉编译工具是设置临时环境变量,只在当前设置的窗口有效,如果第一步设置交叉编译工具的窗口关闭了,请按照第一步再次打开并设置环境变量。
编译helloworld.c程序如下图所示:
aarch64-poky-linux-gcc helloworld.c -o helloworld --sysroot=/opt/fsl-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux
编译完生成helloworld.c可执行文件,如下图所示:
输入命令“file helloworld.c”,如下图所示:
27.4 运行C程序
我们将第三步编译好的helloworld可执行程序拷贝到开发板上,首先将hello可执行程序拷贝到U盘上,然后将U盘插到开发板的usb口,打印信息如下图所示:
新建挂载目录,如下图所示:
挂载U盘,如下图所示:
进入到U盘挂载目录,将helloworld复制到开发板的bin目录下,如下图所示:
赋予文件权限,如下图所示:
运行程序,如下图所示:
运行程序成功,打印了三次“hello world”。