iTOP-STM32MP157开发板采用ST推出的双核cortex-A7+单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板+底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐用,可满足高速信号环境下使用。共240PIN,CPU功能全部引出:底板扩展接口丰富底板板载4G接口(选配)、千兆以太网、WIFI蓝牙模块HDMI、CAN、RS485、LVDS接口、温湿度传感器(选配)光环境传感器、六轴传感器、2路USB OTG、3路串口,CAMERA接口、ADC电位器、SPDIF、SDIO接口等
第三部分 嵌入式平台入门实操
第二十七章 交叉编译器的安装和使用
本章内容对应视频讲解链接(在线观看):https://www.bilibili.com/video/BV1M7411m7wT?p=29
前面我们写了linux上第一个c程序 heollo world ,我们是使用gcc 编译器进行代码的编译,编译得到的可执行文件只能在X86结构的PC上运行,我们来看下,在我的ubuntu下有一个 hello.c ,这个程序也非常简单,就是一个 hello world ,我们来编译一下,然后我们运行下可执行文件,这个可执行文件是可以在PC上运行的。如下图所示。
然后我们使用 file 命令来看下这个文件,这个文件是可以在X86上运行的,但是它不能在ARM上运行,因为它这里写的是X86。如下图所示。
如果我们想在ARM上运行,就要使用ARM的编译器,然后在X86上进行编译。因为我们使用 ARM 的编译器编译完了之后,是把我们的可执行程序放到开发板上来运行,而不是在PC上运行的,这个过程大家可以把它理解成交叉,然后再和我们的编译器结合起来就叫做交叉编译器。编译器在用户网盘资料"“iTOP-STM32MP157开发板光盘资料\04_TF-A、uboot和内核源码\交叉编译器” 路径下的“gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz”,如下图所示。
接着通过 ssh 工具,将“iTOP-STM32MP157开发板光盘资料\04_TF-A、uboot和内核源码\交叉编译器” 路径下的“gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz”编译器拷贝到“/usr/local/arm/”目录下。注意:此编译器用来编译uboot和kernel,编译应用程序的交叉编译器应与文件系统的编译器保持一致。
使用如下命令解压编译器,如下图所示,
tar -vxf gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz
解压完成,会得到“gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf”文件夹。
使用命令“cd ~”进入文件系统根目录下(一定要使用 root 账户),接着使用“vi .bashrc”命令,打开环境变量配置文件,如下图所示。
在环境变量配置文件最底行,添加以下内容。
export PATH=$PATH:/usr/local/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin
如下图所示,然后保存退出。
接着还需要更新一下环境变量,如下图所示,使用命令“source .bashrc”。
最后做一下环境变量测试,Ubuntu 控制台中输入“arm-”,然后按键盘上的“Tab” 键,会出现如下图所示内容。
至此我们的编译环境就搭建完成了。
然后我们进到test目录下,我们使用交叉编译器来编译下 hello.c ,编译方法和我们之前使用gcc 编译方法是一样的,gcc加 hello.c这个源文件,然后后边跟上-o 指定的文件名称,格式是一摸一样的,只不过把gcc编译器换成了交叉编译器,使用 arm-none-linux-gnueabi- 后边跟上gcc 和我们要编译的原文件的名字,-o指定下我们要生成的可执行文件,在此我们还要在设置一下环境变量,这样我们就编译成功了,如下图所示。
arm-none-linux-gnueabihf-gcc hello.c -o hello -static
然后我们可以来运行下这个 hello ,大家看他这里是提示错误的,我们不能执行,如下图所示。
使用file 命令来看下,这里显示的架构是arm ,说明我们这个可执行文件是在开发板上运行的而不是在X86上运行的,可以看到,使用gcc 编译器编译出来的可执行文件,它的架构是X86的,所以我们使用 gcc编译器编译完的可执行程序只能在X86的 ubuntu上运行,不能在arm上运行。大家通过file 命令就可以区分了,大家可以自己安装下。如下图所示。