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
我使用的是友善之臂的
5、tslib-1.4.tar.gz
6、QT源码: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 目录
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应用程序,大功告成!!!
为了方便各位新手,我这里贴出自己寻找的所有材料,百度云盘,如果失效了,联系本人qq:1010785316
评论
查看更多