所谓交叉编译,当前项目下,即在Linux主机上编译ZYNQ-arm-Linux系统的可执行文件,由于在ZYNQ上编译速度非常慢,影响编程效率,最好的办法是在Linux主机上调试代码并直接生成可以在ZYNQ板子上运行的可执行文件。术语上,Linux主机称为主机,ZYNQ板子称为目标机,两者之所以不同,是由于架构的问题。虽然两者操作系统一样,但是Linux主机是x86或者x32的,而ZYNQ的Linux是跑在arm内核上的,各自的编译器是不一样的,所使用的库也不一样。
Xilinx配置整合了交叉编译工具即arm-xilinx-Linux-gnueabi-系列,下面的资料民间链接第二条的第一步是该交叉编译链的安装,不过版本有点旧,个人一开始不懂也是安装的这个交叉编译链,但是,目前(2018/9/19),尝试去下载更新的交叉编译链,官网提供链接(GNU TOOL)下面没有找到,http://xilinx.wikidot.com/zynq-tools 该文所说,这个arm-xilinx-Linux-gnueabi是集成在SDK里面的,可以单独下载,然而并没有search到。但是尝试安装完整个VIVADO的SDK之后,在XIlinx/sdk/2016.4/gnu/arm/lin/bin里面可以看到已经生成了交叉编译工具。
在Linux主机上安装完vivado2016.4 SDK版本之后,可以在XIlinx/sdk/2016.4/gnu/arm/lin/bin里面找到交叉编译所需要的工具,那么可以直接把环境变量定位到这里就可以。
1、第一种方法
实际上,Xilinx早就给你想好了,安装好vivado的sdk之后,直接source 安装文件下的settings64.sh就可以了。
source /Music/Xilinx/SDK/2016.4/settings64.sh
arm-xilinx-linux-gnueabi-gcc -v //测试一下,出现版本是4.9
第二种方法当没有看见
2、第二种方法
打开终端(ROOT)
gedit /etc/bash.bashrc
开头第二句添加如下
export ARCH=arm
export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
export PATH=/Music/Xilinx/SDK/2016.4/gnu/arm/lin/bin/:$PATH
记得source /etc/bash.bashrc
个人把VIVADO安装在/Music下,所以前面路径部分按照自己安装位置修改。
修改完之后查看版本如下
arm-xilinx-linux-gnueabi-gcc -v
可以看到版本是4.9.2,比下面百度云盘提供的更新。可以编写一个helloworld测试一下这个交叉编译工具是否可以用,然后把生成的可执行文件移动到ZYNQ上看是否可以编译。
Ubuntu16.04实际上还有一个更加简单的方式,直接在命令行输入
sudo apt-get install gcc-arm-linux-gnueabihf
sudo apt-get install g++-arm-linux-gnueabihf
在usr/bin可以看到该编译器,交叉编译时,直接用(path路径里本来就配置了usr/bin)就是了。
1、在http://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vivado-design-tools/archive.html 上找到
下载,个人试过上一个的Linux安装工具,实际上由于网络问题或者其他,总是会在中途中断,只有这个下载正常,而且可以迅雷下载,美滋滋~.~。
注意解压需要在LINUX下解压。如果在Windows下下载完毕,拷贝到Linux之后,在压缩包文件下执行
tar zxvf Xilinx_Vivado_SDK__2016.4_0124_1.tar.gz
sudo su
cd Xilinx_Vivado_SDK__2016.4_0124_1
./xsetup
个人基本要用到的都装上了。
哦对了,别忘了安装32位的编译库,ubuntu16.04的32位库如下
sudo apt-get install lib32ncurses5
sudo apt-get install lib32z1
安装过程出现的yes or no全部yes。
实际上,这个编译工具也可以作为qtcreator上作为编译ZYNQ的交叉编译工具。具体修改方法如下。
参考 https://blog.csdn.net/yaowangii/article/details/78552083
主机:ubuntu16.04LTS 目标机:ZYNQ7000系列上,ARM-A9
QT库版本:4.8.5,qtcreator任意版本
曾经尝试使用5.4.2版本,由于某些问题,make失败
官方:http://www.wiki.xilinx.com/Qt %26 Qwt Build Instructions (Qt 5.4.2%2C Qwt 6.1.2)
民间:https://www.cnblogs.com/bombe1013/p/3294303.html
https://www.cnblogs.com/bombe1013/p/3294301.html
资料下载:http://pan.baidu.com/share/link?shareid=3831914682&uk=1092766566
1、解压qt-everywhere-opensource-src-4.8.5.tar.gz到任意文件夹内
2、配置并指定编译安装目录为/opt/qt-4.8.5,配置过程出现提示输入o和yes
3、编译,安装。编译时间很长
4、修改环境变量,添加如下代码
5、保存文件之后source下
tar -xzvf qt-everywhere-opensource-src-4.8.5.tar.gz
cd qt-everywhere-opensource-src-4.8.5.tar
./configure -prefix /opt/qt-4.8.4
make
make install
gedit /etc/bash.bashrc
添加
export PATH=/opt/qt-4.8.4/bin:$PATH
export QTDIR=/opt/qt-4.8.4
export MANPATH=QTDIR/man:MANPATH
export LD_LIBRARY_PATH=QTDIR/lib:LD_LIBRARY_PATH
source /etc/bash.bashrc
安装qt-creator
sudo apt-get install qtcreator
1、建立几个环境变量
export ZYNQ_QT_BUILD=/opt/qt-arm/build
export ZYNQ_QT_INSTALL=/opt/qt-arm/install
export PATH=$ZYNQ_QT_INSTALL/bin:PATH
2、在opt内建立响应目录
cd /opt
mkdir qt-arm
cd qt-arm
mkdir build install
3、进入qt-everywhere-opensource-src-4.8.5.tar.gz文件夹内,解压文件到ZYNQ_QT_BUILD目录内
tar -xzvf qt-everywhere-opensource-src-4.8.5.tar.gz -C $ZYNQ_QT_BUILD
4、将从官网下载的qmake.conf拷贝到制定位置
比如在qmake.conf所在目录下,执行
cp qmake.conf $ZYNQ_QT_BUILD/qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-arm-gnueabi-g++/
起初文件名为qmake_4.7.3.conf,修改为qmake.conf后会覆盖原先路径下有的qmake.conf。
5、因为该配置文件基于Qt4.7,为编译Qt4.8,需要修改文件内容
gedit $ZYNQ_QT_BUILD/qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/linux.conf)
include(../../common/qws.conf)
保存退出
6、配置参数
./configure \
-embedded arm \
-xplatform qws/linux-arm-gnueabi-g++ \
-little-endian \
-opensource \
-host-little-endian \
-confirm-license \
-nomake demos \
-nomake examples \
-prefix $ZYNQ_QT_INSTALL
7、make和make install
make
make install
时间很长,静侯。
8、将Xilinx交叉编译库中的内容复制到Qt库中,输入命令
cp -P /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/usr/lib/libstdc++.so* $ZYNQ_QT_INSTALL/lib
这样就完成了交叉编译库的安装。这里的“Xilinx交叉编译库”参考开头链接中的安装介绍
该镜像可以移植到ZYNQ上
cd $ZYNQ_QT_BUILD
dd if=/dev/zero of=qt_lib.img bs=1M count=90 // qt-4.8.5需要90M大小作为镜像大小,根据需要可以改变count
mkfs.ext2 -F qt_lib.img
chmod go+w qt_lib.img
mount qt_lib.img -o loop /mnt
cp -rf $ZYNQ_QT_INSTALL/* /mnt
chmod go-w qt_lib.img
umount /mnt
这个qt_lib.img就是我们所需的运行库了。
接下来的任务就是如何挂载这个镜像。利用Qt编写一个project。导入如下环境变量:
export ZYNQ_QT_INSTALL=/opt/Qt-arm/install
export PATH=$ZYNQ_QT_INSTALL/bin:PATH
进入project内输入如下命令
qmake -project
qmake
此时会生成Makefile文件,再输入make编译生成Arm Version的可执行文件。可以使用file命令查看。
将该工程以及qt_lib.img拷贝到SD卡的FAT格式分区下。
把SD卡插回ZYNQ开发板,通电。进入桌面后,启动终端。
在对应的ZYNQ_QT_INSTALL目录下建立相应的目录,我自己而言
cd /opt/
mkdir Qt-arm
cd Qt-arm
mkdir install
将qt_lib.img挂载。
mount /dev/mmcblk0p1 /mnt(可以使用ls /dev查看SD卡分区)
mount /mnt/qt_lib.img /opt/Qt-arm/install
运行SD卡中的文件
/mnt/PROJECTPATH/app -qws
即可成功运行
普通交叉编译arm-linux工具
https://pan.baidu.com/s/1pJ2rdkZ
实际上,采用Xilinx 的交叉编译器,编译qt5库以上总是失败。后来更换交叉编译工具并直接指定绝对路径(在qmake.conf里面修改交叉编译工具及其对应的路径),config参数只有如下
./configure -release -opensource -xplatform arm-xilinx-linux-gnueabi-g++ -prefix /opt/qt-arm-5.4.2 -no-opengl
最终qt5的库大部分编译通过并可以使用。