目录
开发环境介绍
一. 交叉工具链的安装
二. ts库的交叉编译
三. qt4.8.6的交叉编译
四. 配置qtcreator的交叉编译工具链
五. 使用QT creator开发项目
六. 移植qt库到开发板上
其他需要说明的事情
编译环境: 64位Ubuntu 16.04
交叉编译工具链: 4.9.1
QT版本: qt4.8.6
硬件平台: i.mx6ull
作者: 王涛
单位: 联鲸电子科技(上海)有限公司
联系方式: [email protected]
(下文中所使用的代码、文档均为作者在具体项目开发时的截图。它们可能来自不同时期的不同项目,应当注意到这些内容只能作为参考与示例。)
编译所需的包为:
若采用最新的CrossCompileDev工具包进行开发环境配置,则:
在CrossCompileDev文件夹下,可以直接采用执行”. startwork.sh”命令快速配置好开发环境,因此可以直接跳过步骤1. (startwork.sh脚本需要修改工作目录)
同时在CrossCompileDev/tools/tslib-1.4中有已经交叉编译好的tslib库,因此步骤2也可以直接跳过.
若直接采用alwhales工业平板电脑进行开发,则关于tslib库和Qt库移植到开发板的步骤(步骤2和6)可以省略.最为关键和必不可少的步骤为:3. qt4.8.6的交叉编译, 进入CrossCompileDev/tools/CrossCompileQt /qt-4.8.6-source文件夹中,修改build_arm_qt.sh脚本中开头的两处路径配置,然后直接运行该脚本就可以快速完成Qt的交叉编译与安装.需要特别说明的是,每次的Qt交叉编译工作开始前,请确保Qt源码处于未经配置的原始状态,最简单的做法是删除原来的源码qt-everywhere-opensource-src-4.8.6,然后从原始代码压缩文件中再解压一份.
将资料包中的4.9.1.tar.bz2解压到/opt/arm-gcc下(目录随自己喜好,本文以此为例),会在/opt/arm-gcc目录下出现目录4.9.1,解压命令如下:
sudo tar -jxvf 4.9.1.tar.bz2 -C /opt/arm-gcc/
添加环境变量,在/etc/profile文件的末尾添加
export PATH=$PATH:/opt/arm-gcc/4.9.1/bin
然后命令行使设置立即生效
source /etc/profile
可以在命令行敲arm加上tab键,查看环境设置是否生效,如果生效,如下图所示
查看当前的arm-gcc的版本:
arm-linux-gcc –v
如果找不到可以:
arm-linux-gnueabihf -v
如果出现缺少共享库文件,安装即可。
# 创建工作目录,
mkdir /home/li/QT/tslib-1.4 -p
# 复制tslib-1.4.tar.gz到此目录:
# 进入此目录,并解压tslib-1.4.tar.gz,
cd /home/li/QT/tslib-1.4
tar -zxvf tslib-1.4.tar.gz
# 创建一个放置待会编译出来的可移植库的目录lib-arm,这个库会在编译qt的时候用到
mkdir lib-arm
# 进入解压出来的tslib目录
cd tslib
# 安装编译所需的一些库
sudo apt-get install autoconf automake libtool
sudo apt-get install g++-multilib libx11-dev \
libxext-dev libxtst-dev zlib1g-dev lib32ncurses5 lib32z1 libpng-dev
# 设置ts库的存放路径
export PREFIX=/home/mh/QT/tslib-1.4/lib-arm
# 生成configure脚本
./autogen.sh
# 屏蔽一些没用的编译错误信息
echo "ac_cv_func_malloc_0_nonnull=yes">arm-linux.cache
# 编译配置
CC=/opt/arm-gcc/4.9.1/bin/arm-linux-gnueabihf-gcc ./configure \
--host=arm-linux --prefix=$PREFIX --cache-file=arm-linux.cache
# 开始编译
sudo make
# 安装到/home/li/QT/tslib-1.4/lib-arm
sudo make install
编译成功后在/home/li/QT/tslib-1.4/lib-arm下产生bin、etc、include、lib 4个文件夹,修改这里的etc/ts.conf,打开之前屏蔽掉的module variance delta=30, 然后查看编译器的版本:
此时ts库的编译就完成了,接下来就可以编译qt了,下面说明下如何移植ts库到开发板上。
1. 将/home/li/QT/tslib-1.4/lib-arm下的几个文件夹拷贝到arm文件系统的/opt/tslib-1.4
2. 设置环境变量脚本tslib.sh,脚本位置在/etc/profile.d/目录下,如下图所示,
#!/bin/sh
TSLIB=/opt/tslib-1.4
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CONFFILE=$TSLIB/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB/lib
export PATH=$PATH:$TSLIB/bin
3. 启动arm板,命令行下执行脚本
source tslib.sh
4. 在开发板上tslib-1.4/etc目录下的ts.conf的“#module_raw input”的注释去掉,不要留空格。
5. 校准触摸屏
cd /opt/tslib-1.4/bin
./ts_calibrate
会出现校准画面,完成后生成pointercal 文件
6. 链接
ln -s /opt/tslib/etc/pointercal /etc/pointercal
创建工作目录,
mkdir /home/li/QT/qt-4.8.6 –p
解压qt-everywhere-opensource-src-4.8.6.tar.gz到该目录下,
tar -zxvf qt-everywhere-opensource-src-4.8.6.tar.gz -C /home/li/QT/qt-4.8.6
拷贝builearm到该目录下,vi编辑器下进行查看,
#!/bin/bash
QT_INSTALL_DIR=/home/tao/CrossCompileDev/tools/QtEmbedded-4.8.6-arm
TSLIB_DIR=/home/tao/CrossCompileDev/tools/tslib-1.4/lib-arm
cd qt-everywhere-opensource-src-4.8.6
echo yes | ./configure -v -prefix $QT_INSTALL_DIR -opensource \
-confirm-license -embedded arm -release -shared -fast \
-no-largefile -qt-sql-sqlite -qt3support -no-xmlpatterns \
-no-glib -no-phonon -no-mmx -no-3dnow -no-sse -no-sse2 \
-no-svg -webkit -qt-zlib -qt-libtiff -qt-libpng -qt-libjpeg \
-make libs -make tools -make examples -make demos \
-make translations -no-nis -no-cups -iconv -no-dbus \
-xplatform qws/linux-arm-gnueabihf-g++ -little-endian \
-qt-freetype -depths 16,24,32 -qt-gfx-linuxfb \
-qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc \
-no-gfx-qvfb -qt-kbd-linuxinput -no-kbd-qvfb -armfpa \
-no-mouse-qvfb -qt-mouse-linuxtp -qt-mouse-tslib \
-DQT_QLOCALE_USES_FCVT -I$TSLIB_DIR/include -L$TSLIB_DIR/lib
make -j6 2>&1 | tee ../qt4.8.6_Makelog && make install
要注意和修改的地方我用红色方框标出,qt库的存放路径可以自己设置,但是一定要保证路径是存在的,ts库的include和lib就是之前交叉编译出来的tslib库,例子中的路径是途中所示,这里需要改成自己的ts库的路径。
修改完之后,就可以执行builearm脚本了
cd /home/li/QT/qt-4.8.6
./builearm
编译时间会很长,等他编译完之后会执行make install,这里可能会报权限错误,
如果报权限错误,就单独在命令行执行sudo make install命令就好了,等安装完成之后,会在qt库的存放路径下出现可移植的qt库了。如下图所示
移植qt库到开发板上:
1. 将/usr/local/Trolltech/QtEmbedded-4.8.6-arm下的文件拷贝到开发板的/opt/qt-4.8.6/下,
2. 编写qt.sh,此脚本在/etc/profile.d/目录下,内容如下图所示,
需要说明的是在开发板中运行qt应用程序的时候要加后缀 –qws。
sudo apt-get install qtcreator
打开安装好的qtcreator(可以在ubuntu软件中心下载),点击工具栏的“工具”->“选项”,
点击“Qt Versions”按钮,点击此界面的“添加”按钮,在跳出来的对话框中选择编译qt4.8.6时产生的qmake文件,本文的qmake路径为/usr/local/Trolltech/QtEmbedded-4.8.6-arm/bin/qmake,视自身设置而定,配置如下图所示,设置完后点击“Apply”按钮,
点击“编译器”按钮,单击“添加”按钮,选择交叉编译器的g++路径,本文的路径为/opt/arm-gcc/4.9.1/bin/arm-linux-g++,配置如下图所示,配置完成后点击“Apply“按钮,
点击“构建套件”,单击“添加”按钮,之后在“编译器”栏和“Qt版本”栏选择刚才添加的就好了,配置如下图所示,配置完成后点击“Apply”,然后点击“OK”按钮即可。
点击菜单栏上的 Tools Options 进入 Options 窗口,点击左侧 Build & Run ,在右侧出现的窗口中点击 Qt Versions ,设置 Qt 的版本。点击右边的 Add… ,在弹出的窗口中进入到 /opt/qt-4.8.5-sdk/bin ()中,选中qmake ,
然后点击 Open ,如下图所示:
然后点击 Apply 。
在 Build & Run 中点击 Compilers ,配置我们所使用的交叉编译器,然后添加交叉编译工具,点击右侧的 Add 在出现的选项中选择 GCC ,点击下面 Compiler path: 右侧的 Browse… 按钮,选中 arm-linux-gnueavihf-gcc ,然后点击 Open 。输入 Name ,例如 arm-linux-gnueabihf-GCC ,然后点击 Apply。
在 Build & Run 中点击 Debuggers ,配置我们所使用的调试器,点击右侧的 Add ,点击下面 Path: 右侧的 Browse… 按钮,选中 arm-linux-gnueavihf-gdb ,然后点击 Open 。输入 Name ,例如: arm-linux-gnueabihf-gdb Debugger ,然后点击 Apply 。如下图 所示:
点击左侧 Devices,设置设备参数。点击右侧的 Add ,选中 Generic Linux Device ,
然后点击 Start Wizard ,输入名字,输入设备的 IP 地址,根据设备的实际地址设置,
输入设备的登录名:root ,然后点击 Next 。点击 Finish 完成设备的创建,
创建新的项目,Kits选择上面的imx6设备。(注:只能选择一个设备,多选会出错)。
项目编译完成后,点击右侧的Project,点击左侧的 Projects ,选择 Build & Run ,在 imx6 中选择 Build ,在 Build Settings General 中,不要勾选 Shadow build: ,选择 Run ,点击 Method: 右边的 Add ,然后选择 Deploy to Remote Linux Host ,
添加完成之后你还可以在下方看到红色字体的 Remote path not set 错误,这个错误的解决方法是:点击左边的 Edit 并打开 *.pro ,添加以下两行信息:
target.path += /home/root
INSTALLS += target
然后选择 File Save 保存文件,添加之后点击左侧的 Project ,你可以看到红色字体已经消失,被 /home/root/hellomyir 取代。
注:在Arguments 选项后加上:-qws,否则会出错。
1 将/usr/local/Trolltech/QtEmbedded-4.8.6-arm下的文件拷贝到开发板的/opt/qt-4.8.6/下,
2 编写qt.sh,此脚本在/etc/profile.d/目录下,内容如下图所示,
#!/bin/sh export QTDIR=/opt/qt-4.8.6 export QWS_MOUSE_PROTO=tslib:/dev/input/event1 export QT_QWS_FONTDIR=$QTDIR/lib/fonts export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib export QT_QPA_FONTDIR= $QTDIR /lib/fonts export QT_PLUGIN_PATH= $QTDIR /plugins
#export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0 #export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1 #export LD_LIBRARY_PATH=$LIBRARY_PAH:$QT_LIB |
需要说明的是在开发板中运行qt应用程序的时候要加后缀 –qws。
将qt-everywhere-opensource-src-4.8.6源码中./doc/qch文件夹复制到qt安装目录QtEmbedded-4.8.6-arm下。打开Qt Creator,依次点击Tools,Options,Help,Documentation,点击add,添加QtEmbedded-4.8.6-arm/qch中的文件。
如果出现Qt Creator程序的配置更改不能生效的问题,可能是因为它的配置文件出现了权限问题。Qt Creator的配置文件在/home/tao/.config/QtProject目录下。若删除这个目录下的文件,则Qt Creator会被重置,编译器配置、主题风格、快捷键设置等会全部恢复默认值。若更改这个目录下文件的权限,一般可以解决Qt Creator程序的配置不能生效的问题。同时,如果备份这个文件夹下面的文件,并在再次重装Qt Creator程序时恢复它,可以使程序直接恢复到备份文件所记录的配置状态。