前言
最近在学习Tiny4412下的Qt编程。第一步,首先得搭建好交叉开发调试环境。几经折腾之后,总算基本完成。兹整理一下期间的笔记,发到博客上,作为总结。也希望我入过的坑,其他人避免再入 。
另外提一点(也是事后查网才了解到的),目前业界流行Yocto/OpenEmbedded框架,很多厂商使用这个框架来构建分发开发板的BSP(包括kernel,rootfs,toolchain、gdb、库以及qt的库等),用户可以直接基于该BSP来搭建Qt交叉开发环境,从而免去自己搭建环境时所遇到的诸如依赖库缺失、toolchain版本不匹配等问题,节约了不必要的时间成本。相关案例非常多,“参考资料2~5”里列了几个例子(都未经验证,仅供参考)。
不过,Tiny4412好像还没有提供yocto的BSP,所以目前还没法体验,但Yocto估计是大趋势,有空要学习一下。
回到顶部(go to top)
一、实验环境
1.1 虚拟机环境
a) Vmware版本:Vmware Workstation 12.5.7
b) Ubuntu版本:Ubuntu 16.04.4 LTS(我用的是百问网JZ2440资料光盘_20180516中的版本,地址是:http://wiki.100ask.org/Download,然后找到:002_JZ2440资料光盘_20180516(免费) )
c) 内核版本:4.13.0
d) gcc版本:5.4.0
e) toolchain版本:
arm-linux-gcc 4.3.2
1.2 开发板环境
1.2.1 硬件
开发板:友善之臂tiny4412,底板:Tiny4412/Super4412SDK 1611,核心板:Tiny4412 版本号1412
1.2.2 软件
a) 内核版本(tiny4412光盘自带): linux-3.5-20170221
b) 根文件系统(tiny4412光盘自带): rootfs_qtopia_qt4-20160514
回到顶部(go to top)
二、具体过程
2.1 编译、安装qte-4.8.5
注:tiny4412的光盘里有已经编译好的target-qte-4.8.5-to-hostpc.tgz,但由于我的Ubuntu版本和友善在编译target-qte-4.8.5-to-hostpc.tgz时所使用的Ubuntu版本不一样,所以解压后,无法直接在qt-creator中使用(在点击build按钮后会报:The Qt version is invalid. Could not determine the path to the binaries of the Qt installation, maybe the qmake path is wrong?),只能从头开始编译。
把arm-qte-4.8.5-20131207.tar.gz 拷贝到开发机里,然后在mobaXterm串口终端执行以下命令:
tar xzvf arm-qte-4.8.5-20131207.tar.gz
cd arm-qte-4.8.5
./build.sh
注:第一次执行./build.sh时,报错:tslib functionality test failed。但重新执行./build.sh后,却又没再报这个错。原因不明,待查。
2.2 下载、编译、安装gdb-7.10,然后编译安装gdbserver
为什么选择这个版本?因为以前学韦东山嵌入式Linux培训三期摄像头监控项目时,曾经用gdb-7.10成功搭建过远程调试开发板的环境(其实那时选择7.10版本也是有点凭感觉)。
2.2.1 下载、编译、安装gdb-7.10(下载地址:http://ftp.gnu.org/gnu/gdb/gdb-7.10.tar.gz)
把gdb-7.10.tar.gz下载到开发机里(假设下载到/home/book/Downloads/),然后在mobaXterm串口终端执行以下命令:
tar xzvf gdb-7.10.tar.gz
cd /home/book/Downloads/gdb-7.10
mkdir build && cd build
../configure --target=arm-linux --prefix=/usr/local/arm-gdb-7.10 --with-python
注:可能还要加:--with-expat --includedir=/home/book/Downloads/expat-2.2.9/bin/include --libdir=/home/book/Downloads/expat-2.2.9/bin/lib,详见下文注释
make
make install
export PATH=$PATH:/usr/local/arm-gdb-7.10
(可以把这句话添加到/etc/environment或者~./bashrc,以保存对$PATH环境变量的修改)
注1:在对gdb-7.10进行configure时,要加入 --with-python选项(可能还要先下载安装python2.7-dev),否则在qt-creator里启动调试时,可能会报错:
注2:如果configure加入--with-python选项后,报: checking for python2.7... no configure: error: python is missing or unusable 解决办法是:先下载安装python2.7-dev:apt-get install python2.7-dev,安装完成后,可以执行 dpkg -l | grep python2.7-dev来验证是否安装成功 注3:编译安装完gdb-7.10后,如果在qt-creator里启动调试时,在Application Output里报错:warning: Can not parse XML target description; XML support ./configure --prefix=$PWD/bin mkdir bin make && make install 然后重新编译、安装gdb-7.10(在configure时,还要加入以下选项:--with-expat --includedir=/home/book/Downloads/expat-2.2.9/bin/include 注4:如果接下来执行make时报错: checking for libexpat... (cached) no configure: error: expat is missing or unusable 解决办法是:删除gdb-7.10整个文件夹,然后重新解压gdb-7.10.tar.gz,编译、安装。 原因是: 为了加快速度,configure会把上次的检查结果作为一个cache变量(名字是ac_cv_libexpat)缓存到gdb/configure.cache中,而本次configure时,会先从 这个文件中查该cache变量,如果找不到,才会真正去检查libexpat这个库是否存在。所以,应该清除这个cache文件,强制configure去执行真正的检查。 |
2.2.2 编译、安装gdbserver
在mobaXterm串口终端执行以下命令:
cd /home/book/Downloads/gdb-7.10/gdb/gdbserver
mkdir build && cd build
../configure --target=arm-linux -host=arm-linux
make CC=arm-linux-gcc
完成之后,会在build目录下生成gdbserver可执行文件。把它拷贝到开发板的/usr/bin里(可以用ftp或者nfs,过程略):
2.3 把根文件系统拷贝解压到开发机上
把Tiny4412随机光盘中的rootfs_qtopia_qt4-20160514.tgz拷到开发机上(假设拷贝到/home/book/Downloads/friendly_arm/tiny4412/linux_rootfs/),然后执行:
tar xzvf rootfs_qtopia_qt4-20160514.tgz
2.4 下载、安装Qt-5.9.0(下载地址:https://download.qt.io/archive/qt/5.9/5.9.0/qt-opensource-linux-x64-5.9.0.run)
为什么选择这个版本?因为网上有很多成功案例,用这个版本搭建了交叉调试平台,有经验可借鉴。
把qt-opensource-linux-x64-5.9.0.run下载到开发机里,然后在mobaXterm串口终端执行以下命令:
chmod +x qt-opensource-linux-x64-5.9.0.run
./qt-opensource-linux-x64-5.9.0.run
然后按照安装向导的提示,一步步做即可(注:在“选择组件”这一步,把Qt5.9.0下面的所有组件都选上,保险起见)
2.5 打开qt-creator,进入Tools==>Options进行配置
2.5.1 添加device
2.5.2 添加Qt version
2.5.3 添加compiler
2.5.4 添加debugger
2.5.5 添加kit
2.5.6 添加环境变量,以支持触摸屏操作
方法1)修改开发板上的/etc/profile,(仿照/bin/setqt4env的内容)添加以下环境变量:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export QWS_DISPLAY=:1
export QWS_KEYBOARD=TTY:/dev/tty1
export QWS_MOUSE_PROTO="Tslib MouseMan:/dev/input/mice"
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts-mt.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_TSDEVICE=/dev/touchscreen-1wire
方法2)在开发机的qt-creator里,进入project==>Build&Run==>tiny4412==>Run==>Base environment for this run configuration,添加上述环境变量:
2.5.7 修改开发板上的/usr/local/etc/sshd_config,以解决debug时报:“SFTP initialization failed: Server could not start SFTP subsystem”的问题
Subsystem sftp /usr/libexec/sftp-server
改为:
Subsystem sftp /usr/local/libexec/sftp-server
2.6 qt-creator新建一个widget测试程序test,然后做一些配置
2.6.1 修改“test.pro”文件,加入以下两行:
target.path = /opt #为程序指定在开发板上的安装路径
INSTALLS += target
2.6.2 进入Project==>Build&Run==>Tiny4412==>Run Settings
至此,Tiny4412的Qt开发调试环境总算搭建完成,效果图如下:
1)启动调试:
2)停止调试:
回到顶部(go to top)
三、参考资料
1)《Tiny4412用户手册》
2)QtCreator+Arm开发和联机调试
3)imx6开发环境搭建之yocto全记录(L4.1.15_2.0.0)
4)QTCreator + gdbserver 实现远程调试
5)在 NXP iMX8 上进行 Qt5移植和开发