iMX287A交织编译环境搭建
[Abp vNext 源码分析] - 19. 多租户
1.开发套件简介
- 开发板:EasyARM-i.MX287A
- 液晶屏:4.3寸TFT液晶,4线电阻触摸,分辨率480 × 272。
- 光盘材料版本:EasyARM-i.MX28xA_V1.05.iso
2.申明:
2.1 开发板设置
- 型号:EasyARM-i.MX287A
- 体系:Linux version 2.6.35.3 gcc 4.4.4
- IP地点:192.168.1.136
2.2 主机设置
- 体系:Linux主机,如Ubuntu 16.04
- IP地点:192.168.1.111
3.主机搭建交织编译环境
交织编译器是在PC上运转的编译器,然则编译后获得的二进制程序却不能在PC
上运转,而只能在开发板上运转。交织编译器定名体式格局平常遵照“处理器-体系-gcc”如许的
划定规矩,平常经由历程称号便能够晓得交织编译器的功用。
比方以下交织编译器:
- arm-none-eabi-gcc,示意目的处理器是 ARM,不运转操纵体系,仅运转前后台程序;
- arm-uclinuxeabi-gcc,示意目的处理器是 ARM,运转 uClinux 操纵体系;
- arm-none-linux-gnueabi-gcc,示意目的处理器是 ARM,运转 Linux 操纵体系;
- mips-linux-gnu-gcc,示意目的处理器是 MIPS,运转 Linux 操纵体系。
举行 ARM Linux 开发,一般挑选 arm-linux-gcc 交织编译器。ARM-Linux 交织编译器能够自行从源代码编译,也能够从第三方猎取。在能从第三方猎取交织编译器的情况下,请只管采纳第三方编译器而不要自行编译,一是编译历程烦琐,不能保证胜利,二是就算编译胜利,也不能保证交织编译器的稳固性,编译器的不稳固性会对后续的开发带来无穷隐患。而第三方供应的交织编译器一般都经由比较完善的测试,确认是稳固牢靠的。
交织编译器光盘途径:
EasyARM-i.MX28xA_V1.05/3、Linux/2、东西软件/Linux东西软件/gcc-4.4.4-glibc-2.11.1-multilib-1.0_EasyARM-iMX283.tar.bz2
主机只须要把这个文件解压到/opt
目次下,就完成了交织编译器的装置。
tar xjvf gcc-4.4.4-glibc-2.11.1-multilib-1.0.tar.bz2 -C /opt/
-C:指定解压途径,不指定章默许解压到当前目次
解压完成以后,交织编译东西链,即gcc/g++/gdb等东西的途径在
/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin
目次下
在装置交织编译器以后,还须要先装置32 位的兼容库和 libncurses5-dev 库:
sudo apt-get install ia32-libs
sudo apt-get install libncurses5-dev
若 Linux 主机体系没有装置 32 位兼容库,在运用交织编译东西的时刻可能会涌现毛病:
arm-fsl-linux-gnueabi-gcc: 没有谁人文件或目次
4.编译第一个ARM Linux程序——Hello World
有了交织编译东西,和PC平台的gcc运用方法一样,就能够直接编译第一个程序了。
cd ~
:切换到用户目次
touch hello.c
:新建一个c文件
vi hello.c
:输入C程序,固然也能够运用vim/gedit
#include "stdio.h"
int main(void)
{
printf("Hello World! -- By arm-gcc n");
return 0;
}
编写完成以后,先别急着用arm-gcc编译,先用Ubuntu自带的gcc编译一下,看有无语法毛病,能不能一般运转。编译这个C文件,并指定输出文件为pc.o
gcc hello.c -o pc.o
看一下这个文件的范例,并实行这个文件。
能够看出,没有语法毛病,生成了pc.o文件,这个文件是运转在x86_64架构体系上,即PC上的,而且运转结果是我们想要的。
好了,程序运转没问题,就能够运用arm-gcc来编译这个程序,并生成能够在arm开发板上运转的可实行文件了。
运用交织编译东西编译这个C程序,指定输出arm.o文件。
/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-fsl-linux-gnueabi-gcc hello.c -o arm.o
语法没有毛病,生成了arm.o文件,能够经由历程file a.out
检察这个文件的信息。
由于这个文件是运转在ARM架构的体系上的,所以在PC上不能运转,下面我们经由历程U盘把这个文件拷贝到开发板上去运转。
5.开发板运转U盘中的可实行文件
把arm.o文件拷贝到U盘中,并把U盘插到开发板的USB接口。
开发板上电,衔接上串口终端,Ubuntu下的串口东西许多,minicom/putty/picocom等等。我运用的是picocom,指定波特率115200和串标语:
sudo picocom -b 115200 /dev/ttyUSB0
开发板Linux体系用户名和暗码都是root
登录进去以后,U盘默许挂载在media目次下。
能够看到,程序运转一般。至此,一个简朴的hello world程序就完成了。
6.设置交织编译东西到环境变量
在举行交织编译时,我们是运用的绝对途径来编译C程序,然则这个途径太长了,每次输入很贫苦。
那末能不能像Windows那样,把交织编译东西地点的途径增加到PATH环境变量呢?固然是能够的。
6.1 环境变量设置的几种体式格局
注重:以下涉及到文件修正的处所,须要先实行mount -o remount rw /
把文件体系挂载为可读写,不然不能保留,由于板子默许一切的文件都是只读的。
Ubuntu设置环境变量重要以下几种体式格局:
- export暂时设置
以下这两种体式格局都是能够的,能够在终端直接实行,实行完成以后马上见效,但只在当前终端有用,退出终端自动失效。
#途径增加在末了面
export PATH=$PATH:/要增加的途径
#途径增加在最前面
export PATH=/要增加的途径:$PATH
- 修正用户设置文件bashrc
引荐运用这类体式格局,修正~/.bashrc文件只对当前用户有用,而不影响其他用户的设置文件。
#实行以下敕令,编辑bashrc文件
sudo vi ~/.bashrc
#在文件末了增加一行
export PATH=$PATH:/要增加的途径
#保留以后soure敕令使修正马上见效
source ~/.bashrc
- 修正全局设置文件/etc/profile
这类体式格局修正的是全局环境变量设置文件,针对一切的用户都有用。
#实行以下敕令,编辑/etc/profile文件
sudo vi /etc/profile
#在文件末了增加一行
export PATH=$PATH:/要增加的途径
#保留以后soure敕令使修正马上见效
source /etc/profile
注重:修正环境变量设置文件以后,必需实行soure,使修正见效,不然不会马上见效。
6.2 iMX287A交织编译东西链增加到环境变量
- 暂时设置
export PATH=$PATH:/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/
- 对当前用户永远有用
#实行以下敕令,编辑bashrc文件
sudo vi ~/.bashrc
#在文件末了增加一行
export PATH=$PATH:/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/
#保留以后soure敕令使修正马上见效
source ~/.bashrc
- 对一切用户永远有用
#实行以下敕令,编辑/etc/profile文件
sudo vi /etc/profile
#在文件末了增加一行
export PATH=$PATH:/opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/
#保留以后soure敕令使修正马上见效
source /etc/profile
6.3 检察当前环境变量
修正完成以后,能够经由历程echo $PATH
敕令检察当前的环境变量途径,以确认是不是增加胜利。
能够简朴理解为$PATH=这些字符串。
当输入arm-fsl
时,按下TAB键,假如能自动补全,申明环境变量设置胜利,不然须要搜检是不是设置准确。
7.scp传输文件到开发板
在运用交织编译东西链,编译出arm.o文件时,我们是经由历程拷贝到U盘,然后把U盘插到开发板上来运转程序的,然则如许未免太贫苦了。
那末有无一种简朴的体式格局,能够在PC Ubuntu主机和开发板疾速轻易的举行文件传输呢?其实有许多种,nfs,ftp,tftp等等,这里我们运用一种最简朴的体式格局:scp敕令。
7.1 从当地复制到长途
基础的敕令花样重要有以下几种:
#复制当地文件到长途文件夹,指定了用户名,须要输入暗码
scp local_file remote_username@remote_ip:remote_folder
#复制当地文件到长途文件,指定了用户名,须要输入暗码
scp local_file remote_username@remote_ip:remote_file
#复制当地文件到长途文件夹,未指定用户名,须要输入用户名和暗码
scp local_file remote_ip:remote_folder
#复制当地文件到长途文件,未指定用户名,须要输入用户名和暗码
scp local_file remote_ip:remote_file
运用示例:
scp /home/space/music/1.mp3 root@192.168.1.136:/home/root/others/music
scp /home/space/music/1.mp3 root@192.168.1.136:/home/root/others/music/001.mp3
scp /home/space/music/1.mp3 192.168.1.136:/home/root/others/music
scp /home/space/music/1.mp3 192.168.1.136:/home/root/others/music/001.mp3
复制全部目次及其子文件
#指定了用户名,须要输入暗码
scp -r local_folder remote_username@remote_ip:remote_folder
#未指定用户名,须要输入用户名和暗码
scp -r local_folder remote_ip:remote_folder
运用示例:
#复制当前music目次下一切文件到长途others目次,指定了用户名,须要输入暗码
scp -r /home/space/music/ root@192.168.1.136:/home/root/others/
#未指定用户名,须要输入用户名和暗码
scp -r /home/space/music/ 192.168.1.136:/home/root/others/
7.2 从长途复制到当地
从长途复制到当地,只需将从当地复制到长途的敕令的后2个参数换取次序即可,以下实例
运用实例:
#复制文件
scp root@192.168.1.136:/home/root/others/music /home/space/music/1.mp3
#复制目次
scp -r 192.168.1.136:/home/root/others/ /home/space/music/
申明
- 1.假如长途效劳器防火墙有为scp敕令设置了指定的端口,我们须要运用 -P 参数来设置敕令的端标语。敕令花样以下:
#scp 敕令运用端标语 4588
scp -P 4588 remote@192.168.1.136:/usr/local/sin.sh /home/administrator
- 2.运用scp敕令要确保运用的用户具有可读取长途效劳器响应文件的权限,不然scp敕令是没法起作用的。
7.3 PC传输文件到ARM开发板
scp敕令是基于物理网口的,在举行传输之前,须要肯定开发板和PC主机是能够一般通讯的。
- 开发板设置eth0网口IP地点:
ifconfig eth0 192.168.1.136 up
- 主机设置IP地点
经由历程有线衔接选项,手动设置IPv4地点
开发板和主机相互ping,测试收集是不是一般。
如许就申明是一般的。
把PC主机上的arm.o文件传输到开发板上:
scp ~/arm.o root@192.168.1.136:/root
假如涌现以下毛病:
只须要实行一下提醒的那一行敕令就好了:
ssh-keygen -f "/home/whik/.ssh/known_hosts" -R 192.168.1.136
假如照样报错:
那就把knows_host文件删除了
rm ~/.ssh/know_hosts
再实行scp敕令:
先输入yes,然后输入开发板的登录暗码,下面会显现传输的进度。
到开发板上看一下:
8.SSH登录开发板
假如能传输胜利,申明收集是通行的。那末还能够运用SSH体式格局登录开发板,和运用串口终端的结果是完整一样的。
ssh user_name@remot_ip
如:ssh root@192.168.1.136
如许,运用一根网线就完成了终端和文件传输的功用,就不必USB-TTL模块了。
9. NFS传输文件
另有一种比较经常使用的传输体式格局,那就是在主机搭建启动NFS效劳器,把文件夹设置同享目次,然后开发板把效劳器(PC)上的这个文件夹挂载到当地,那PC和开发板都能够直接接见这个文件夹。
9.1 Ubuntu主机装置NFS效劳器
#装置NFS效劳器
sudo apt-get install nfs-kernel-server
#装置NFS客户端
sudo apt-get install nfs-common
9.2 Ubuntu主机设置同享目次
建立或设置要同享的目次
我的同享目次:/home/whik/imx287/share
并设置最宽松的权限:
#加上一切的权限
sudo chmod -R 777 /home/whik/imx287/share
#任何用户
sudo chown –R nobody /home/whik/imx287/share
指定NFS同享目次:
#翻开exports文件
sudo vi /etc/exports
#在文件末了增加一行
/home/whik/imx287/share *(rw,sync,no_root_squash)
#示意恣意IP网段都能够接见,权限最宽松
主机启动NFS效劳器:
#启动
sudo /etc/init.d/nfs-kernel-server start
#重启
sudo /etc/init.d/nfs-kernel-server restart
#住手
sudo /etc/init.d/nfs-kernel-server stop
在 NFS 效劳已启动的情况下,假如修正了“/etc/exports”文件,须要重启 NFS 效劳,以革新 NFS 的同享目次。固然在下一次启动体系时,NFS 效劳是自动启动的。
检察当前一切的同享目次:showmount -e
9.3 测试NFS效劳器启动胜利
测试是不是启动胜利,就是先把PC主机同享目次挂载到PC当地,PC主机地点:192.168.1.111
#把同享目次挂载到/mnt目次
sudo mount -t nfs 192.168.1.111:/home/whik/imx287/share /mnt -o nolock
假如/mnt目次和同享目次下的内容完整一致,申明挂载胜利。
如许,就申明PC主机上的NFS效劳器胜利启动,而且同享目次是能够一般接见的。
那末,ARM开发板上,怎样挂载呢?在举行挂载之前,先确认主机和开发板收集是通行的,即相互能ping通。
串口或ssh登录开发板以后,实行以下敕令:
#开发板挂载主机同享目次到mnt
mount -t nfs 192.168.1.111:/home/whik/imx287/share /mnt -o nolock
#或许
mount -t nfs -o nolock,vers=2 192.168.1.111:/home/whik/imx287/share /mnt
挂载胜利以后,在开发套件的/mnt 目次下也能够瞥见主机同享的目次。然后开发套件就能够像操纵当地目次一样去操纵主机的同享目次了。
假如不想挂载了,能够运用umount /mnt
来作废挂载。有一点要特别注重,无论是实行mount照样umount,实行敕令的当前途径都不能是操纵的目的途径。即不能在/mnt目次去实行mount和umount敕令。
主机和开发板传输文件的体式格局另有许多种,我个人经经常使用scp敕令,不须要设置那末多。其他的体式格局如ftp/tftp/sftp等都是一样的道理,这里不再引见。
10.开机启动剧本设置
开发板ip设置,在开发板掉电重启,不会默许设置,所以每次启动以后,都须要从新ifconfig eth0 192.168.1.136
来设置一下IP地点。如许照样太贫苦了,那末能不能开机自动实行这些设置呢?这就涉及到开发板初始化剧本文件了。
#从新挂载一切文件为可读写权限
mount -o remount rw /
#编辑启动剧本文件
vi /etc/init.d/rcS
#文件末端增加以下内容
#启动界面
/usr/share/zhiyuan/zylauncher/start_zylauncher &
#设置eth0的IP地点
ifconfig eth0 192.168.1.136 &
#自动猎取IP,须要衔接路由器联网时运用
#udhcpc &
#挂载linux主机同享目次到mnt
mount -t nfs -o nolock,vers=2 192.168.1.111:/home/whik/imx287/share /mnt &
#从新挂载文件为可读写权限
mount -o remount rw / &
以上敕令,能够根据须要来设置。
注重,假如程序是一个壅塞程序(运转后不会退出或返回的程序),则可能会致使位于厥后的指令或程序没法实行。再者,若该程序一直占用串口终端,将会形成其他程序,没法经由历程串口终端与用户交互。关于此类运用程序,能够在厥背面增加&
几个文件的位置:
- 开发板字库文件途径:
/usr/lib/fonts
- 桌面体系启动界面:
/usr/share/zhiyuan/zylauncher
- Qt 4库文件途径:
/usr/lib
- 查找字库文件:
find / -name "*.ttf"
使用Taiko + Gauge进行自动化测试(一)