首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

ZYNQ平台QT编程环境的搭建-old

ZYNQ平台QT编程环境的搭建-old

今天将我最近一个星期做的工作总结下,这星期我主要对XILLINX的ZYNQ开发板的交叉编译环境进行搭建。我选用XILLYBUS的xillinux作为开发板的系统,在PC的虚拟机上的linux是ubuntu12.10 64位,QT的版本是4.8.4,最后实现了QT图像编译中对QT工程的编译及交叉编译。下面我会详细介绍。
1.XILLINUX系统
这是XILLYBUS公司为ZYNQ平台做的一个LINUX发布版,接触过ZYNQ的都知道xillinux系统最大的特点就是支持zynq板上的简单VGA(RGB每个颜色四条线),这个就很方便了不用想LINARO那样还需要支持HDMI的设备(不是谁都有HDMI的显示屏啊)。这里我简单介绍下我知道的用于ZYNQ平台的linux文件系统,首先是LINARO现在论坛中资料最多的了,《基于zynq嵌入式系统协同设计》那本书就是基于linaro,官网 http://www.linaro.org/ 可以详细了解,第二个系统是PETALINUX这是xillinx官网的linux拥有完整的编译环境,资料很全,简单弄了弄,感觉很有发展。我们zynq自带SD卡中的轻量级linux好像就是它啊(感觉),没有找到桌面系统所以也没弄。http://www.xilinx.com/support/download.html 下面petalinux SDK就是它了,用详细的文档。最后就是我用的XILLINUX了,这个linux的优势在于VGA和总线,没用HDMI的同学可以直接就用了,另外XILLYBUS是一个总线公司它提供了一个代替AXI总线的总线,这个总线会在PL里实现FIFO进行数据传输,PS中通过AXI与ARM核相连,只不过这个连接以及它的驱动已经被XILLYBUS写好了,在linux OPEN CLOSE调用就可以了,(现在还没做过段时间玩玩吧)详细的资料请见http://www.xillybus.com/xillinux ,它是基于ubuntu12.04做的,下面是我们熟悉的桌面系统,很爽吧。


2.QT PC编译环境的搭建
我的系统是ubuntu12.10 64位,首先需要做些准备工作:
(1)以root身份登录系统
首先创建root用户,ubuntu默认是锁定root用户,通过下面的命令解锁,密码是你设的用户密码
sudo passwd root

接下来修改配置文件,实现root用户登录
gedit /etc/lightdm/lightdm.conf

添加下面两句到lightdm.conf中即可,主要true别写错为ture,#后注释最好去掉
greeter-show-manual-login=true #手工输入登陆系统的用户名和密码
allow-guest=false #不允许guest登陆

(2)安装32位库,将shell改为bash防止因为兼容性问题出错
apt-get update要先找好源,ubuntu自带的源是官网的可能需要外网(可以用代理),这个是ubuntu装软件的最简单的方法,前提就是你能连到源。这里多说一句apt-get install时会因名字不对出现找不到包的错误,解决方法先是apt-get update更新下源(连接不上换源),并上http://packages.ubuntu.com/ 进行搜索,输入相应的关键字,这里有就一定可以下,不用怀疑。
apt-get update
apt-get install ia32-libs
dpkg-reconfigure dash

准备工作做好了,现在开始安装QT了,QT的完整安装包括QT Creator,lib,designer等,这些被打包为QT SDK,ubuntu为我们提供了一个简单安装方式,直接将QT的所有组件都安装完成了。你也可以在官网上下载安装包,那是个.run的文件,将该文件的属性改为可执行后就可运行了。运行后,像windons一样安装软件,但是要注意
这样的安装默认的路径是/opt/qt5.0
apt-get install qt-sdk

这样QT的PC编程环境就搭建好了,找个example,hello 直接run就可以了。
这样安装过程简单,需要注意的就是安装路径,我们没有设所以还不知道在哪,以后的一些配置需要知道它的位置
apt-get install这种安装的默认路径是:
qt库在/usr/lib/qt4;qtcreator 执行文件在 /usr/bin ;qt的配置会在 /usr/share/qt4 中。


3.QT交叉编译环境的搭建
这是今天的重点,我参考了懒兔子的ZYNQ博客1和9,做了些改动。首先上http://qt-project.org/downloads下载最新的QT lib for embedded linux 4.8.4 ,我们需要进行交叉编译所以还需要下载交叉编译链,apt-get install真是神器啊(等到本地编译时你会越发感触),竟然有,只要有就省得编译源码了。好了,现在安装交叉编译环境arm-linux-eabihf-gcc ,g++。这里注意下,这里的交叉编译器是HF的就是应用了硬件浮点,而openhw论坛上的一般都是gcc-arm-linux-gnueabi,这里的版本是4.7。这可能是xillinx的又一个优点吧。
apt-get install gcc-arm-linux-gnueabihf
apt-get install g++-arm-linux-gnueabihf

