本文记录了QT4.8图形界面在全志A40I/T3 SDK平台上的移植过程,说明过程中可能会技术瑕疵,希望大家提供宝贵意见。
本文移植的平台来自于盈鹏飞嵌入式的CoM-X40I/T3A平台(处理器分别时是全志的A40I/T3)。
以下是盈鹏飞嵌入式CoM-X40I核心模块的简要介绍:
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
以下是以CoM-X40I为核心板主板-SBC-X40I的功能图:
以下为基于A40I/T3 SDK平台的QT4.8移植和应用开发连载(六)内容:
6 qt4程序发布
6.1应用程序发布简介
应用程序经过交叉编译后,发布到嵌入式主板前,一般需要执行如下步骤:
移植程序依赖动态库
添加程序相关资源
开机自动运行
程序的运行依赖于相关的动态库,动态库一般在程序运行之前发布,可执行文件运行时可以搜索到。程序运行除需要指定动态库之外,还可能需要指定其他资源,如qt程序可能需要指定字体、图片等。
下面以qtdemo发布到SBC-X40I主板为例,介绍QT程序发布的问题。程序发布需执行如下步骤:
移植qtdemo依赖动态库
设置qtdemo查找动态库路径
相关字体、图片资源
开机自动运行qtdemo程序
6.2移植依赖动态库
qtdemo所需要的特定的动态库,例如sqlite3,可在buildroot生成根文件系统时选择组件(参考linux开发指南),也可从交叉编译链中找到并拷贝到主板根文件系统中。如果buildroot中也没有集成,一般需要单独进行移植。下面是qtdemo依赖动态库(库版本可能略有区别):
// 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下程序搜索动态库的说明及先后顺序
linux下一般程序运行时查找动态库的方法如下所示:
1、系统默认搜索动态库路径
linux系统默认情况下会在/lib和/usr/lib目录下搜索动态库,所以可将qtdemo所需动态库添加到该目录即可。SBC-X40I主板将glibc库放在/lib目录下,其他qtdemo依赖动态库/usr/lib 目录下。
2、根据环境变量LD_LIBRARY_PATH查找
方法:如设置添加/usr/test为查找动态库路径,可在目标板/etc/profile文件中添加如下语句:
export LD_LIBRARY_PATH=/usr/test:$ LD_LIBRARY_PATH,如下图所示:
执行命令:source /etc/profile,即可添加/usr/test为动态库的查找路径,如下图所示:
此时将qtdemo所需动态库添加到/usr/test目录即可,在profile文件中加载增加环境变量在系统中一直有效,同时也是全部用户有效。有些情况下,主板上运行的多个程序可能依赖的同一个动态库版本不同,如果统一用profile文件进行配置,将导致某个程序运行出现问题。这时最好的办法是使用终端有效的脚本进行临时配置,程序启动后,环境变量即失效。具体做法是需要配置环境变量的时候,执行运行下脚本(指令:source *.sh),在SBC-X40I主板上提供了qt4.8.sh脚本,具体如何应用请查看《配置qt自启动》一章节。
6.4添加字体
用户可以选择下载自己喜欢的字体,放在主板/usr/local/Qt-4.8.7/lib/fonts目录下,如果只需要一种字体可以把其他字体全部删除,只保留所需要的字体。
以移植文泉驿字体库(qpf格式)为例:
下载地址为:http://download.csdn.net/detail/yanzi1225627/4478888,下载完成后复制到虚拟机
linux系统下,可通过scp命令将其拷贝到主板/usr/local/Qt-4.8.7/lib/fonts目录下。如下图所示:
在主板/usr/local/Qt-4.8.7/lib/fonts目录下可看到该字体,如下图所示:
6.5指定图片资源
Qt程序在使用图片时,可以直接编译进工程,也可以在程序运行中加载图片。qtdemo程序同时使用了这两种方法,普通小图片采用直接编译进工程中,也有部分图片是在程序运行时才加载。在qtdemo程序config_all.h中指定了运行时才加载的图片,如下图所示:
所以需要在SBC-X40I主板的/usr/qt4demo目录下需要建立image目录,将所提及的图片拷贝到该目录下即可。
另外,qtdemo程序运行音频测试时指定了/usr/qt4demo/mediafile/aaa.mp3文件,所以在SBC-X40I主板上的/usr/qt4demo/mediafile/目录下也需要植一个aaa.mp3的文件。
最后,qt程序中默认只支持png格式图片,如果需要使用其他格式,需要添加相应图片插件,默认路径为/usr/lib/目录下,SBC-X40I主板默认支持的图片格式:jpeg 、tga 、ico 、tiff格式。
至此,即可在SBC-X40I主板上正常运行qtdemo程序,输入命令:
Target#cd /embfly_test/qt4demo
Target#./qtdemo –qws –fn -wenquanyi &,
执行结果如下所示:
可以看到qt界面,触摸屏可以正常工作。如下图所示:
命令参数:
–qws :作为服务器模式运行
-fnwenquanyi:指定qtdemo 使用wenquanyi字体
6.3章节-指定动态库路径、6.4章节-添加字体以及6.5章节-指定图片资源,这几个qt程序需要的资源可以通过预制到<SDK>/buildroot-201611/target/user_rootfs_extra对应的目录下,在固件打包时将该程序打包到主板的根文件系统。
6.6实现开机自动运行qtdemo程序
SBC-X40I主板如何实现开机自动运行qt程序?
1)系统启动时,会执行rcS脚本,rcS脚本会调用/etc/init.d目录下以S+两位数字+文件名字命名的文件。
2)调用S94Qt-application脚本后,该脚本会调用launch_qt48.sh脚本,该脚本会执行触摸屏的校验,最后调用runqt48脚本,该脚本在/etc/init.d目录下
因此用户要启动其他程序,只要更改runqt48的脚本即可。
首先,上电SBC-40I主板,在终端中查看下开机自动运行脚本/etc/init.d/rcS,如下所示:
可看到开机自动运行/etc/init.d/目录下以S+两位数字+文件名字命名的文件。
在主板的SBC-X40I主板的/etc/init.d/目录下找到S94Qt-application文件,如下图所示:
查看S94Qt-application,可以看到它执行了5步:
第一步:见方框1,判断是否有qt4.8的库目录存在,如果有存在,则执行. /qt4.8.sh进行初始化。
初始化的目的是为了下一步触摸屏校验可运行,qt4.8.sh的内容如下:
第二步:见方框2,这一步是判断触摸屏的节点是否存在,为下一步执行触摸检验做准备。截图中使用了ts0/ts1/ts2节点,实际上在SBC-X40I主板上,我们使用的是touchscreen0节点。
第三步:见方框3,这一步是判断触摸屏是否已经存在校验文件pointercal,该文件配置在主板的/etc目录下。如果该文件已经存在了,那么触摸屏不再需要校验。如发现校验文件不准,则可以把该文件删除后,
重新执行ts_calibrate指令进行重新校验。
第四步:见方框4,这一步是执行触摸屏校验工作。看脚本中是使用了绝对路径/usr/local/tslib1.4/bin/ts_calibrate来调用程序。在脚本中已经配置了如下脚本,可以直接执行ts_calibrate指令亦可。
export T_ROOT=/usr/local/tslib1.4
export PATH=$T_ROOT/bin:$PATH
第五步:见方框5,执行runqt48脚本,runqt48脚本内容如下:
其中,. /qt4.8.sh是临时设置qt4.8的环境变量,然后执行/embfly_test/qt4demo/qtdemo程序。
如果用户要启动自己的程序,只要更改runqt48的脚本(把这个程序/embfly_test/qt4demo/qtdemo换掉)即可。