IT教程 ·

iMX287A交织编译环境搭建

[Abp vNext 源码分析] - 19. 多租户

1.开发套件简介

  • 开发板:EasyARM-i.MX287A
  • 液晶屏:4.3寸TFT液晶,4线电阻触摸,分辨率480 × 272。
  • 光盘材料版本:EasyARM-i.MX28xA_V1.05.iso
    iMX287A交织编译环境搭建 IT教程 第1张

2.申明:

2.1 开发板设置

  • 型号:EasyARM-i.MX287A
  • 体系:Linux version 2.6.35.3 gcc 4.4.4
  • IP地点:192.168.1.136
    iMX287A交织编译环境搭建 IT教程 第2张

    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目次下
iMX287A交织编译环境搭建 IT教程 第3张

在装置交织编译器以后,还须要先装置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

看一下这个文件的范例,并实行这个文件。
iMX287A交织编译环境搭建 IT教程 第4张能够看出,没有语法毛病,生成了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检察这个文件的信息。
iMX287A交织编译环境搭建 IT教程 第5张由于这个文件是运转在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目次下。
iMX287A交织编译环境搭建 IT教程 第6张
能够看到,程序运转一般。至此,一个简朴的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敕令检察当前的环境变量途径,以确认是不是增加胜利。
iMX287A交织编译环境搭建 IT教程 第7张能够简朴理解为$PATH=这些字符串。

当输入arm-fsl时,按下TAB键,假如能自动补全,申明环境变量设置胜利,不然须要搜检是不是设置准确。
iMX287A交织编译环境搭建 IT教程 第8张

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
    iMX287A交织编译环境搭建 IT教程 第9张
  • 主机设置IP地点
    经由历程有线衔接选项,手动设置IPv4地点
    iMX287A交织编译环境搭建 IT教程 第10张
    开发板和主机相互ping,测试收集是不是一般。
    iMX287A交织编译环境搭建 IT教程 第11张如许就申明是一般的。

把PC主机上的arm.o文件传输到开发板上:

scp ~/arm.o root@192.168.1.136:/root

假如涌现以下毛病:
iMX287A交织编译环境搭建 IT教程 第12张
只须要实行一下提醒的那一行敕令就好了:

ssh-keygen -f "/home/whik/.ssh/known_hosts" -R 192.168.1.136

假如照样报错:
iMX287A交织编译环境搭建 IT教程 第13张那就把knows_host文件删除了

rm ~/.ssh/know_hosts

再实行scp敕令:
iMX287A交织编译环境搭建 IT教程 第14张先输入yes,然后输入开发板的登录暗码,下面会显现传输的进度。

到开发板上看一下:

iMX287A交织编译环境搭建 IT教程 第15张

8.SSH登录开发板

假如能传输胜利,申明收集是通行的。那末还能够运用SSH体式格局登录开发板,和运用串口终端的结果是完整一样的。

ssh user_name@remot_ip

如:ssh root@192.168.1.136

iMX287A交织编译环境搭建 IT教程 第16张如许,运用一根网线就完成了终端和文件传输的功用,就不必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
iMX287A交织编译环境搭建 IT教程 第17张

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目次和同享目次下的内容完整一致,申明挂载胜利。
iMX287A交织编译环境搭建 IT教程 第18张如许,就申明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进行自动化测试(一)

参与评论