Ubuntu下内核、文件系统、QT5.6.0移植,带触摸屏

今日头条

1100人已加入

描述

Ubuntu下内核、文件系统、QT5.6.0移植,带触摸屏

最近需要升级产品,以前的QT4环境可能就要不用了,没办法,又要重新搭建QT5环境了,想了很久,早搞晚搞都是要搞的,干脆今天就给干了,搭建过程中走了很多弯路,建议看了本篇文档的攻城狮们,一定要看完本人的文档后再操作,避免走弯路,此文档真的是为了你们而写的,你信吗?其实也是害怕自己以后忘了,你懂得。。。。。--_-- 废话多了,开始吧!!!

开发环境:

1、系统:虚拟机下Ubuntu16.04LTS/

2、内核源码,我这里是用的是linux3.3.0

嵌入式系统 

3、文件系统:我这里是busybox-1.22.1

4、编译器:arm-linux-gcc-4.4.3.tar.gz

arm-none-linux-gnueabi-gcc4.4.3

我使用的是友善之臂的

嵌入式系统 

5tslib-1.4.tar.gz

6QT源码:qt-everywhere-opensource-src-5.6.0.tar.gz

下载地址:http://download.qt.io/archive/qt/5.6/5.6.0/single/

好了,现在环境已经准备好了,开始干活

 

 

第一步:编译器准备:

解压:arm-linux-gcc-4.4.3.tar.gz

修改环境变量:

#vim /etc/profile

profile最后一行追加以下一句命令:

export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin/

嵌入式系统 

Ok,接下来就是保存文件,然后重启虚拟机

第二:解压内核,并进行编译

嵌入式系统 

开始配置:(根据自己需要进行删减,这里不需要跟着我的步骤走)

#make  ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-  dtp_defconfig

编译:

#make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage -j4

这里如果提示没有uIamge啥的,那就要百度查一下了,好像是要拷贝。。。。。

有一个很简单的办法u-boot编译结束时,会在tool文件夹下面生成一个mkimage文件,将这个文件复制到交叉编译器目录下的bin文件夹下面,以后编译时就会生成uImage文件。

#cp arch/arm/boot/uImage /tftp/

嵌入式系统 

这里内核就完成了

 

第三:我们要开始准备文件系统了,还要配置,想到这里,心中那是一个***呀。。。。。

解压:tar zxvf busybox-1.22.1.tar.gz

进入目录中。。。

配置:make  ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig(这里根据自己的需要进行删减)

嵌入式系统 

将构建选项中的工具链设置为当前的编译器

嵌入式系统 

编译:#make  ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- -j4

嵌入式系统 

安装:make install

我这里没有设置安装路径,所以默认就会安装在当前目录下的_install目录下

我们将里面的文件拷贝到NFS共享目录下即可,nfs服务及ftp服务搭建,这里就不说了,自己百度!!!

嵌入式系统 

#cd  /source/rootfs/

#mkdir /usr/local -p

好了,这里文件系统先告一段落。。。。。。。。。。。。

第四:触摸屏驱动

