QT5.7.0+UBUNTU16.04+ARM-NONE-LINUX-GNUEABI4.8+busybox最小LINUX系统
Orandragon记录
本文转自迅为4412开发板群:http://topeetboard.com
平台:iTOP-4412精英版+4.3寸屏
有学东西写文章的习惯,毕竟都是入门,在这里记录一下安装过程,虽然可能短期内用不到了,但以后用到的时候可以作为参考。
********************************华丽的分割线***************************
1、从网上下载所有最新的源码
Ubuntu16.0 amd64版本第一个,这个就不要源码了,直接安装就好了
QT5.7.0,万能的度娘一找就找到了(官网下载),注意是下载源码,linux版本的源码。ARM-NONE-LINUX-GNUEABI-GCC4.8,arm-***以后就这么写了,名字太长,这个选择源码或者选择编译好的都可以,有一个博客(http://blog.csdn.net/ee230/article/details/41513957)搜集到了从08-14版本的所有编译器版本,如果从官方下载比较费劲,还要注册啥的,(谁要有兴趣去把15,16下载下来,发我一份),大公司就是装逼,注册都这么费劲
2、ubuntu16的安装就没什么可以讲得了,虚拟机一路下一步
3、系统装好了,装一下辅助软件。Wine1.9,这个安装过程貌似有什么特殊需要注意的问题,ssh的安装,直接apt-get就好了,其实国外服务器也不是很慢的,我没有改服务器,下载速度500~600kbps还是可以接受的。ATTENTION:最新版本的ssh不支持旧版本的加密协议,导致客户端连接会出现问题,这个时候就该度娘出马了,问题好解决,不写了,自己搜一下一步一步跟着做。Wine安装完之后什么source insight呀、notepad++呀就全装上吧,你想装个QQ也行,把字库改一下,要不用不了,以后基本所有操作就在linux下进行了。
4、编译器的安装,这个地方要安装两个编译器(如果你以后不想找麻烦的话),arm-***q09和arm-***q14(下文继续简化为q09和q14)装第一个编译器的原因是为了编译kernel(用q14当然也可以,期间你需要极其细心以及极具耐心的调试,我编译通过,耗时两天,新版编译器内联函数编译方法改变很大,所以要一点一点调试,当然有问题可以多交流~~),编译器就不重装了,安装过程也比较简单,直接解压到opt目录下然后配置一下环境就可以了(鉴于马上要编译qt,这个地方先把q09的环境注释起来,添加q14的环境),安装完成后打开控制台,输入arm双击tab,看看有没有很神奇的事情发生(出现了很多arm开头的命令,那说明你成功了)。
5、tslib的编译
编译tslib的历程异常曲折,这本来应该是最好编译的一个插件,但是因为版本太久了,2009年就停止更新了吧,其open函数凡是用到O_CREAT的都没有加第三个参数,2009年以后的arm-none编译器要求O_CREAT打开的文件必须要第三个参数,尼玛改来改去累死我了,然后我就惊奇的发现了4412光盘里道长已经给编译好了。。。。。。(4412光盘\iTOP-4412精英版光盘资料\08_源码_QtE以及qtopia2.2.0文件系统\patch),直接拷过去用,然而又是版本的问题,没有与qt5.7.0很好的兼容,况且又没有源码,根本就没法调试嘛,失败。咋整,继续度娘,终于,找到了一个在qt5.5下编译ts的大神,提供了一份完美的源码,一点没动,q2014编译器编译直接通过,源码不难为大家,我直接放在压缩包里传给大家了,看一下我的编译过程(倒腾这个整整用了我一下午的时间)
大爱的tslib呀,强行收藏。
依然用人见人爱的脚本写编译过程,非常的舒畅:
Tslib文件夹下新建文件vim configTslib14.sh
内容:
#!/bin/sh
make clean && make distclean
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
CC=/usr/local/arm-2014.05/bin/arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/opt/tslib1.4 --cache-file=arm-linux.cache
make && make install
运行./configTslib14.sh
编译安装完成,其实之前我是先编译好qt的,直接tslib复制到qt目录下模块编译,失败(到现在没有找到原因,大家可以尝试先编译qt5.7,然后再模块编译tslib),既然如此就重新打包编译把,直接编译到qt中去好了,所以这个地方可以省下大家的时间,我其实是先成功编译了一次的qt5.7,足足两个小时,结果发现tslib模块编译失败又返回来重新打包编译,所以这篇教程的顺序是先编译的tslib,也希望大家有兴趣研究一下模块编译,这样就可以随意的在qt5.7中增减模块,因为qt5.7最大的特点就是模块化,非常的方便,然而我却没有利用起来。继续教程~
6、qt的编译
这个地方我重新编译一下qt,可以给大家保存一些截图,因为第一次编译没有删掉那些没用的模块,足足编译出了140mb的库,尼玛哟什么鼠标键盘nfc啥都有,qt5.7里还带了什么purchasing模块,没错,就是购买模块,有点像apple pay,这些我们都不要,所以我重新编译一下,刚好过程可以screenshot一下了,注意qt5.7必须要q2014的编译器哦,因为qt5.7源码是用stdc++11 版本写的(2011年出的c++新规则,你用q2009怎么可能编译通过,之前在这个地方犯2很久),开始操作了。
1、源码解压,个人没有好习惯,源码就在桌面上放着,个人还是习惯图形界面跟控制台一起操作,你要是在控制台root用户下tar,文件夹所属是root,图形界面的用户是修改不了其中的文件的(当然可以chmod 777一下,但还是很麻烦),所以,简单操作,撇开控制台,右击源码压缩包,直接extract here解压
留下压缩包以备后用,这里可以看到控制台tar的文件夹旁边都有一个小锁,普通用户只可以读不可以更改的。
Ctrl+alt+t打开控制台,vim修改qt-everywhere-opensource-src-5.7.0/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf文件,开始添加这三句,告诉Qmake咱们的平台,这些脚本的解释在官网都有,有兴趣的自己去看一下
/********************************新加入***************************/
QT_QPA_DEFAULT_PLATFORM = linux #eglfs
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
编译器名字加上none,当然你用友善编译器、elf编译器都可以,根据名字修改,保存。
在qt-everywhere-opensource-src-5.3.0/目录下为方便配置建立一个autoconfig.sh文件(直接文件夹右击新建,双击打开),内容为:
#!/bin/sh
./configure \
-v \
-prefix /opt/qt5.7.0 \
-release \
-opensource \
-make libs \
-xplatform linux-arm-gnueabi-g++ \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-libjpeg \
-qt-zlib \
-no-opengl \
-skip qt3d \
-skip qtcanvas3d \
-skip qtpurchasing \
-no-sse2 \
-no-openssl \
-no-nis \
-no-cups \
-no-glib \
-no-iconv \
-nomake examples \
-nomake tools \
-skip qtvirtualkeyboard \
-I/opt/tslib1.4/include \
-L/opt/tslib1.4/lib
exit
最后两行为tslib的安装位置,根据需要改动
其实一直没有搞懂nomake和skip的含义,我感觉用起来一样,上面的这些内容就是告诉qt需要哪些模块,不需要哪些模块,及其安装路径等等,具体的可以输入./configure --help查看。有些模块没有opengl的话要进行修改,否则编译不通过。这些模块我都用不到,全部skip掉。还有examples,这个建议大家编译进去吧,里边的小例子可以直接用于测试,我已经编译过了,所以直接nomake,特别注意,所有的连字符/前边都要加一个空格,exit前要回车,sh文件格式很关键,多一个空格都会出错,大家自己摸索一下,千万不要乱打空格,即使在每行的最后也不能有空格。-no-iconv \这个必须要加上,否则字库会出问题,我们暂时不用这个模块。
设置完成后,运行:
./autoconfig.sh
等待qmake配置一会儿,检查一下弹出的模块列表看有没有少的多的
然后就是套路了
make
哇啦哇啦#¥……%&……*&()*#%¥%……&(),等待一个小时左右
编译的期间,再去qt官网上把linux的ubuntu版本qt5.7下载下来,这个不要源码,下载那个.run的文件,下载到电脑上,直接双击安装(注意:qt5.7的linux版本只能在ubuntu16上安装,ubuntu12上是打不开的,不要用控制台安装,直接双击打开安装就可以了,默认是安装在/home路径下,以后用起来方便)
好了,源码编译完成了
make install安装到opt目录下面
安装完成。
这里边我们用的就是plugins lib include
还没有完成,tslib还没有以插件的形式安装进qt
我们进入这个文件夹cd qt-everywhere-opensource-src-5.7.0/qtbase/src/plugins/generic/tslib
运行我们刚刚编译出的qmake /opt/qt5.7.0/bin/qmake
创建好makefile
然后make
make install
下面就可以打包啦,tar一下(tslib和qt5.7.0),插上sd卡复制到开发板再解压到开发板的opt目录(没有的话就自己建一个),根据道长的qt视频随便编译一个程序,我拖了一个大按钮上去,拷贝到开发板运行测试一下
我们要的就是这个.so,我们看到已经自动安装在里边啦
到opt目录下 tar –zvcf qt.gz qt5.7.0/
复制到u盘
顺便从ubuntu里复制几个好看的字库 我这里复制了两个 ukai.ttc uming.ttc,感觉不错哦,复制带中文字库的,以后写程序就用它了,除非你不用中文
其他乱七八糟的都是我常年不整理的遗留物
下面的操作转战开发板,开发板搭载的系统就是道长提供的kernel和busybox,这里busybox希望用最新版本的话就去官网下载一个自己编译吧,不操作了,一切从简。
放进开发板的opt目录下,没有就自己新建一个
搭建环境
export TSLIB_ROOT=/opt/tslibexport QT_ROOT=/opt/qt5.7.0
export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_TSEVENTTYPE=input
export TSLIB_CALIBFILE=/opt/tslib/pointercal
export TSLIB_CONFFILE=/opt/tslib/etc/ts.conf
export TSLIB_PLUGINDIR=/opt/tslib/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export QWS_MOUSE_PROTO=tslib:/dev/input/event2
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib:$TSLIB_ROOT/lib/
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib
(我的tslib1.4改名为tslib了)
这是我的设置,设置内容官网上讲解非常详细,自行查看,按照自己的实际操作
配置完成source更新一下环境
然后打开opt/tslib/etc下的ts.conf,把第二行的注释去掉,把ts设置成输入模式
好啦,配置完成了有没有很激动,赶紧做个程序试一下,按照道长的qt教程去电脑端在qtcreator里拖一个大按钮进去,qmake一下,拷进开发板,./test 运行一下,心哇凉哇凉的,又有错误,说缺少stdc++.so.6,这是因为我们kernel的环境下没有这个库,好解决,去编译器下的目录复制一个进来就行了,放到环境目录的任意一个目录下,以后写程序难免会用到开发板没有的库,解决方法有两个,一个是复制一个库进来,一个是静态编译。其实对于qt这个系统来讲,静态编译应该是非常好的一种解决方法,可以省下很大的空间,毕竟我们就只运行一个程序。但是,如果要采用静态编译,我们必须把qt编译成静态的,这样才能有静态库来编译我们的静态程序。这里不演示了,毕竟我的板子还是16g内存的哈哈哈,不在乎这点小空间(当然安装程序的空间需要你重新编译uboot来多分配一点,否则就只有300mb左右哦,300mb也够用了)。
回正题,运行:
我们先运行一个tslib的初始化程序,在opt/tslib/bin 里
这个程序会校准触摸屏,并把校准信息储存在profile文件中指定的目录下边
好的校准完成了
运行一下我的大按钮:./test
老子的字不见了,看一下超级终端,字库错误,哦,忘记把字库放进去了,刚才存的字库拷贝到profile指定的字库文件夹中,再运行,字出来啦,大按钮太丑了。找了个例子拍了个照片,好啦,完成了。