移植过程其实不难,但是也不是特别简单.使用的平台是EasyARM IMX283A平台,他原来用的Qt4.7.3,其实我比较喜新厌旧,所以直接上Qt5.我们移植过程从上到下移植.
开发板:EasyARM iMX283A,128M NAND,64M RAM
系统环境:Ubuntu 16.04 LTS,32Bit,root login
软件包完整文件名和校验(使用shasum):
- d6e96fefb6f0fb8079f27468b9bf22d8dd96108e busybox-1.22.1.tar.bz2
- 触摸库:https://github.com/kergoth/tslib
- 08ff0db4df01d39732753dfc05bbb7ade4d8dcbb qt-everywhere-opensource-src-5.6.0.tar.xz
- 内核就是Zlg自带的,2.6内核,有点老.不过没所谓.
首先autogen要的工具是sudo apt-get install automake autogen autoconf libtool,下面尽量图记录.
然后获取tslib代码.
可见opt目录下没有文件的,我们也是把东西装到那里.
比较长的那个命令是这个:
./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/opt/tslib
然后一直make,make install下去.
取消注释打开开关:
然后开始编译Qt,这是大东西.要编辑这个文件.
红色是重点.
开始配置:
具体我用到的指令是:
./configure -prefix /opt/Qt5.6-arm -opensource -confirm-license -release -shared -xplatform linux-arm-gnueabi-g++ -optimized-qmake -pch -qt-sql-sqlite -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -tslib -no-opengl -no-sse2 -no-openssl -no-nis -no-cups -no-glib -no-dbus -no-xcb -no-eglfs -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-separate-debug-info -no-iconv -make libs -make examples -nomake tools -nomake tests -skip qt3d -skip qtcanvas3d -skip qtdoc -skip qtwayland -I/opt/tslib/include -L/opt/tslib/lib
然后make,接着make install吧,可以多线程的,不过我虚拟机设置了峰值,所以不快.
make过程各种花啊.
编译OK.
安装:
这样/opt下就有Qt的目录.
解压busybox源码.
第190行,指定一下平台:
第164行指定编译器:
不用编译成静态也不指定前缀.
指定安装路径:
然后保存配置,一路make,make install下去.安装后检查如图.
还要创建必要的目录.
mkdir dev etc lib proc sys tmp var
结果如图:
复制lib文件,毕竟我们是动态链接的.
参照第二句指令同理,复制etc文件.
此etc配置有个tty2,在/etc/inittab下,我们注释他或者删掉它.
fstab也要编辑,这样才能挂在其他文件系统,不然只有proc.
还有pts设备要创建 ,编辑/etc/init.d/rcS
刚才忘了缩减lib大小,这里缩减一下.
把tslib放进去.要先创建一个usr/lib然后分别放内容进去.
Qt也是同理的,我再创建了一个plugins目录.
文件系统73M,确实比Qt4大不小.
如果有不对,修正一下,大致目录结构.
当然啦,还没可以,还要配置一下环境变量.比如我的配置如下:
export TSLIB_PLUGINDIR=/usr/lib/ts/ export TSLIB_TSDEVICE=/dev/input/event0 export TSLIB_CALIBFILE=/etc/pointercal export TSLIB_CONFFILE=/etc/ts.conf export LD_LIBRARY_PATH=/usr/lib export QT_QWS_FONTDIR=/usr/lib/fonts export QWS_MOUSE_PROTO=/dev/input/event0 export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/qt-plugins export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0 export QT_QPA_FONTDIR=/usr/lib/fonts
保存给/etc/profile.
然后启动qtcreator.新建一个Qt5的make.
编译器什么应该很好搞的定.
最后新建Device后才能新建Kit.
Kit如下:
当然ssh服务还没好,Device也无法访问啦,这个自己想想办法移植啦.新建工程:
指定工程位置文件名,目录需要预先创建.
下一步:
拖了个大按钮.
插入一个叫click的slot.
插入个提示:
然后报错了:
原来创建工程时候需要这么选择.
只好重新创建按钮,slot了.
代码还是这样:
顺利编译:
把程序复制到目标目录.
编译内核需要先复制内核文件.
修改Makefile,调整ARCH,CROSS_COMPILE.
整个文件系统就OK了,准备要打包.两种方法均可打包镜像,不同的镜像方式.
使用熟悉的方法,进行rootfs的烧写.执行ts_calibration后执行Qt程序,记得加参数.
./tslib-test -plugin tslib:/dev/input/event0
一切测试OK.
配置QT的时候,到create qmake以后出错,提示没有找到g++。这是怎么回事?
@孙 你的系统得多精简,apt-get install g++ or yum install g++
./tslib-test -plugin tslib:/dev/input/event0
为什么要加参数-plugin tslib:/dev/input/event0。亲测,不然触摸失效
MX283开发板自带的qt库编译的程序运行的时候不要加参数,是不是在哪里有特殊处理
@ZZW Makefile 里面加了,外面就不用加.
@TaterLi 是在编译qt的makefile里面加吗?我试了试加上-plugin tslib:/dev/input/event0,报错
@ZZW ./configure 添加
QWS_MOUSE_PROTO=”tslib:/dev/input/event0” 然后生成的MAKEFILE里面就有了,直接改MAKEFILE会被覆盖,不同系统不同,具体看configure提示.