本文記錄了QT4.8圖形界面在全志A40I/T3 SDK平臺上的移植過程前塔,說明過程中可能會技術瑕疵崎逃,希望大家提供寶貴意見。
本文移植的平臺來自于盈鵬飛嵌入式的CoM-X40I/T3A平臺(處理器分別時是全志的A40I/T3)。
以下是盈鵬飛嵌入式CoM-X40I核心模塊的簡要介紹:
CoM-X40I產(chǎn)品特性:
采用Allwinner公司Cortex-A7四核A40i處理器,運行最高速度為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大容量電子盤浊伙,可啟動撞秋;
支持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)的支持,可預裝Android7.0或者LINUX?3.10(可預裝Preempt Linux系統(tǒng))卧蜓;
超小體積帐要,郵票孔設計160pins, 尺寸為:45*45MM
以下是以CoM-X40I為核心板主板-SBC-X40I的功能圖:
以下為基于A40I/T3 SDK平臺的QT4.8移植和應用開發(fā)連載(六)內(nèi)容:
6 qt4程序發(fā)布
6.1應用程序發(fā)布簡介
應用程序經(jīng)過交叉編譯后烦却,發(fā)布到嵌入式主板前宠叼,一般需要執(zhí)行如下步驟:
移植程序依賴動態(tài)庫
添加程序相關資源
開機自動運行
程序的運行依賴于相關的動態(tài)庫,動態(tài)庫一般在程序運行之前發(fā)布,可執(zhí)行文件運行時可以搜索到冒冬。程序運行除需要指定動態(tài)庫之外伸蚯,還可能需要指定其他資源,如qt程序可能需要指定字體简烤、圖片等剂邮。
下面以qtdemo發(fā)布到SBC-X40I主板為例,介紹QT程序發(fā)布的問題横侦。程序發(fā)布需執(zhí)行如下步驟:
?移植qtdemo依賴動態(tài)庫
設置qtdemo查找動態(tài)庫路徑
相關字體挥萌、圖片資源
開機自動運行qtdemo程序
6.2移植依賴動態(tài)庫
qtdemo所需要的特定的動態(tài)庫,例如sqlite3枉侧,可在buildroot生成根文件系統(tǒng)時選擇組件(參考linux開發(fā)指南)引瀑,也可從交叉編譯鏈中找到并拷貝到主板根文件系統(tǒng)中。如果buildroot中也沒有集成榨馁,一般需要單獨進行移植憨栽。下面是qtdemo依賴動態(tài)庫(庫版本可能略有區(qū)別):
// glibc :c運行庫,幾乎所有動態(tài)庫都依賴該庫翼虫。
libdl.so.2
libgcc_s.so.1
libc.so.6
ld-linux-armhf.so.3 ?
//qtlib庫
libQtCore.so.4.8.4 ????????????????????
libQtGui.so.4.8.4 ??????????????
libQtNetwork.so.4.8.4 ?????????????????????????????
libasound.so.2.0.0 ????????????????
libfreetype.so.6.10.0 ????????????????
libid3tag.so.0.3.0 ?????????????????????????????????????????
libmad.so.0.2.1
libncurses.so.5.9
libpng14.so.14.12.0
libsqlite3.so.0.8.6
// c++運行庫
libstdc++.so.6.0.17
libstdc++.so.6.0.17-gdb.py
libz.so.1.2.7
//觸摸屏庫
libts-1.0.so.0.0.0
ts/
terminfo@
6.3 linux下程序搜索動態(tài)庫的說明及先后順序
linux下一般程序運行時查找動態(tài)庫的方法如下所示:
1屑柔、系統(tǒng)默認搜索動態(tài)庫路徑
linux系統(tǒng)默認情況下會在/lib和/usr/lib目錄下搜索動態(tài)庫,所以可將qtdemo所需動態(tài)庫添加到該目錄即可珍剑。SBC-X40I主板將glibc庫放在/lib目錄下掸宛,其他qtdemo依賴動態(tài)庫/usr/lib 目錄下。
2招拙、根據(jù)環(huán)境變量LD_LIBRARY_PATH查找
方法:如設置添加/usr/test為查找動態(tài)庫路徑唧瘾,可在目標板/etc/profile文件中添加如下語句:
export LD_LIBRARY_PATH=/usr/test:$ LD_LIBRARY_PATH,如下圖所示:
執(zhí)行命令:source /etc/profile,即可添加/usr/test為動態(tài)庫的查找路徑迫像,如下圖所示:
此時將qtdemo所需動態(tài)庫添加到/usr/test目錄即可劈愚,在profile文件中加載增加環(huán)境變量在系統(tǒng)中一直有效,同時也是全部用戶有效闻妓。有些情況下,主板上運行的多個程序可能依賴的同一個動態(tài)庫版本不同掠械,如果統(tǒng)一用profile文件進行配置由缆,將導致某個程序運行出現(xiàn)問題。這時最好的辦法是使用終端有效的腳本進行臨時配置猾蒂,程序啟動后均唉,環(huán)境變量即失效。具體做法是需要配置環(huán)境變量的時候肚菠,執(zhí)行運行下腳本(指令:source *.sh)舔箭,在SBC-X40I主板上提供了qt4.8.sh腳本,具體如何應用請查看《配置qt自啟動》一章節(jié)。
6.4添加字體
用戶可以選擇下載自己喜歡的字體层扶,放在主板/usr/local/Qt-4.8.7/lib/fonts目錄下箫章,如果只需要一種字體可以把其他字體全部刪除,只保留所需要的字體镜会。
以移植文泉驛字體庫(qpf格式)為例:
下載地址為:http://download.csdn.net/detail/yanzi1225627/4478888檬寂,下載完成后復制到虛擬機
linux系統(tǒng)下,可通過scp命令將其拷貝到主板/usr/local/Qt-4.8.7/lib/fonts目錄下戳表。如下圖所示:
在主板/usr/local/Qt-4.8.7/lib/fonts目錄下可看到該字體桶至,如下圖所示:
6.5指定圖片資源
Qt程序在使用圖片時,可以直接編譯進工程匾旭,也可以在程序運行中加載圖片镣屹。qtdemo程序同時使用了這兩種方法,普通小圖片采用直接編譯進工程中价涝,也有部分圖片是在程序運行時才加載女蜈。在qtdemo程序config_all.h中指定了運行時才加載的圖片,如下圖所示:
所以需要在SBC-X40I主板的/usr/qt4demo目錄下需要建立image目錄飒泻,將所提及的圖片拷貝到該目錄下即可鞭光。
另外,qtdemo程序運行音頻測試時指定了/usr/qt4demo/mediafile/aaa.mp3文件泞遗,所以在SBC-X40I主板上的/usr/qt4demo/mediafile/目錄下也需要植一個aaa.mp3的文件惰许。
最后,qt程序中默認只支持png格式圖片史辙,如果需要使用其他格式汹买,需要添加相應圖片插件,默認路徑為/usr/lib/目錄下聊倔,SBC-X40I主板默認支持的圖片格式:jpeg 晦毙、tga 、ico 耙蔑、tiff格式见妒。
至此,即可在SBC-X40I主板上正常運行qtdemo程序甸陌,輸入命令:
Target#cd /embfly_test/qt4demo
Target#./qtdemo –qws –fn -wenquanyi &,
執(zhí)行結果如下所示:
可以看到qt界面须揣,觸摸屏可以正常工作。如下圖所示:
命令參數(shù):
–qws :作為服務器模式運行
-fnwenquanyi:指定qtdemo 使用wenquanyi字體
6.3章節(jié)-指定動態(tài)庫路徑钱豁、6.4章節(jié)-添加字體以及6.5章節(jié)-指定圖片資源耻卡,這幾個qt程序需要的資源可以通過預制到<SDK>/buildroot-201611/target/user_rootfs_extra對應的目錄下,在固件打包時將該程序打包到主板的根文件系統(tǒng)牲尺。
6.6實現(xiàn)開機自動運行qtdemo程序
SBC-X40I主板如何實現(xiàn)開機自動運行qt程序卵酪?
1)系統(tǒng)啟動時,會執(zhí)行rcS腳本,rcS腳本會調(diào)用/etc/init.d目錄下以S+兩位數(shù)字+文件名字命名的文件溃卡。
2)調(diào)用S94Qt-application腳本后溢豆,該腳本會調(diào)用launch_qt48.sh腳本,該腳本會執(zhí)行觸摸屏的校驗塑煎,最后調(diào)用runqt48腳本沫换,該腳本在/etc/init.d目錄下
因此用戶要啟動其他程序,只要更改runqt48的腳本即可最铁。
首先讯赏,上電SBC-40I主板,在終端中查看下開機自動運行腳本/etc/init.d/rcS冷尉,如下所示:
可看到開機自動運行/etc/init.d/目錄下以S+兩位數(shù)字+文件名字命名的文件漱挎。
在主板的SBC-X40I主板的/etc/init.d/目錄下找到S94Qt-application文件,如下圖所示:
查看S94Qt-application雀哨,可以看到它執(zhí)行了5步:
第一步:見方框1磕谅,判斷是否有qt4.8的庫目錄存在,如果有存在雾棺,則執(zhí)行. /qt4.8.sh進行初始化膊夹。
初始化的目的是為了下一步觸摸屏校驗可運行,qt4.8.sh的內(nèi)容如下:
第二步:見方框2捌浩,這一步是判斷觸摸屏的節(jié)點是否存在放刨,為下一步執(zhí)行觸摸檢驗做準備。截圖中使用了ts0/ts1/ts2節(jié)點尸饺,實際上在SBC-X40I主板上进统,我們使用的是touchscreen0節(jié)點。
第三步:見方框3浪听,這一步是判斷觸摸屏是否已經(jīng)存在校驗文件pointercal螟碎,該文件配置在主板的/etc目錄下。如果該文件已經(jīng)存在了迹栓,那么觸摸屏不再需要校驗掉分。如發(fā)現(xiàn)校驗文件不準,則可以把該文件刪除后克伊,
重新執(zhí)行ts_calibrate指令進行重新校驗叉抡。
第四步:見方框4,這一步是執(zhí)行觸摸屏校驗工作答毫。看腳本中是使用了絕對路徑/usr/local/tslib1.4/bin/ts_calibrate來調(diào)用程序季春。在腳本中已經(jīng)配置了如下腳本洗搂,可以直接執(zhí)行ts_calibrate指令亦可。
export T_ROOT=/usr/local/tslib1.4
export PATH=$T_ROOT/bin:$PATH
第五步:見方框5,執(zhí)行runqt48腳本耘拇,runqt48腳本內(nèi)容如下:
其中撵颊,. ?/qt4.8.sh是臨時設置qt4.8的環(huán)境變量,然后執(zhí)行/embfly_test/qt4demo/qtdemo程序惫叛。
如果用戶要啟動自己的程序倡勇,只要更改runqt48的腳本(把這個程序/embfly_test/qt4demo/qtdemo換掉)即可。