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
評論
查看更多