知识点------------------------------------------------------------
Frmebuffer:linux为显示显示设备提供的一个接口,可以屏蔽图像硬件爱你的底层差异,允许上层应用在图形模式下对显示缓冲区进行读写操作,模仿显卡的功能,可以通过对framebuffer的读写直接对显存进行操作,写操作可以直接反映在屏幕上。操作如下:
开发环境---------------------------------------------------------------
Ubuntu16.04 已安装好交叉编译器,可以通过如下图方式查看
如果没有安装好,可以查看我的另一篇博文进行安装
https://blog.csdn.net/warren103098/article/details/128074192?spm=1001.2014.3001.5502
海思 hi3516DV300
Tslib步骤-------------------------------------------------------------
获取和下载tslib
获取 tslib 的源码,git 地址为 https://github.com/kergoth/tslib,拷贝至任意目录,解压
tar xf tslib-1.21.tar.bz2
(注意空格)
./configure--host=arm-linux-gnueabiCC=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc-prefix=/home/wzw/Hisi_qt/test/tslib-1.21/arm-tslib
直接Make
接着make install(忽略警告)
安装完后生成arm-tslib文件夹
查看是否编译成功
Cd arm-tslib/bin
File ts_test 看到ARM即成功
至此ts_lib编译完成,接着是把编译好的库移植到板端
tar -jcf ./arm-tslib.tar.bz2 arm-tslib
拷贝至板端,tar xf arm-tslib.tar.bz2 -C /usr/lib
接着配置环境变量,这里注意一下要使用event2
如果板端有source命令,可以直接source /etc/profile使环境变量生效。如果没有,直接重启也可以使环境变量生效;
接着测试tslib是否生效
cd /usr/lib/arm-tslib/bin/test
./ts_test(这里我是配置好hifb的(后续会将),如果没有配置好,显示会不正常)
触摸点坐标
至此tslib移植完成。
Qt移植--------------------------------------------------------------------
首先获取qt源码
wget https://download.qt.io/archive/qt/5.12/5.12.9/single/qt-everywhere-src-5.12.9.tar.xz
tar vf qt-everywhere-src-5.12.9.tar.xz
cd qt-everywhere-src-5.12.9/
ls
接着修改qmake.conf
vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
接着配置编译选项,为了方便,我们可以写一个脚本来执行,其中第一行和倒数两行的路径需要改成自己的实际路径;
赋予脚本执行权限 chmod +x autobuild.sh
同时确保你装好了g++ 若没有-sudo apt-get install g++
./autobuild.sh
配置完成后可以看到just run ‘make’即为成功
接着开始编译qt-------make -j 16(选择核数)
编译完成后make install 这里会生成arm-qt文件夹
至此qt编译完成
接下来将编译好的qt库移植到板端
tar -jcf ./arm-qt.tar.bz2 arm-qt 打包后拷致板端
tar xf arm-qt.tar.bz2 -C /usr/lib
接着配置环境变量,这里注意一下芯片为Hi3516 dv300只有fb0;
与其他使用linuxframebuffer的soc不同,海思使用的是hifb来管理图层,因此我们并不能直接显示,必须要先初试化hifb才能显示qt界面;
这里我参考了很多资料,很多博文都说采用hifb这个例程,但是我试了很多次依然不行,可能是那个地方没有配置成功,后续我将继续阅读该例程源码后再尝试;偶然看到有位博主使用的是tde这个例程,经尝试可以正常显示qt界面;下面我们以tde例程为例进行改写:
使用到的资料有《HiFB 开发指南》《HiFB API参考》
可以看到在使用hifb时要先加载hifb的驱动并分配内存
Sampl_circumrotate起先是初始化sysy以及vo,开启vo设备
接着是TDE_DragraphicSample函数,主要的过程可以参考下图,我主要讲一下更改哪里
首先更改成我们的屏幕的分辨率1080*1920
把循环播放二十次图片的函数去掉换成如下的函数即可
至此程序部分改动完成,拷贝至板端
./sample_tde &
初始化成功后应该是青色如下图
cd /usr/lib/arm-qt/examples/widgets/animation/animatedtiles/
./animatedtiles
测试qt例程,触摸正常,显示正常
至此板端配置完成,后面测试我们自己编写的qt代码,首先是配置pc的qt creator。
搭建arm平台的Qt creator环境------------------------------------------------------------------------
首先安装qt,这里的话请自行百度,本文不再描述;
3:)接着配置C++编译器,选择complies点击add GCC->c++
取个名称,再选择编译器的路径即可
至此配置完成,下面开始验证
新建一个项目,取名为hisi_test,一路next即可,到下图这一步时,选择arm-qt5.12.9
在ui界面随便搞几个控件
直接build,不要点run。因为是arm平台的程序x86不能执行,可以看到程序正常编译
我们到刚刚创建项目的的目录里,可以看到编译后的目录,将hisi_test拷到板端
运行./hisi_test03
运行成功,至此qt移植成功。