Ubuntu下內(nèi)核、文件系統(tǒng)、QT5.6.0移植,帶觸摸屏
最近需要升級產(chǎn)品,以前的QT4環(huán)境可能就要不用了,沒辦法,又要重新搭建QT5環(huán)境了,想了很久,早搞晚搞都是要搞的,干脆今天就給干了,搭建過程中走了很多彎路,建議看了本篇文檔的攻城獅們,一定要看完本人的文檔后再操作,避免走彎路,此文檔真的是為了你們而寫的,你信嗎?其實(shí)也是害怕自己以后忘了,你懂得。。。。。--_-- 廢話多了,開始吧!??!
開發(fā)環(huán)境:
1、系統(tǒng):虛擬機(jī)下Ubuntu16.04LTS/
2、內(nèi)核源碼,我這里是用的是linux3.3.0
?
3、文件系統(tǒng):我這里是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/
好了,現(xiàn)在環(huán)境已經(jīng)準(zhǔn)備好了,開始干活
?
?
第一步:編譯器準(zhǔn)備:
解壓:arm-linux-gcc-4.4.3.tar.gz
修改環(huán)境變量:
#vim /etc/profile
在profile最后一行追加以下一句命令:
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin/
?
Ok,接下來就是保存文件,然后重啟虛擬機(jī)
第二:解壓內(nèi)核,并進(jìn)行編譯
?
開始配置:(根據(jù)自己需要進(jìn)行刪減,這里不需要跟著我的步驟走)
#make ?ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- ?dtp_defconfig
編譯:
#make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage -j4
這里如果提示沒有uIamge啥的,那就要百度查一下了,好像是要拷貝。。。。。
有一個(gè)很簡單的辦法u-boot編譯結(jié)束時(shí),會(huì)在tool文件夾下面生成一個(gè)mkimage文件,將這個(gè)文件復(fù)制到交叉編譯器目錄下的bin文件夾下面,以后編譯時(shí)就會(huì)生成uImage文件。
#cp arch/arm/boot/uImage /tftp/
?
這里內(nèi)核就完成了
?
第三:我們要開始準(zhǔn)備文件系統(tǒng)了,還要配置,想到這里,心中那是一個(gè)***呀。。。。。
解壓:tar zxvf busybox-1.22.1.tar.gz
進(jìn)入目錄中。。。
配置:make ?ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig(這里根據(jù)自己的需要進(jìn)行刪減)
?
將構(gòu)建選項(xiàng)中的工具鏈設(shè)置為當(dāng)前的編譯器
?
編譯:#make ?ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- -j4
?
安裝:make install
我這里沒有設(shè)置安裝路徑,所以默認(rèn)就會(huì)安裝在當(dāng)前目錄下的_install目錄下
我們將里面的文件拷貝到NFS共享目錄下即可,nfs服務(wù)及ftp服務(wù)搭建,這里就不說了,自己百度?。。?/span>
?
#cd ?/source/rootfs/
#mkdir /usr/local -p
好了,這里文件系統(tǒng)先告一段落。。。。。。。。。。。。
第四:觸摸屏驅(qū)動(dòng)
tslib-1.4.tar.gz(鏈接: https://pan.baidu.com/s/1e7XokhDa8yO738OT_Z4jhg 密碼: dme5),如果不能下載了,那就另想其他的辦法
1、解壓&配置&編譯
??首先需要安裝以下幾個(gè)包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 就安裝在虛擬機(jī) /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 環(huán)境變量(個(gè)人建議最好給原profile做個(gè)備份)
#!/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
?
此時(shí),tslib 就已經(jīng)移植好了
這里距離啟動(dòng)開發(fā)板還是差那么一點(diǎn)的,因?yàn)槲覀冞€沒有配置文件系統(tǒng),接下來就是配置文件系統(tǒng)了
進(jìn)入到nfs共享目錄下:cd ?/source/rootfs/
我們看到這個(gè)目錄下只有三個(gè)文件:
這樣是不行的
要達(dá)到這樣:
?
紅色框文件是我自己加的,臨時(shí)用的,你們就不要再mkdir了,繼續(xù)。。。。
在etc目錄下添加幾個(gè)文件:
1、創(chuàng)建 /etc/inittab
???vi /source/rootfs/etc/inittab
??# /etc/inittab
??# 啟動(dòng)腳本/etc/init.d/rcS
??::sysinit:/etc/init.d/rcS
??# 啟動(dòng) shell
??::askfirst:-/bin/sh
??# 重啟關(guān)機(jī)前 卸載文件系統(tǒng)
??::ctrlaltdel:/sbin/reboot
??::shutdown:/bin/umount -a -r
2、創(chuàng)建 /etc/init.d/rcS
??mkdir -p /source/rootfs/etc/init.d
??vi /source/rootfs/etc/init.d/rcS
??# 這是一個(gè)腳本文件,用/bin/sh解析
??#!/bin/sh
??# 掛載文件系統(tǒng)
??mount -a
??# 使用內(nèi)存文件系統(tǒng)
??mkdir /dev/pts
??mount -t devpts devpts /dev/pts
??echo /sbin/mdev > /proc/sys/kernel/hotplug
??mdev -s
??# 設(shè)置IP
??#/sbin/ifconfig eth0 192.168.1.17 #nfs不需要
??# 掛載 /etc/fstab 中的文件系統(tǒng)
??mount -a
??exec /etc/rc.local
3、創(chuàng)建rc.local
??vi /source/rootfs/etc/rc.local
??#!/bin/sh
??. /etc/profile //注意.后邊有個(gè)空格!
4、創(chuàng)建/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、構(gòu)建 /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
此時(shí),tslib 就已經(jīng)移植好了,你可以掛載 nfs 文件系統(tǒng)啟動(dòng)了
cd /usr/local/tslib/bin ?
./ts_calibrate ?
在這里如果你沒有什么問題,那真的是恭喜了,我花了兩天的時(shí)間找到的資料下載整合,全部貢獻(xiàn)給你了(領(lǐng)導(dǎo)是不是夸獎(jiǎng)你搞的挺快。。。。)
第五:終極殺手锏---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 架構(gòu),針對 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 是指在鏈接時(shí)鏈接 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了,這里給你上一張腳本貼圖
?
不好意思,我是這樣才編過的,耗時(shí)一天,種種錯(cuò)誤,種種找啊,那叫一個(gè)心酸。。。
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 ?(快慢看你配置幾核了),我大概花了一個(gè)小時(shí)左右
?
是不是感覺很輕松了,還沒有呢,我們還要配置QT交叉編譯環(huán)境以及拷貝編譯好的qt庫,移植到板子中,其實(shí)nfs就是拷貝啦。。。
?
將移植好的 qt 打包到開發(fā)板
??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運(yùn)行環(huán)境:
在文件系統(tǒng) /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
?
紅色部分請根據(jù)自己的開發(fā)板進(jìn)行修改,我的大小是800x480的分辨率。
?
好了,好了,好了,高興吧,我花了這么久的時(shí)間,總算是完成了,先感謝這篇文章:https://blog.csdn.net/lizuobin2/article/details/52673494
這哥們可是幫了我不少忙啊,只是有些出入小問題,自己解決了,只怪自己的板子太差,arm9,arm9,arm9啊,要我怎么說,怎么做,換編譯器,內(nèi)核都不能成功,唉。。。。苦逼了幾天,誰能理解,看著簡單,操作起來確實(shí)麻煩
最后:測試Qt應(yīng)用程序,大功告成?。?!
?
?為了方便各位新手,我這里貼出自己尋找的所有材料,百度云盤,如果失效了,聯(lián)系本人qq:1010785316
評論
查看更多