本文记录了QT4.8平台在AM335X/A40I等现在流行嵌入式平台的移植过程,说明过程中可能会技术瑕疵,希望大家提供宝贵意见。
本文移植的平台来自于盈鹏飞嵌入式的COM-335X平台(处理器是AM335X)和COM-X40I平台(处理器是全志A40I/T3).
集成电源版本,集成电源是TPS65217
分立电源版本
以下为产品介绍:
COM-335X 产品特性
- 采用TI公司Cortex-A8 AM335X处理器,运行最高速度为1GHZ;
- 支持128M-512M DDR3 SDRAM;
- 支持128-1G字节 SLC电子盘或者EMMC 4G-32G大容量电子盘,可启动;
- 最多可支持两路千兆以太网,支持IEEE1588;
- 支持两路高速USB OTG;
- 支持最多六路串口,双路CAN BUS;
- 支持分辨率最高的1360*768显示接口,可支持SGX530 3D引擎;
- 板载DS1339的RTC时钟,国内独家设计,保证系统时钟同步;
- 支持GPMC扩展总线,可扩展FPGA或者 DSP应用;
- 稳定的操作系统的支持,可预装Ubuntu 16.04或者Preempt Linux 4.14;ANDROID 4.2可根据项目定制;
- 超小体积,邮票孔设计,160pins, 尺寸为:45*45MM
以下为产品介绍:
COM-X40I 产品特性
- 采用Allwinner公司Cortex-A7四核A40i处理器,运行最高速度为1.2GHZ;
- 支持Mali-400MP2 GPU,支持OpenGL ES 2.0 / OpenVG 1.1 standard
- 支持1080P 视频编码,支持H.264,VP8;多格式1080P 60fps视频解码 (H.265,H.264,VC-1, MPEG-1/2/4, VP8)
- 支持双屏异显;支持HDMI V1.4A/RGB888/LVDS,分辨率最高1920x1080;T3处理器不支持HDMI;
- 支持512-2G Bytes DDR3 SDRAM;
- 支持EMMC 4G-64G大容量电子盘,可启动;
- 支持SDIO3.0,USB2.0 HOST&OTG,2路I2C,6路UART,2路SPI,2路PWM
- 支持双路以太网,一路10/100M;一路10/100/1000M;
- 可定制宽温产品,替换AM335X
- 稳定的操作系统的支持,可预装Android7.0或者LINUX 3.10(可预装Preempt Linux系统);
- 超小体积,邮票孔设计160pins, 尺寸为:45*45MM
以下是本连载的第(五)篇 qt程序发布
6 qt程序发布
6.1应用程序发布简介
应用程序经过交叉编译后,发布到开发板前,一般需要执行如下步骤:
- 移植程序依赖动态库
- 链接动态库
- 添加程序相关资源
-
开机自动运行
程序的运行依赖于相关的运行库,动态库一般在程序运行之前发布,可执行文件运行时可以搜索到。程序除链接动态库之外,还可能需要指定其他资源,如qt程序可能需要指定字体、图片等。
下面以qtdemo1发布到EVB335X 为例,介绍程序发布问题。qtdemo1程序发布需执行如下步骤:
- 移植qtdemo1依赖动态库
- 设置qtdemo1查找动态库路径
- 添加qtdemo1相关字体、图片资源
- 开机自动运行qtdemo1程序
6.2移植依赖动态库
对于c 运行库和qtdemo1所需要的特定的动态库,可在buildroot制作根文件系统时选择(参考linux开发指南),也可从交叉编译链中找到并拷贝到开发板根文件系统中。EVB335X选择glibc为linux标准c运行库,下面是qtdemo1 依赖动态库:
// glibc :c运行库,几乎所有动态库都依赖该库。
libdl.so.2
libgcc_s.so.1
libc.so.6
ld-linux-armhf.so.3
//qtlib库
libQtCore.so.4.8.4
libQtGui.so.4.8.4
libQtNetwork.so.4.8.4
libasound.so.2.0.0
libfreetype.so.6.10.0
libid3tag.so.0.3.0
libmad.so.0.2.1
libncurses.so.5.9
libpng14.so.14.12.0
libsqlite3.so.0.8.6
// c++运行库
libstdc++.so.6.0.17
libstdc++.so.6.0.17-gdb.py
libz.so.1.2.7
//触摸屏库
libts-1.0.so.0.0.0
ts/
terminfo@
6.3链接动态库
linux下一般程序运行时查找动态库的方法如下所示:
1、根据环境变量LD_LIBRARY_PATH查找
方法:如设置添加/usr/test为查找动态库路径,可在开发板/etc/profile文件中添加如下语句:
export LD_LIBRARY_PATH=/usr/test:$ LD_LIBRARY_PATH,如下图所示:
执行命令:source /etc/profile ,即可添加/usr/test为动态库的查找路径,如下图所示:
此时将qtdemo1所需动态库添加到/usr/test目录即可。
2、系统默认搜索动态库路径
方法:linux系统默认情况下会在/lib 和/usr/lib目录下搜索动态库,所以可将qtdemo1所需动态库添加到该目录即可。
EVB335X将glibc库放在/lib目录下,其他qtdemo1依赖动态库/usr/lib 目录下。
6.4添加字体
用户可以选择下载自己喜欢的字体,放在/opt/qtenv/QT-4.8.2-arm/lib/fonts目录下,如果只需要一种字体可以把其他字体全部删除,只保留所需要的字体。
以移植文泉驿字体库(qpf格式)为例:
下载地址为:http://download.csdn.net/detail/yanzi1225627/4478888,下载完成后复制到虚拟机
linux系统下,可通过scp命令将其拷贝到开发板/opt/qtenv/QT-4.8.2-arm/lib/fonts目录下。如下图所示:
在开发板/opt/qtenv/ QT-4.8.2/lib/fonts/目录下可看到该字体,如下图所示:
6.5指定图片资源
Qt程序在使用图片时,可以直接编译进工程,也可以在程序运行中加载图片。
qtdemo1程序同时使用了这两种方法,普通小图片采用直接编译进工程中,也有部分图片是在程序运行时才加载。在qtdemo1程序config_all.h中指定了运行时才加载的图片,如下图所示:
所以需要在EVB335X评估板/usr/目录下需要建立image目录,将所提及的图片拷贝到该目录下。如图所示:
由于运行qtdemo1程序运行音频测试时指定了,/usr/test/aaa.mp3文件,所以在EVB335X /usr/test/目录下也需要移植一个aaa.mp3的文件。如下图所示:
另外:qt程序中默认只支持png格式图片,如果需要使用其他格式,需要添加相应图片插件,默认路径为/usr/lib/目录下,EVB335X默认支持的图片格式:jpeg 、tga 、ico 、tiff格式。
至此,即可在EVB335X上正常运行qtdemo1程序,输入命令:$./qtdemo1 –qws –fn -wenquanyi &,如下所示:
可以看到qt界面,触摸屏可以正常工作。如下图所示:
命令参数:
–qws :作为服务器模式运行
-fn wenquanyi:指定qtdemo1 使用wenquanyi字体
6.6实现开机自动运行qtdemo程序
EVB335X如何实现开机自动运行qt程序?以运行qtdemo1为例,通过查看开机自动运行脚本/etc/init.d/rcS,如下所示:
可看到开机自动运行/etc/init.d/目录下以S+两位数字+文件名字命名的文件。
所以我们在/etc/init.d/目录下建立S51qtdemo可执行文件,如下图所示:
编辑S51qtdemo,添加语句:/bin/qtdemo & ,该语句的意思是开机自动执行/bin/qtdemo文件,如下图所示:
如果/usr/test/目录下已经存在移植好的qtdemo1程序,则开机即可自动运行qtdemo1程序。