基于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移植和应用开发连载(四)内容:

4 预制tslib、qt运行的环境变量

什么是预制?我们目前移植tslib和qt库的工作都是预制,也叫移植。因为嵌入式开发本身就是相关

代码在编译主机上编译好,编译好的库在目标板上运行。现在tslib和qt4.8都已经移植好,还差其运行时的环境要配置,因为linux和windows不同,linux的库如果要被发现,都需要告诉linux系统这个库位于哪里。

4.1明确qt和tslib运行时的路径

1)盈鹏飞嵌入式A40I的SDK中,最后打包到目标板根文件系统的qt4库目录是

<SDK>/out/sun8iw11p1/linux/common/buildroot/target/usr/local/Qt-4.8.7 ,这个目录在主板linux运行后,Qt-4.8.7库将位于/usr/local/目录下。

2)盈鹏飞嵌入式A40I的SDK中,最后打包到目标板根文件系统的tslib1.4库目录是

<SDK>/out/sun8iw11p1/linux/common/buildroot/target/usr/local/tslib1.4 ,这个目录在主板linux运行后,tslib1.4库将位于/usr/local/目录下。

说明:<SDK>指的是SDK存放的根目录,根据具体情况而定。

这些库的位置可以移动到别的目录,只要在预制他们的运行环境是更改对应路径即可。

4.2预制库运行环境放到什么地方?

为了方便定制目标板的根文件系统,例如:修改linux的一些库配置文件或者增加一些文件,A40I的SDK采用的办法是修改<SDK>/buildroot-201611/target/user_rootfs_extra目录下对应内容即可。

以下是user_rootfs_extra目录的内容:

重点说明:user_rootfs_extra目录对应的是未来目标板的根文件系统的/根目录;

以下是user_rootfs_extra/etc目录的内容:

重点说明:一般运行linux的配置文件都会放到/etc目录,例如mdev.conf文件。

该目录user_rootfs_extra下所有文件在执行./build.sh脚本(在<SDK>根目录下执行的编译脚本)后都会覆盖到<SDK>/out/sun8iw11p1/linux/common/buildroot/target目录,最后打包成根文件系统。 

注意:<SDK>指的是SDK存放的根目录,根据具体情况而定。

4.3 buildroot编译的linux设置环境变量的几种办法

不同的linux,设置环境变量的方法可能略有不同。Buildroot编译出来的linux系统,属于精简的linux, 设置环境变量方法比较简单,也是很多linux发行版本都可以使用的办法。

环境变量的设置一般分为全局配置和临时配置。我们都知道,linux是有用户管理的,所谓全局变量,就是所有用户都有效的变量,一般这种变量会采用更改/etc/profile文件的方式来实现,或者在/etc/profile.d目录下放置运行脚本来实现,脚本会在系统初始化profile文件时被调用,具体原理可参考如下/etc/profile脚本内容(如下画红色框的部分):

临时配置一般指的是只对当前终端有效的环境变量。只要退出当前终端,那么环境变量就会失效,以下是以更改PATH路径为例,说明几种更改环境变量的办法:

1)控制台中临时更改环境变量,这种方法仅仅是临时使用,以后要使用的时候需要重新设置。

 这个只针对特定的shell;

$ PATH="$PATH:/my_new_path"    (关闭shell,会还原PATH)

登陆root,在家目录(root)的.bashrc文件添加新路径到PATH

export PATH=$PATH:新增路径

例如:

$ PATH="$PATH:/my_new_path"    (关闭shell,会还原PATH)

export PATH="/usr/local/go/bin:$PATH" //在原先的PTATH下添加新的一个路径/usr/local/go/bin,

echo $path

export PATH="/home/work/mygo/bin:/usr/lib/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin" //如果删除就echo一下,去掉要删除的路径,从新附上原剩余的路径

2)修改/etc/profile文件,如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。 这里是针对所有的用户的,所有的shell;

$ vi /etc/profile

在里面加入:

export PATH="$PATH:/my_new_path"

使用source命令使修改立刻生效:

source  /etc/profile

3)修改.bashrc文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一个特定的用户,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了,这种办法在buildroot定制的linux中并不适用。

$ vi /root/.bashrc

在里面加入:

export PATH="$PATH:/my_new_path"

source  /root/.bashrc

后两种方法一般需要重新注销系统才能生效,也可以使用source 命令,使修改的配置立刻

最后可以通过echo命令测试一下:

$ echo $PATH 输出已经是新路径了。

4.4 A40I SDK配置linux固件环境变量的方法

