QT5.6.0移植到开发板f1c100详细过程以及过程中遇到的问题详解!!!!!!
一,安装交叉编译工具
安装交叉编译工具我就不多说了,网上这个方面的知识数不胜数,我在这里提供一个交叉编译工具。我用的是4.9版本的。
链接:https://pan.baidu.com/s/1jOpLPW5mOya0sKcFVrmn-Q
提取码:dug8
二、交叉编译QT5.6.0。(由于全志的f1c100不支持触摸屏,我这里就没有交叉编译tslib,这里提供一个链接,需要的可以进去看看[http://zero.lichee.pro/%E5%BA%94%E7%94%A8/QT_doc1.html])
我下载的是5.6.0版本的qt源码包
2,配置
2.1,配置qmake.conf文件
首先需要安装
sudo apt-get install libtool automake autogen autoconf libsysfs-dev
后面qmake.conf 配置需要用到的sqlite的lib
切换到 cd qt-everywhere-opensource-src-5.6.0/qtbase/mkspecs/linux-arm-gnueabi-g++目录下,
编辑 vim qmake.conf
修改配置文件如下,主要修改了以下几个方面:
取消软浮点(f1c100不支持软浮点),指定开发板架构,指定编译器(编译器路径必须是绝对路径,否则会报错,所找不到编译器,千万注意!!!!)
2.2,配置qt(这是最重要的一步)
./configure -verbose
-prefix /opt/qt5.9.1-arm
-confirm-license
-opensource
-release
-make libs
-xplatform linux-arm-gnueabi-g++
-optimized-qmake
-pch
-sql-sqlite -sqlite
-qt-libjpeg
-qt-libpng
-qt-zlib
//-no-alsa -no-qt-pcre -no-eglfs -no-freetype
-tslib
-no-opengl
-no-sse2
-no-openssl
-no-cups
-no-glib
-no-dbus
-no-xcb
-no-separate-debug-info
-I/opt/tslib/include -L/opt/tslib/lib
-make examples -make tools -nomake tests -no-iconv
为了方便,大家可以写成一个脚本文件,我这里写成了cfg_arm.sh,主要需要给它加上执行权限(chmod +x cfg_arm.sh),这些配置项的作用,想要了解的可以通过指令./configure -help,
写好脚本后,./cfg_arm.sh,
配置好后会出现这个界面:
2.3,编译make(这个步骤花费的时间比较长,一个线程需要2~3个小时,由于我的电脑能够20个线程,所以只花了30分钟)
make -j20
2.4,make install(安装)
安装完成后,进入指定安装路径下的执行如下指令能出现如下信息,表明安装完成。
我的安装路径是/opt/QtEmbeddeb-5.6.0-arm。
三,移植QT
交叉编译arm版本的QT库后,就是移植到开发板了,
有三种方法:
1.将需要的库直接复制到开发板上对应的路径下,如:将库文件复制到开发板的/lib,/usr/lib中。(前提是开发板中空间足够大)
2.通过SD卡挂载,具体挂载每个开发板都有区别,我的是全志的f1c100,我是用的便是SD挂载。
方法:通过在ubuntu下的fdisk命令对SD卡进行分区。
例如:
2.1 fdisk /dev/sdb
n 1 默认 +32M
n 2 默认 默认
完成两个分区。
w 退出分区操作
2.2 mkfs.vfat /dev/sdb1 //格式化第一个分区为fat16格式
mkfs.ext4 /dev/sdb2 //格式化第一个分区为ext4格式
注意:在进行分区和格式化操作的时候,不要挂载分区,如果分区自动挂载了,手动卸载,例如:umount /dev/sdb1,否则会出错。
2.3 存入数据
mount /dev/sdb1 /media/usb0 //挂载分区1
mount /dev/sdb12 /media/usb1 //挂载分区2
然后将设备树文件和内核镜像文件复制到第一个分区。
将 文件系统的压缩包解压到第二个分区。
2.4,进入开发,通过mount指令对编译好的QT库进行挂载
例如:
mount /media/mmcblkop1 /opt //建议挂载的路径跟自身在ubuntu下的安装路径一致。
四,设置环境变量
export QT_ROOT=/opt/QtEmbedded-5.6.0-arm
export TSLIB_ROOT=/opt/tslib/
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CONFFILE=
T
S
L
I
B
R
O
O
T
/
e
t
c
/
t
s
.
c
o
n
f
e
x
p
o
r
t
T
S
L
I
B
P
L
U
G
I
N
D
I
R
=
TSLIB_ROOT/etc/ts.conf export TSLIB_PLUGINDIR=
TSLIBROOT/etc/ts.confexportTSLIBPLUGINDIR=TSLIB_ROOT/lib/ts
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event0
export QT_QPA_FONTDIR=
Q
T
R
O
O
T
/
l
i
b
/
f
o
n
t
s
(
此
处
是
指
定
中
文
字
库
目
录
)
e
x
p
o
r
t
Q
T
Q
P
A
P
L
A
T
F
O
R
M
P
L
U
G
I
N
P
A
T
H
=
QT_ROOT/lib/fonts (此处是指定中文字库目录) export QT_QPA_PLATFORM_PLUGIN_PATH=
QTROOT/lib/fonts(此处是指定中文字库目录)exportQTQPAPLATFORMPLUGINPATH=QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export TSLIB_CALIBFILE=/etc/pointercal
export QT_PLUGIN_PATH=
Q
T
R
O
O
T
/
p
l
u
g
i
n
s
/
e
x
p
o
r
t
L
D
L
I
B
R
A
R
Y
P
A
T
H
=
QT_ROOT/plugins/ export LD_LIBRARY_PATH=
QTROOT/plugins/exportLDLIBRARYPATH=QT_ROOT/lib:$TSLIB_ROOT/lib
注意:这篇文章的内容是我走过的,但是每个人对应的环境可能不同,或许会存在或多或少的问题,仅供参考。对于QT及其其他应用库的移植,我发现这种方法的移植很容易出现问题,所以我查阅资料,还有第二种相对方便的方法,那就是通过buildroot生成带相应库文件的文件系统。具体请看我第二篇文章。 有问题欢迎留言,知无不言。