本文記錄了QT4.8圖形界面在全志A40I/T3 SDK平臺(tái)上的移植過程废封,說明過程中可能會(huì)技術(shù)瑕疵庆猫,希望大家提供寶貴意見。
本文移植的平臺(tái)來自于盈鵬飛嵌入式的CoM-X40I/T3A平臺(tái)(處理器分別時(shí)是全志的A40I/T3)。
以下是盈鵬飛嵌入式CoM-X40I核心模塊的簡要介紹:
CoM-X40I產(chǎn)品特性:
采用Allwinner公司Cortex-A7四核A40i處理器拷邢,運(yùn)行最高速度為1.2GHZ;
支持Mali-400MP2?GPU屎慢,支持OpenGL ES 2.0 / OpenVG 1.1 standard
支持1080P視頻編碼瞭稼,支持H.264,VP8;多格式1080P 60fps視頻解碼 (H.265,H.264,VC-1, MPEG-1/2/4, VP8)?
支持雙屏異顯腻惠;支持HDMI V1.4A/RGB888/LVDS环肘,分辨率最高1920x1080;T3處理器不支持HDMI;
支持512-2G ?Bytes DDR3 SDRAM集灌;
支持EMMC 4G-64G大容量電子盤悔雹,可啟動(dòng);
支持SDIO3.0欣喧,USB2.0 HOST&OTG腌零,2路I2C,6路UART唆阿,2路SPI益涧,2路PWM
支持雙路以太網(wǎng),一路10/100M;一路10/100/1000M;
可定制寬溫產(chǎn)品,替換AM335X
穩(wěn)定的操作系統(tǒng)的支持驯鳖,可預(yù)裝Android7.0或者LINUX?3.10(可預(yù)裝Preempt Linux系統(tǒng))闲询;
超小體積,郵票孔設(shè)計(jì)160pins浅辙, 尺寸為:45*45MM
以下是以CoM-X40I為核心板主板-SBC-X40I的功能圖:
以下為基于A40I/T3 SDK平臺(tái)的QT4.8移植和應(yīng)用開發(fā)連載(五)內(nèi)容:
5 編譯移植qt程序
? 盈鵬飛嵌入式把qt演示程序代碼放在<SDK>/buildroot-201611/target/user_rootfs_misc/a40i/qt_demo/目錄下扭弧,這里面有官方原來提供的一些演示程序,還有盈鵬飛嵌入式的一些演示程序记舆,見下圖:
我們本次編譯以qt4demo為例寄狼,說明下qt4.8的程序如何在A40I/T3平臺(tái)上進(jìn)行編譯和移植。
編譯完成后,我們把編譯好的程序打包到根文件系統(tǒng)中泊愧。
注意:<SDK>指的是SDK存放的根目錄伊磺,根據(jù)具體情況而定。
5.1編譯qt4.8的演示程序-qt4demo
1)準(zhǔn)備編譯環(huán)境
當(dāng)通過第三章節(jié)內(nèi)容把qt4.8的庫編譯好后删咱,QT_INSTALL_PREFIX屑埋、QT_INSATLL_LIBS、QT_INSTALL_BIN等環(huán)境配置就已經(jīng)配好了痰滋,后續(xù)編譯QT程序都和這個(gè)環(huán)境有關(guān)摘能,因此,不要輕易移動(dòng)QT庫的位置敲街。如果因?yàn)槟承┰颍ū热纾喊l(fā)布了QT SDK給用戶使用团搞,用戶把SDK放到了另外的目錄),此時(shí)需要通過設(shè)置qt.conf的辦法解決更換目錄的問題多艇,具體請(qǐng)參考附錄相關(guān)內(nèi)容逻恐。為了驗(yàn)證QT程序的開發(fā)環(huán)境,我們先找到編譯好的庫所在路徑(<SDK>/buildroot-201611/dl/?qt-everywhere-opensource-src-4.8.7/Qt-4.8.7)峻黍,并在bin目錄下找到qmake程序复隆,執(zhí)行./qmake ?-query執(zhí)行,執(zhí)行后的結(jié)果如下:
眾所周知姆涩,編譯QT程序時(shí)挽拂,必須通過qmake程序先生成qt項(xiàng)目的Makefile文件,然后再運(yùn)行make
指令進(jìn)行程序的編譯骨饿。通過qmake程序處理qt項(xiàng)目工程文件(以.pro為結(jié)尾的文件)時(shí)亏栈,qt程序開發(fā)的集成開發(fā)環(huán)境首先要知道qmake的路徑(或單獨(dú)的編譯qt程序的腳本也需要知道qmake程序路徑)和qt庫的位置。qt庫的位置和qt應(yīng)用程序需要的其他庫最后都會(huì)最后都會(huì)體現(xiàn)在Makefile文件中宏赘。 盈鵬飛嵌入式已經(jīng)提供了好了該qt4demo項(xiàng)目的編譯腳本(makeqt4demo):
直接執(zhí)行該腳本仑扑,就可以編譯qt4demo的程序了,編譯過程見如下指令:
Host# cd <SDK>/buildroot-201611/target/user_rootfs_misc/a40i/qt_demo/qt4demo
Host# ./makeqt4demo
注意:<SDK>指的是SDK存放的根目錄置鼻,根據(jù)具體情況而定。
這個(gè)編譯腳本(makeqt4demo)務(wù)必到qt4demo源代碼所在路徑執(zhí)行才可以正常編譯蜓竹。
如果makeqt4demo無法執(zhí)行箕母,原因是它不具備可執(zhí)行權(quán)限,可以通過chmod +x指令賦予它可執(zhí)行權(quán)限俱济。
2)編譯過程中缺少庫怎么辦?
下面以鏈接sqlite3(一種常規(guī)的操作數(shù)據(jù)庫的動(dòng)態(tài)庫)庫為例進(jìn)行說明嘶是。
qt4demo程序需要鏈接sqlite3庫,經(jīng)過查證蛛碌,在編譯buildroot時(shí)已經(jīng)編譯好了sqlite3組件聂喇。buildroot也在編譯后建立了sysroot(應(yīng)用開發(fā)時(shí)默認(rèn)鏈接的路徑),其具體路徑位于:
<SDK>/out/sun8iw11p1/linux/common/buildroot/host/usr/arm-buildroot-linux-gnueabihf/sysroot),sqlite3的庫文件和頭文件在sysroot目錄下/usr/lib和sysroot目錄下/usr/lib希太。編譯時(shí)克饶,需要想辦法把sqlite3的庫引入到qt項(xiàng)目的Makefile即可。
注意:<SDK>指的是SDK存放的根目錄誊辉,根據(jù)具體情況而定矾湃。
最后確認(rèn):在項(xiàng)目工程文件(qtdemo.pro)中填入庫的路徑即可,見下圖(紅框內(nèi)):
其中:$$PWD表示是項(xiàng)目工程文件qtdemo.pro當(dāng)前所在路徑堕澄;
$$LICHEE_SYSROOT是從makeqt4demo程序編譯腳本中獲得的環(huán)境變量邀跃,由該路徑引入了sqlite3庫。
5.2臨時(shí)調(diào)試qt4demo
通過scp指令把程序拷貝到主板上:
輸入命令:$scp qtdemo root@192.168.0.230:/qtdemo蛙紫,如下圖所示:
注意:ip地址是主板的ip地址拍屑,根據(jù)主板實(shí)際設(shè)定情況設(shè)定
另外:SBC-X40I主板的root密碼是:EMBF$#123456@Root
在主板的根目錄下,可看到qtdemo可執(zhí)行程序坑傅,如下圖所示:
5.3手工打包qtdemo演示程序到固件
編譯好qtdemo程序后僵驰,可以把程序手動(dòng)拷貝到<SDK>/buildroot-201611/target/user_rootfs_extra目錄下即可在固件打包時(shí),將該程序打包到主板的根文件系統(tǒng)裁蚁。盈鵬飛嵌入式在把該程序默認(rèn)放到了user_rootfs_extra/embfly_test/qt4demo目錄下矢渊。后續(xù)設(shè)置程序自啟動(dòng)時(shí),這個(gè)目錄還會(huì)被提及枉证。
以下是user_rootfs_extra目錄的內(nèi)容:
重點(diǎn)說明:user_rootfs_extra目錄對(duì)應(yīng)的是未來目標(biāo)板的根文件系統(tǒng)的/根目錄矮男;
<SDK>指的是SDK存放的根目錄,根據(jù)具體情況而定室谚。
5.4自動(dòng)編譯qt4demo程序并自動(dòng)打包
為了方便用戶開發(fā)毡鉴,全志官方給出了自動(dòng)編譯qt程序的框架。在如下目錄下(<SDK>/buildroot-201611/target/user_rootfs_misc/a40i/qt_demo/)有一個(gè)rebuildAll.sh腳本秒赤,這個(gè)腳本會(huì)在執(zhí)行整個(gè)SDK編譯時(shí)猪瞬,自動(dòng)調(diào)用該腳本的編譯,具體目錄見下圖:
rebuildAll.sh腳本的內(nèi)容如下:
如果要自動(dòng)編譯qt4demo目錄下的代碼入篮,只需要在rebuildAll.sh腳本中增加如上圖中紅色方框的內(nèi)容即可陈瘦。其中makeqt4demo編譯腳本前面章節(jié)已經(jīng)介紹過。