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

本文记录了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移植和应用开发连载(四)内容:



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.3buildroot编译的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/event4"

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容