tslib-1.4.tar.gz(链接: https://pan.baidu.com/s/1e7XokhDa8yO738OT_Z4jhg 密码: dme5),如果不能下载了,那就另想其他的办法

1、解压&配置&编译

  首先需要安装以下几个包autoconf automake libtool

  # apt-get install autoconf automake libtool

  #tar zxvf tslib-1.4.tar.gz

  #mkdir -p /usr/local/tslib

  #cd tslib

  #./autogen.sh

  #./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ -prefix=/usr/local/tslib

  Make -j4 &&  make install

 

  安装完成之后,tslib 就安装在虚拟机 /usr/local/tslib 目录下

2、更改 tslib 配置文件

  cd /usr/local/tslib/etc/

  gedit ts.conf

  去掉第二行# module_raw input 前面的 “#” 和空格(注意 空格也要去掉)

嵌入式系统 

3、将制作好的 tslib 打包,拷贝到nfs共享目录下(路径:/usr/local)

  cd /usr/local

  tar xzvf tslib.tar.gz

  rm tslib.tar.gz

3、添加 tslib 环境变量(个人建议最好给原profile做个备份)

#!/bin/sh

  export T_ROOT=/usr/local/tslib

  export LD_LIBRARY_PATH=/usr/local/tslib/lib:$LD_LIBRARY_PATH

  export TSLIB_CONSOLEDEVICE=none

  export TSLIB_FBDEVICE=/dev/fb0

  export TSLIB_TSDEVICE=/dev/input/event0

  export TSLIB_PLUGINDIR=$T_ROOT/lib/ts

  export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf

  export POINTERCAL_FILE=/etc/pointercal

  export TSLIB_CALIBFILE=/etc/pointercal

嵌入式系统 

此时,tslib 就已经移植好了

这里距离启动开发板还是差那么一点的,因为我们还没有配置文件系统,接下来就是配置文件系统了

进入到nfs共享目录下:cd  /source/rootfs/

我们看到这个目录下只有三个文件:

嵌入式系统这样是不行的

要达到这样:

嵌入式系统 

红色框文件是我自己加的,临时用的,你们就不要再mkdir了,继续。。。。

etc目录下添加几个文件:

1、创建 /etc/inittab

   vi /source/rootfs/etc/inittab

  # /etc/inittab

  # 启动脚本/etc/init.d/rcS

  ::sysinit:/etc/init.d/rcS

  # 启动 shell

  ::askfirst:-/bin/sh

  # 重启关机前 卸载文件系统

  ::ctrlaltdel:/sbin/reboot

  ::shutdown:/bin/umount -a -r

2、创建 /etc/init.d/rcS

  mkdir -p /source/rootfs/etc/init.d

  vi /source/rootfs/etc/init.d/rcS

  # 这是一个脚本文件,用/bin/sh解析

  #!/bin/sh

  # 挂载文件系统

  mount -a

  # 使用内存文件系统

  mkdir /dev/pts

  mount -t devpts devpts /dev/pts

  echo /sbin/mdev > /proc/sys/kernel/hotplug

  mdev -s

  # 设置IP

  #/sbin/ifconfig eth0 192.168.1.17 #nfs不需要

  # 挂载 /etc/fstab 中的文件系统

  mount -a

  exec /etc/rc.local

3、创建rc.local

  vi /source/rootfs/etc/rc.local

  #!/bin/sh

  . /etc/profile //注意.后边有个空格!

4、创建/etc/fstab

  vi /source/rootfs/etc/fstab

  # device mount-point type options dump fsck order

  proc  /proc proc defaults 0 0

  sysfs  /sys sysfs defaults 0 0

  tmpfs /tmp tmpfs defaults 0 0

  tmpfs /dev tmpfs defaults 0 0

5、构建 /dev 目录

  mkdir -p /source/rootfs/dev

  cd /source/rootfs/dev

  mknod console c 5 1

  mknod null   c 1 3

6、拷贝Lib

  cd /opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/lib

  cp *.so* /source/rootfs/lib -d

  cd /opt/FriendlyARM/toolschain/4.4.3/lib

  cp *.so* /source/rootfs/lib -d

此时,tslib 就已经移植好了,你可以挂载 nfs 文件系统启动了

cd /usr/local/tslib/bin  

./ts_calibrate  

在这里如果你没有什么问题,那真的是恭喜了,我花了两天的时间找到的资料下载整合,全部贡献给你了(领导是不是夸奖你搞的挺快。。。。)

第五:终极杀手锏---QT   移植 qt5.6

1、解压

  tar zxvf qt-everywhere-opensource-src-5.6.0.tar

2、修改编译配置

  cd /opt/qt-everywhere-opensource-src-5.6.0/qtbase/mkspecs/linux-arm-gnueabi-g++

  vi qmake.conf

针对于 2440 增加:

  QT_QPA_DEFAULT_PLATFORM = linuxfb

  QMAKE_CFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv4t -mtune=arm920t

  QMAKE_CXXFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv4t -mtune=arm920t

  march 指的 cpu 架构,针对 2440 来说是 armv4t

  mtune 指的 cpu 名字,针对 2440 来说是 arm920t

  如果你是 A8 的板子 ,可以参考下边的配置

  QT_QPA_DEFAULT_PLATFORM = linuxfb

  QMAKE_CFLAGS  += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv7-a -mtune=cortex-a8

  QMAKE_CXXFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv7-a -mtune=cortex-a8

  如果你是 A9 的板子 ,可以参考下边的配置

  QT_QPA_DEFAULT_PLATFORM = linuxfb

  QMAKE_CFLAGS  += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv7-a -mtune=cortex-a9

  QMAKE_CXXFLAGS += -msoft-float -D__GCC_FLOAT_NOT_NEEDED -march=armv7-a -mtune=cortex-a9

将以下部分

  # modifications to g++.conf

  QMAKE_CC = arm-linux-gnueabi-gcc

  QMAKE_CXX = arm-linux-gnueabi-g++

  QMAKE_LINK = arm-linux-gnueabi-g++

  QMAKE_LINK_SHLIB = arm-linux-gnueabi-g++

 

  # modifications to linux.conf

  QMAKE_AR = arm-linux-gnueabi-ar cqs

  QMAKE_OBJCOPY = arm-linux-gnueabi-objcopy

  QMAKE_NM = arm-linux-gnueabi-nm -P

  QMAKE_STRIP = arm-linux-gnueabi-strip

修改为:-lts 是指在链接时链接 tslib 库

  # modifications to g++.conf

  QMAKE_CC = arm-none-linux-gnueabi-gcc -lts

  QMAKE_CXX = arm-none-linux-gnueabi-g++ -lts

  QMAKE_LINK = arm-none-linux-gnueabi-g++ -lts

  QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++ -lts

 

  # modifications to linux.conf

  QMAKE_AR = arm-none-linux-gnueabi-ar cqs

  QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy

  QMAKE_NM = arm-none-linux-gnueabi-nm -P

  QMAKE_STRIP = arm-none-linux-gnueabi-strip

好了,开始配置qt了,这里给你上一张脚本贴图

嵌入式系统 

不好意思,我是这样才编过的,耗时一天,种种错误,种种找啊,那叫一个心酸。。。

root@。。:/opt/qt-everywhere-opensource-src-5.6.0# ./configure  -prefix /usr/local/Qt5.6   -opensource   -release   -confirm-license   -xplatform linux-arm-gnueabi-g++   -shared   -qt-zlib   -no-gif   -qt-libjpeg   -no-nis   -no-opengl   -no-cups   -no-glib   -no-dbus   -no-rpath   -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2   -no-avx    -no-openssl   -nomake tools   -qreal float   -qt-libpng   -tslib   -nomake examples   -I /usr/local/tslib/include -L /usr/local/tslib/lib

 

嵌入式系统 

make -j4 && make install  (快慢看你配置几核了),我大概花了一个小时左右

 

是不是感觉很轻松了,还没有呢,我们还要配置QT交叉编译环境以及拷贝编译好的qt库,移植到板子中,其实nfs就是拷贝啦。。。

 

将移植好的 qt 打包到开发板

  cd /usr/local

  tar zcvf Qt5.6.tar.gz Qt5.6

  cp Qt5.6.tar.gz /source/rootfs/usr/local/

  tar zxvf Qt5.6.tar.gz

  rm Qt5.6.tar.gz

  rm -rf doc include bin mkspecs qml translations(将不需要的删除掉,没什么卵用,反正我是用不上了)

最后,最重要啊。。。。

配置QT运行环境:

在文件系统 /etc/profile 里添加

  export QTEDIR=/usr/local/Qt5.6

  export LD_LIBRARY_PATH=/usr/local/Qt5.6/lib:$LD_LIBRARY_PATH

  export QT_QPA_GENERIC_PLUGINS=tslib

  export QT_QPA_FONTDIR=$QTEDIR/lib/fonts

  export QT_QPA_PLATFORM_PLUGIN_PATH=$QTEDIR/plugins

  export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=800x480:mmSize=800x480:offset=0x0:tty=/dev/tty1

 

  export QT_QPA_FB_TSLIB=1

 

红色部分请根据自己的开发板进行修改,我的大小是800x480的分辨率。

 

好了,好了,好了,高兴吧,我花了这么久的时间,总算是完成了,先感谢这篇文章:https://blog.csdn.net/lizuobin2/article/details/52673494

这哥们可是帮了我不少忙啊,只是有些出入小问题,自己解决了,只怪自己的板子太差,arm9,arm9,arm9啊,要我怎么说,怎么做,换编译器,内核都不能成功,唉。。。。苦逼了几天,谁能理解,看着简单,操作起来确实麻烦

最后:测试Qt应用程序,大功告成!!!

嵌入式系统 

 为了方便各位新手,我这里贴出自己寻找的所有材料,百度云盘,如果失效了,联系本人qq1010785316


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分