然后就是linux下编译的三步走了,./configue make make install 。首先找个文件夹解压下载的qt-everywhere-opensource-src-4.8.4。打开/mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf 将arm-linux-none-g(忘了,一看就知道)改为相应的arm-linux-gnueabihf就可以了,保存啊。这里又想到了一个易错点,分享给大家修改配置文件需要保存,没保存就执行可能出错。另外,我们一般先把把错误的文件删除,再重新复制一个好的文件(同名)到所在文件夹,记得要清除trash否则可能继续执行trash里的配置文件(我就是这样)。
为了防止出现某些指令找不到的错误,例如no such instruction SWPB等指令错误,将/mkspecs/common/g++-unix.conf进行修改,将编译优化置为0,这样就可以避免了。注意-O0第一个是字母,第二个是数字。你也可以设为O2试试,据说也好使,像我这样设编译会很慢的。
QMAKE_LFLAGS_RELEASE += -Wl,-O0

好了,配置文件也改完了,可以进行配置了。进入qt-everywhere-opensource-src-4.8.4目录。
./configure -embedded armv7 -xplatform qws/linux-arm-gnueabi-g++ -little-endian -opensource -host-little-endian -confirm-license -nomake demos -nomake examples -no-pch

这样就配置完成了,-no-pch应该可以不加,这个是预编译头文件的意思,但是我不加会在pch出错。欧了,应该没问题了。进行编译。
make
make install

好了,等着吧,没有优化得1个小时,在这个时间,我简单说说我对动态链接库的理解,qt交叉编译时需要相应的库的头文件以及.so文件来生产相应平台的可执行文件(头文件无所谓都一样,so文件平台相同),在arm上执行时也需要.so文件做链接。动态链接库又叫共享库,多个执行文件可以共享使用,这样可执行文件可以编译的很小了。交叉编译的目的就是编译可执行文件及其相应的动态链接库(这些都是在PC机上完成的),然后将库和执行文件拷贝到我们的嵌入式平台上(ARM,ZYNQ),执行就可以了。


出现这个就可以了。make install 默认的安装路径是 /usr/share/Trolltech/QtEmbedded-4.8.4-arm中,可以看到我们的arm动态链接库在lib下了。bin目录下有我们想要的qmake。下一步就是配置QtCreater,实现图形化的交叉编译。
进入qt的options中的build&Run,需要配置Tool Chains,Qt Versions。找到arm-linux-gnueabihf-g++和交叉编译后生成的qmake的位置即可。直接上图吧。大家照着配就行了,注意我的arm-linux-gnueabihf-g++也是apt-get所在/usr/bin中(又想到了一个注意的地方如果你不是root用户,你就要去/usr/local/bin中找了)。



把鼠标放到上图橘黄色处别动,可以查看详细的交叉编译链信息。
这回差不多了,修改build选项添加embeded linux配置,选gcc-arm,再编译即可了。


Desktop可以生成和调试PC下的代码,Embedded linux就可以生成arm下的可执行文件了,就是不能调试,是不是有点贪啊,如果有实现连调的大神,请赐教。
将 /usr/share/Trolltech/QtEmbedded-4.8.4-arm/lib下的内容拷贝到ARM(ZYNQ)的相同目录下,然后需要设置动态库的调用路径了,有两种方法,首先是动态调用。
export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.8.4-arm/lib/

这样在这个terminal下执行,就可以调用动态库了。
系统的方法是修改/etc/ld.so.conf.d中的内容,可以新建一个qt.conf文件,将我们的库路径加进去
/usr/local/Trolltech/QtEmbedded-4.8.4-arm/lib

然后,在终端重新加载就行了
ldconfig

动态库的寻找路径就设置完成了,其他的库例如opencv的也可以这么做,经验是最好是和PC上相同都设为默认路径(就是上面用的那个),复制到别的地方有时ARM上会找不到。
上面那个PC上跑的例子,通过交叉编译生成一个hello可执行文件,你可以通过file hello的命令查看它是不是ARM的执行文件。


好了,准备工作都完事了,可以执行了,用U盘移到ZYNQ的桌面上,然后执行
chmod 777 hello

./hello -qws
就可以了。结果如下图:


这个例子很简单,主要测试下交叉编译环境。

来源:匠新立异的博客
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表