基于A40I/T3 SDK平台的QT4.8移植和应用开发连载(六)-盈鹏飞嵌入式

本文记录了QT4.8图形界面在全志A40I/T3 SDK平台上的移植过程,说明过程中可能会技术瑕疵,希望大家提供宝贵意见。
本文移植的平台来自于盈鹏飞嵌入式的CoM-X40I/T3A平台(处理器分别时是全志的A40I/T3)。

以下是盈鹏飞嵌入式CoM-X40I核心模块的简要介绍:

CoM-X40I核心板图片:

CoM-X40I V1.1产品特性:

产品特性

  1. 采用Allwinner公司Cortex-A7四核A40i处理器,运行最高速度为1.2GHZ;
  2. 支持Mali-400MP2 GPU,支持OpenGL ES 2.0 / OpenVG 1.1 standard
  3. 支持1080P 视频编码,支持H.264,VP8;多格式1080P 60fps视频解码 (H.265,H.264,VC-1, MPEG-1/2/4, VP8) 
  4. 支持双屏异显;支持HDMI V1.4A/RGB888/LVDS,分辨率最高1920x1080;T3处理器不支持HDMI;
  5. 支持512-2G  Bytes DDR3 SDRAM;
  6. 支持EMMC 4G-64G大容量电子盘,可启动;
  7. 支持SDIO3.0,USB2.0 HOST&OTG,2路I2C,6路UART,2路SPI,2路PWM
  8. 支持双路以太网,一路10/100M;一路10/100/1000M;
  9. 可定制宽温产品,替换AM335X
  10. 稳定的操作系统的支持,可预装Android7.0或者LINUX 3.10(可预装Preempt Linux系统)
  11. 超小体积,邮票孔设计160pins, 尺寸为:45*45MM

以下是以CoM-X40I为核心板主板-SBC-X40I的功能图:

 

 以下为基于A40I/T3 SDK平台的QT4.8移植和应用开发连载(六)-盈鹏飞嵌入式

6 qt4程序发布

6.1应用程序发布简介

应用程序经过交叉编译后,发布到嵌入式主板前,一般需要执行如下步骤:

  • 移植程序依赖动态库
  • 添加程序相关资源
  • 开机自动运行

程序的运行依赖于相关的动态库,动态库一般在程序运行之前发布,可执行文件运行时可以搜索到。程序运行除需要指定动态库之外,还可能需要指定其他资源,如qt程序可能需要指定字体、图片等。

下面以qtdemo发布到SBC-X40I主板为例,介绍QT程序发布的问题。程序发布需执行如下步骤:

  • 移植qtdemo依赖动态库
  • 设置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 作为服务器模式运行

-fn wenquanyi:指定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指令亦可。

第五步:见方框5,执行runqt48脚本,runqt48脚本内容如下:

其中,.  /qt4.8.sh是临时设置qt4.8的环境变量,然后执行/embfly_test/qt4demo/qtdemo程序。

如果用户要启动自己的程序,只要更改runqt48的脚本(把这个程序/embfly_test/qt4demo/qtdemo换掉)即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值