A40I的SDK中可以使用更改全局变量的方式-更改/etc目录下profile的方式或者把设置变量脚本放到/etc/profile.d的目录下。在以下目录<SDK>/buildroot-201611/target/user_rootfs_extra/etc下面建立相应的profile或者建立一个*.sh文件放到<SDK>/buildroot-201611/target/user_rootfs_extra/etc/profile.d文件即可。

盈鹏飞嵌入式使用了终端临时有效的脚本方式,具体文件请查看<SDK>/buildroot-201611/target/user_rootfs_extra/目录下的qt4.8.sh和qt5.9.sh。qt4.8.sh是针对qt4.8库的脚本,该文件仅供参考。

4.5 qt库运行环境的说明

使用vi指令查看该脚本内容$vi /qt4.8.sh

export QWS_DISPLAY=LinuxFb:/dev/fb0//LCD显示设备文件

export QWS_SW_CURSOR=1  //软件鼠标的光标将一直可用

export QWS_MOUSE_PROTO="tslib:/dev/input/event1"  //指定触摸屏设备

export QT_ONSCREEN_PAINT=0  //将控件显示在屏幕上

export QTDIR=/usr/local/Qt-4.8.7:$QTDIR   //指定qt安装目录

export LD_LIBRARY_PATH=/usr/local/Qt-4.8.7/lib:$LD_LIBRARY_PATH //设置qt库查找路径

export QT_QWS_FONTDIR=/opt/qtenv/QT-4.8.2-arm/lib/fonts   //设置字体查找路径

注意:要使qt程序支持触摸屏和鼠标,可修改/etc/ qt4.8.sh中的QWS_MOUSE_PROTO,如下所示:

1)支持触摸屏

export QWS_MOUSE_PROTO=Tslib:/dev/input/event1 

2)支持鼠标

export QWS_MOUSE_PROTO=MouseMan:/dev/input/mice

3)同时支持触摸屏和鼠标

export set QWS_MOUSE_PROTO="TSLIB:/dev/input/event1 Intellimouse:/dev/input/mice"

4)支持usb键盘

export QWS_KEYBOARD=USB:/dev/input/event2 

注意这个event2根据具体输入节点而定,可在主板终端输入:cat /dev/input/eventX 命令,然后按下usb键盘任意按键,查看是终端有输出而定。

4.6 tslib库的运行环境的几点说明

使用vi指令查看该脚本内容$vi /qt4.8.sh

export T_ROOT=/usr/local/tslib1.4  // 指定tslib主目录位置

export TSLIB_CONSOLEDEVICE=none//设定控制台设备为none

export TSLIB_FBDEVICE=/dev/fb0//指定帧缓冲设备

export TSLIB_TSDEVICE=/dev/input/event1//指定触摸屏设备

export TSLIB_PLUGINDIR=$T_ROOT/ts//指定触摸屏插件所在路径

export TSLIB_CONFFILE= $T_ROOT/etc/ts.conf//指定TSLIB配置文件的位置

export TSLIB_CALIBFILE=/etc/pointercal//指定触摸屏校准文件pointercal存放位置

export LD_LIBRARY_PATH=$T_ROOT /lib:$LD_LIBRARY_PATH//指定TSLIB的库文件路径

export PATH=$T_ROOT/bin:$PATH//设置环境变量:方便执行/tslib/bin/ ts_calibrate校准程序

4.7相关注意事项 

已经编译好的固件中,内核配置为同时支持电阻式触摸屏和电容式触摸屏(电容式触摸是USB接口,支持multitouch协议),已经通过办法(电阻式触摸屏编译到内核,电容式触摸采用在rcS文件中插入模块)保证了它们的节点顺序,在主板上执行evtest指令查看如下:

root@T3/A40i-Embfly:~# evtest

No device specified, trying to scan all of /dev/input/event*

Available devices:

/dev/input/event0:      sunxi-ths

/dev/input/event1:      sunxi-keyboard

/dev/input/event2:      TSC2007 Touchscreen

/dev/input/event3:      axp22-powerkey

/dev/input/event4:      wch.cn USB2IIC_CTP_CONTROL

Select the device event number [0-4]:

电阻式触摸屏(tsc2007控制器)设备节点为:/dev/input/event2 ;

电容式触摸屏设备节点为:/dev/input/event4。

此时,若使用电容式触摸屏,需要指定/qt4.8.sh脚本中TSLIB_TSDEVICE和QWS_MOUSE_PROTO参数为/dev/input/event4。如下所示:

export TSLIB_TSDEVICE=/dev/input/event4

export QWS_MOUSE_PROTO="tslib:/dev/input/eve

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值