iTOP-iMX6-QtE5.7移植

最近在学习iTOP-iMX6开发板上移植QtE5.7,遇到了不少错误,花了很长时间才解决,下面就将移植过程写下来,供大家参考。

环境:XShell 6 + Ubuntu18.04 + Qt5.7 + iTOP-iMX6开发板

1 基础软件的下载

这里我是用的是Ubuntu18.04环境,arm编译器使用arm-2014.05-29版本,触摸屏驱动使用tslib1.4版本,QtE的源码为QtE5.7

下面是相关软件包的下载链接和详细的版本信息:

下载链接:https://pan.baidu.com/s/1bqOx8njKr9AbwBoJkHPpTA    密码:89vg

其中包括:

编译器:arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

触摸工具 :tslib-1.4.tar.gz

Qt源码 :qt-everywhere-opensource-src-5.7.0.tar.gz

Qt Creator 5.7 :qt-opensource-linux-x64-5.7.0.run

以及测试程序hello

2 搭建环境

2.1 安装Ubuntu和XShell 6

首先需要搭建好Ubuntu环境(网上教程很多,安装过程不再赘述)并安装好XShell 6,在XShell 6上远程操控Ubuntu,Xshell 6可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的,通俗来讲就是远程操控,,关于XShell 6连接到Ubuntu的教程网上也有很多,在此略过。

打开XShell 6,连接到Ubuntu,从Windows下上传文件到Ubuntu的命令为 rz,从Ubuntu系统下上传文件到Windows的命令为 sz 文件名。

2.2 安装arm编译器

将编译器拷贝到“/usr/local/arm”目录下,并解压。

修改环境变量“vim /etc/profile ”,在最后添加两行,如下图:


然后使用source命令更新环境变量,如下图:


此时,在当前目录下输入arm,并按Tab键,可以看到rm-none-linux-gnueabi-,如下图:


在当前目录下输入arm-none-linux-gnueabi-gcc -v 显示gcc version 4.8.3 20140320,说明交叉编译器已经安装完毕,如果提示no such 等,要sudo apt-get install lib32z1 lib32ncurses5。

2.3 编译tslib触摸屏驱动

将下载好的tslib-1.4.tar.gz压缩包通过XSell 6上传到Ubuntu,然后解压源码tslib-1.4.tar.gz,输入“cd tslib”跳转到tslib目录下,输入以下三条安装命令(我的已经安装好):


安装完成后依次执行

./autogen.sh

./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++

--host=arm-none-linux-gnueabi --prefix=/opt/tslib1.4 ac_cv_func_malloc_0_nonnull=yes

make

make install

然后输入vim /opt/tslib1.4/etc/ts.conf,修改第二行如下:


2.4 编译Qt 5.7的源码

将下载的qt-everywhere-opensource-src-5.7.0用XShell 6上传到Ubuntu,将其解压后进入生成的“qt-everywhere-opensource-src-5.7.0目录。在当前目录下,使用使用“ vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf ”命令,打开qmake.conf 文件,并修改为如下所示内容。


使用“vi autoconfigure.sh”命令,新建“autoconfigure.sh”脚本。脚本内容如下所示:


其中,选项带有no和skip的表示编译时不支持相应的库函数,如果强行去掉no或者skip,可能导致编译失败。

保存之后退出,使用“chmof 777 autoconfigure.sh”命令修改文件权限。然后使用“./autoconfigure.sh”命令运行该脚本。运行完后在当前目录下继续使用“make”命令进行编译,make运行结束后,继续执行“make install”命令。

完成上述步骤后,可以在/opt目录下查看生成的“qt5.7.0”文件。

2.5 生成system.img

使用根文件系统(iMX6最小系统),下载链接:https://pan.baidu.com/s/1ubIfxRSgYHFCVq3S7_xIpA

将前两节生成的“tslib1.4”和“qt5.7.0”拷贝到“opt”目录下,使用“ls”命令查看opt目录,如下图:


解压“fonts.zip”,将解压生成的字库文件夹“fonts”拷贝到“opt/qt5.7.0/lib/”下。
     同理,解压“libstdc.tar.gz”,将解压生成的三个文件(libstdc++.a、libstdc++.so、libstdc++.so.6.0.19)拷贝到“opt/qt5.7.0/lib/”目录,并输入命令:

ln -s libstdc++.so.6.0.19 libstdc++.so.6

修改环境变量,在system目录下输入“vim etc/profile”,如下。

# Ash profile 
# vim: syntax=sh

# No core files by default
ulimit -S -c 0 > /dev/null 2>&1

USER="`id -un`"
LOGNAME=$USER
PS1='[$USER@$HOSTNAME]# '
PATH=$PATH

HOSTNAME=`/bin/hostname`

export USER LOGNAME PS1 PATH


export TSLIB_ROOT=/opt/tslib1.4
export QT_ROOT=/opt/qt5.7.0
export TSLIB_TSDEVICE=/dev/input/event7
export TSLIB_TSEVENTTYPE=input
export TSLIB_CONFFILE=/opt/tslib1.4/etc/ts.conf
export TSLIB_PLUGINDIR=/opt/tslib1.4/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export QWS_MOUSE_PROTO=tslib:/dev/input/event7
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

这里需要注意几个问题:

(1)公司提供的移植文档中:

export TSLIB_TSDEVICE=/dev/input/event7

export QWS_MOUSE_PROTO=tslib:/dev/input/event7

上述两行最后都是event2,而我的开发板却是event7,这里需要修改成你自己的event

(2)注意不要写错,也不要多加或少加东西,比如,我在书写的时候因为多加了一个".",导致后面编译的时候出错,花了很长时间才找到这个错误。

然后修改开机启动脚本“vi etc/init.d/rcS”,最后加一行“/bin/qt5.7 &”。

将下载的“qt5.7”文件拷贝到“bin”下。

然后使用压缩命令将文件系统打包(文件系统里面有什么就打包什么)

tar -zcf rootfs.tgz bin dev etc lib linuxrc mnt opt proc sbin sys tmp usr var

使用命令“ls”,如下图所示,可以看到“rootfs.tgz”压缩包,这个就是制作好的系统镜像。


其次,还要在system目录下,输入“vi /bin/qt5.7”修改环境变量,如下:

#!/bin/sh
  
export TSLIB_ROOT=/opt/tslib1.4
export QT_ROOT=/opt/qt5.7.0
export TSLIB_TSDEVICE=/dev/input/event7
export TSLIB_TSEVENTTYPE=input
export TSLIB_CONFFILE=/opt/tslib1.4/etc/ts.conf
export TSLIB_PLUGINDIR=/opt/tslib1.4/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export QWS_MOUSE_PROTO=tslib:/dev/input/event7
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

export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/root/tslib/build/bin

if [ -c /dev/input/event7 ]; then
        export QWS_MOUSE_PROTO='MouseMan:/dev/input/mice Tslib:/dev/input/event7'
        if [ -e /etc/pointercal ] ; then
                fsize=$(/bin/ls -al /etc/pointercal | cut -d' ' -f 23)
                echo $fsize
                if [ $fsize -ge "1" ]; then
                        echo "/etc/pointercal is exit"
                else
                        echo "/etc/pointercal is empty"
                fi
        else
                /opt/tslib1.4/bin/ts_calibrate
        fi
else
        export QWS_MOUSE_PROTO="MouseMan:/dev/input/mice"
        #>/etc/pointercal

这里需要注意把event修改成自己的event,比如我的是event7。

将打包好的“rootfs.tgz”烧写到iTOP-iMX6 开发板上,烧写的方式和Linux-QT 文件系统的烧写一样。

使用下载的“hello”测试程序进行测试,成功。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

iTOP-iMX6-QtE5.7移植

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