时间:2019年1月22日
单位需要在EasyARM-i.MX287A开发板上做嵌入式开发,这块板子现在已经极其廉价,而且参考资料多又全,是入门不错的选择。之前没有接触过硬件编程相关的技术,参考了很多前辈的经验,实现了Arm开发板上运行Hello World,此文记录主要的实现过程。
Arm开发现有WinCE和Linux两个平台,WinCE符合大多数用户使用Windows系统的习惯,Linux系统开发好像更为主流,技术交流也更多,本文用最简单的方法实现Arm Helloworld程序。
基本流程:
Arm的操作系统不同于我们桌面版的Linux,无法直接执行gcc编译出的可执行文件,需要一个Linux操作系统计算机作为宿主机,使用Arm专用的编译器编译成Arm的可执行文件,放到Arm中运行,所以本文记录以下过程:
- arm-linux-gcc 安装
- MX287A上电
- MX287A与宿主机串口通信
- 编译程序
1、arm-linux-gcc 安装
参考:https://www.aliyun.com/jiaocheng/135386.html
- 首先下载arm-linux-gcc-4.4.3.tar.gz安装包,安装包地址:
http://www.cr173.com/soft/42654.html
- 解压安装包:
sudo tar -zxvf arm-linux-gcc-4.4.3.tar.gz
- 在/usr/local目录下新建arm目录,并拷贝解压的文件到该目录:
cd /usr/local
sudo mkdir arm
sudo chmod 777 arm
sudo cp -r ~/download/arm-linux-gcc-4.4.3 /usr/local/arm
- 修改环境变量,把arm-linux-gcc添加到PATH中:
sudo gedit ~/.bashrc
在文件末尾加上
export PATH=$PATH:/usr/local/arm/arm-linux-gcc-4.4.3/bin
执行 source .bashrc 使更改生效
- 测试是否安装成功
arm-linux-gcc -v
输出:
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /opt/FriendlyARM/mini2440/build-toolschain/working/src/gcc-4.4.3/configure --build=i386-build_redhat-linux-gnu --host=i386-build_redhat-linux-gnu --target=arm-none-linux-gnueabi --prefix=/opt/FriendlyARM/toolschain/4.4.3 --with-sysroot=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --enable-languages=c,c++ --disable-multilib --with-arch=armv4t --with-cpu=arm920t --with-tune=arm920t --with-float=soft --with-pkgversion=ctng-1.6.1 --disable-sjlj-exceptions --enable-__cxa_atexit --with-gmp=/opt/FriendlyARM/toolschain/4.4.3 --with-mpfr=/opt/FriendlyARM/toolschain/4.4.3 --with-ppl=/opt/FriendlyARM/toolschain/4.4.3 --with-cloog=/opt/FriendlyARM/toolschain/4.4.3 --with-mpc=/opt/FriendlyARM/toolschain/4.4.3 --with-local-prefix=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-c99 --enable-long-long --enable-target-optspace
Thread model: posix
gcc version 4.4.3 (ctng-1.6.1)
即为安装成功。
若出现
error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory 说明当前64位机器缺少32位的库,直接安装:
apt-get install lib32stdc++6
报错 error while loading shared libraries: libz.so.1
-
sudo apt-get update
- sudo apt-get install lib32ncurses5 lib32z1
2、MX287A上电
首先组装液晶屏和主板;
短接看门狗WDG;
通入5v电源(一般手机充电器即可)即自动开机;
开机自带Linux系统,界面可以触摸。
3、MX287A与宿主机串口通信
开发套件有调试串口,可用于与宿主机通信:

但是该串口输入输出为TTL电平,需要将这四个端口用杜邦线与TTL转RS-232电平的模块相连接,转换成RS-232电平接口才能与计算机接口正常通信。

串口编程相关的信息我在另一篇博客中有记录:https://blog.youkuaiyun.com/zywvvd/article/details/86536398
连接完毕后将电脑端的串口插在转换模块上。
在电脑端安装minicom
sudo apt-get install minicom
minicom 安装完成后,需要经过配置才能使用。在终端输入下面命令进入 minicom 的配置界面:
sudo minicom –s

选中“Serial prot setup”菜单项,按A设置串口设备,将该字符串改为你计算机用来通信的串口设备文件名称(如我的为:ttyUSB0),其他设置为:“115200 8N1 ”( 115200 波特率、 8 位数据位、无奇偶校验、 1 位停止位)。硬、软件流控制请选择 No。
这时按“Enter”键返回 minicom 的配置主菜单。然后选中 Save setup as dfl 菜单项。
退出后执行:
sudo minicom -c on
此时再次对Arm加电开机,minicom界面会显示开发板的启动信息,随后登陆开发板,用户名和密码都是root,此时已经完成计算机与开发板的串口通信。
4、编译程序
简单的Hello World 程序:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello World!\n");
return 0;
}
arm-linux-gcc Hello.c -o Hello.out -std=c99
将Hello.out文件用u盘复制到Arm中,./ 即可运行。