蔣琳嬌,劉 淼,金 星,
(1.中國(guó)科學(xué)院上海微系統(tǒng)與信息技術(shù)研究所 上海200050;2.浙江中科領(lǐng)航汽車(chē)電子有限公司 浙江 杭州311228)
嵌入式Linux 系統(tǒng)由于其可移植性好、可靠性高、功耗低等優(yōu)點(diǎn), 得到了迅速發(fā)展和廣泛應(yīng)用。 伴隨著桌面環(huán)境KDE 的快速發(fā)展和普及,Qt 作為跨平臺(tái)的GUI 開(kāi)發(fā)工具,很可能成為L(zhǎng)inux 平臺(tái)上圖形界面開(kāi)發(fā)最流行的工具。 對(duì)于提供圖形用戶(hù)界面的嵌入式系統(tǒng),友好的人機(jī)交互界面及快速流暢的啟動(dòng)過(guò)程是提高用戶(hù)體驗(yàn)的重要因素[1]。
目前, 加快Linux 系統(tǒng)啟動(dòng)的技術(shù)手段主要包括待機(jī)、休眠、常規(guī)啟動(dòng)優(yōu)化等。
待機(jī)技術(shù)是將信息保存在RAM 中并在待機(jī)時(shí)對(duì)RAM及相關(guān)芯片持續(xù)供電, 以便在下次啟動(dòng)時(shí)將信息快速恢復(fù),功耗較高。
休眠技術(shù)是將系統(tǒng)和應(yīng)用程序啟動(dòng)所需寄存器和RAM信息制成快照映像存儲(chǔ)在閃存中,啟動(dòng)時(shí)對(duì)休眠所需的器件進(jìn)行初始化,然后把快照映像從閃存復(fù)制到RAM,實(shí)現(xiàn)快速啟動(dòng),制作快照映像是主要難點(diǎn)。
常規(guī)啟動(dòng)優(yōu)化主要包括引導(dǎo)加載程序bootloader、 內(nèi)核加載、應(yīng)用程序優(yōu)化3 個(gè)方面。針對(duì)一般嵌入式Linux 系統(tǒng)采用的內(nèi)核映像由磁盤(pán)或Flash 拷貝到RAM 中再解壓執(zhí)行的方法,通常采用芯片內(nèi)執(zhí)行(XIP,eXecute In Place)技術(shù)[2],在系統(tǒng)啟動(dòng)時(shí)直接在非易失性存儲(chǔ)位置執(zhí)行,省去了拷貝解壓過(guò)程。但這種方法更適用于NOR Flash,本文采用的實(shí)驗(yàn)平臺(tái)中NAND Flash 由于基于扇區(qū), 讀取速度較慢, 沒(méi)有專(zhuān)用SRAM 接口,可能存在壞塊等原因,并不適用XIP 技術(shù)。 在Qt作為開(kāi)發(fā)環(huán)境的嵌入式系統(tǒng)中,采用Qt Quick 作為圖形用戶(hù)界面開(kāi)發(fā)工具,能使界面更美觀靈活,但啟動(dòng)速度不甚理想。
為了縮短嵌入式系統(tǒng)啟動(dòng)時(shí)間,本文針對(duì)實(shí)驗(yàn)用的基于全志A10 處理器的硬件平臺(tái),提出了相應(yīng)的常規(guī)啟動(dòng)優(yōu)化方案。 利用grabserial 工具來(lái)讀取并標(biāo)記串口信息的時(shí)間,結(jié)合QML Profiler 采集的Qt Quick 應(yīng)用程序信息, 對(duì)系統(tǒng)啟動(dòng)時(shí)間進(jìn)行分析和比較,針對(duì)主要的延時(shí)因素,從bootloader、內(nèi)核加載、Qt Quick 程序3 個(gè)方面提出了優(yōu)化方案。
嵌入式設(shè)備上電或復(fù)位后,CPU 通常執(zhí)行位于Flash/ROM 中已知位置處的第一段代碼,即bootloader。它主要用來(lái)對(duì)CPU 及外設(shè)進(jìn)行初始化,并調(diào)用Linux 內(nèi)核。
Bootloader 在執(zhí)行時(shí)一般分為兩個(gè)階段, 先將SPL(second program loader) 拷 貝 入 內(nèi) 部RAM 執(zhí) 行, 再 引 導(dǎo)uboot。 在uboot 啟動(dòng)時(shí)會(huì)有幾秒等待按鍵來(lái)跳過(guò)自啟動(dòng)的過(guò)程,占用了大量時(shí)間。
目前,SPL 不僅能完成CPU、PLL、DDR、 串口等的初始化,也能對(duì)設(shè)備上的操作系統(tǒng)進(jìn)行控制[3]。 可采用SPL 替代uboot 直接加載Linux 內(nèi)核的方法, 正常啟動(dòng)時(shí)省去uboot 的執(zhí)行過(guò)程。 由于串口線容易受到干擾,因此修改成固定按鍵進(jìn)入uboot。 這樣在啟動(dòng)時(shí)不再需要等待按鍵,SPL 直接調(diào)用內(nèi)核,加快了啟動(dòng)速度。
內(nèi)核是Linux 操作系統(tǒng)的核心, 它負(fù)責(zé)管理系統(tǒng)的進(jìn)程、內(nèi)存、設(shè)備驅(qū)動(dòng)程序、文件和網(wǎng)絡(luò)系統(tǒng)。
優(yōu)化內(nèi)核主要從以下2 個(gè)方面考慮:
1) 減小尺寸。 內(nèi)核映像的拷貝解壓過(guò)程花費(fèi)了大量時(shí)間,小尺寸的內(nèi)核能縮短拷貝及解壓所需的時(shí)間,使啟動(dòng)速度更快。
2)減少初始化代碼。 裁減掉不必要的功能,減少加載內(nèi)核時(shí)所需運(yùn)行的代碼量,從而減少執(zhí)行時(shí)間,加快啟動(dòng)速度。
Bootloader 在調(diào)用存儲(chǔ)在NAND Flash 上的Linux 內(nèi)核映像時(shí), 需先將其從磁盤(pán)或Flash 等存儲(chǔ)設(shè)備拷貝到內(nèi)部RAM 中,然后解壓并執(zhí)行。
Linux 內(nèi)核根據(jù)是否壓縮可分為兩種: 非壓縮內(nèi)核Image 和壓縮內(nèi)核zImage。 zImage 是Image 經(jīng)過(guò)壓縮后,在開(kāi)頭加上解壓縮的代碼形成的。Image 省去了解壓縮的過(guò)程,但是拷貝過(guò)程較慢,而zImage 拷貝過(guò)程較快,卻需要解壓縮后才能執(zhí)行。
不同壓縮方式的壓縮率不同, 壓縮與解壓的速度也不同,高壓縮率對(duì)磁盤(pán)空間小的嵌入式系統(tǒng)更有用,壓縮速度只對(duì)創(chuàng)建內(nèi)核時(shí)有影響,而解壓時(shí)間對(duì)系統(tǒng)每一次啟動(dòng)都有影響。 很多壓縮算法都能應(yīng)用于內(nèi)核壓縮, 常用的有LZ4、LZO、XZ、LZMA、Gzip 等。
LZ4 與LZO 的壓縮率較差,LZ4 壓縮后的內(nèi)核映像大小比LZO 大8%,但是解壓速度比LZO 快。LZO 的內(nèi)核映像的大小比Gzip 大10%, 但壓縮和解壓縮速度較快。 XZ 內(nèi)核映像大小比Gzip 小約30%,速度與LZMA 相當(dāng),相較Gzip 和LZO 較慢。
拷貝過(guò)程的速度取決于存儲(chǔ)設(shè)備的讀取速度, 解壓過(guò)程的速度取決于CPU 的運(yùn)算速度。根據(jù)不同的系統(tǒng)條件選擇一種壓縮率和解壓速度達(dá)到最佳平衡的壓縮方式,盡可能加快內(nèi)核映像加載速度。
嵌入式Linux 內(nèi)核是PC 機(jī)Linux 內(nèi)核經(jīng)過(guò)裁剪、定制、修改、交叉編譯后得到的。 PC 機(jī)Linux 內(nèi)核為了保證系統(tǒng)的兼容性和靈活性, 啟動(dòng)時(shí)要進(jìn)行大量硬件檢測(cè)和初始化[1],體積大,耗時(shí)長(zhǎng)。 而嵌入式系統(tǒng)資源有限,且硬件設(shè)備基本保持不變,因此在嵌入式系統(tǒng)的應(yīng)用中,通常會(huì)結(jié)合硬件條件并根據(jù)實(shí)際需求對(duì)內(nèi)核進(jìn)行配置,去除多余的組件,選擇所需要的功能和驅(qū)動(dòng),合理設(shè)置內(nèi)核編譯配置選項(xiàng)。
內(nèi)核的配置菜單分為常規(guī)設(shè)置、內(nèi)核特性、設(shè)備驅(qū)動(dòng)、文件系統(tǒng)等, 如文件系統(tǒng)的Second extended fs support、Quota support、CD-ROM/DVD filesystems、Pseudo filesystems 等模塊,在嵌入式系統(tǒng)中無(wú)需使用則可在配置過(guò)程中將其裁剪,如The Extended 4(ext4) filesystem、Native language support 模塊,可延遲至啟動(dòng)后加載的部分則編譯為動(dòng)態(tài)可加載內(nèi)核模塊(LKM),LKM 是內(nèi)核需要時(shí)可載入作為內(nèi)核的一部分在內(nèi)核空間運(yùn)行,不需要時(shí)可卸載的代碼塊。
內(nèi)核裁剪定制減少了內(nèi)核啟動(dòng)時(shí)運(yùn)行的代碼量,也減少內(nèi)核體積和內(nèi)存占用,加快了啟動(dòng)速度。
文件系統(tǒng)采用UBIFS,不同于傳統(tǒng)的文件系統(tǒng),它不工作于塊設(shè)備上,如MMC、SD 卡、USB flash、SSDs 等設(shè)備,而是專(zhuān)為原始非易失性閃存 (raw Flash) 設(shè)計(jì)的。 UBIFS 工作于UBI 卷上,UBI 子系統(tǒng)是一個(gè)flash 設(shè)備損耗均衡和卷管理系統(tǒng),它工作于MTD 設(shè)備上,MTD 相當(dāng)于raw Flash。
UBI 鏈接MTD 設(shè)備時(shí)會(huì)先對(duì)其進(jìn)行掃描,所消耗的時(shí)間和Flash 物理擦除塊數(shù)量成正比。 從Linux V3.7 開(kāi)始UBI 系統(tǒng)推出了一個(gè)新的特性叫做fastmap 來(lái)減少初始化UBI 的時(shí)間。 fastmap 存儲(chǔ)了物理擦除塊到邏輯塊的映射關(guān)系、擦除計(jì)數(shù)、序列號(hào)等UBI 鏈接MTD 設(shè)備時(shí)所需要的所有信息。 因此在鏈接時(shí),只需要讀取flash 的fastmap,這明顯少于JFFS2 掛載MTD 設(shè)備所需讀取的內(nèi)容。另外,為fastmap 校驗(yàn)需要花費(fèi)一定的運(yùn)算時(shí)間,但這與flash 的IO 時(shí)間相比微乎其微,因此fastmap 能使UBI 在幾乎恒定的時(shí)間內(nèi)鏈接到MTD 設(shè)備[4]。
Fastmap 節(jié)省了掃描整個(gè)MTD 設(shè)備的時(shí)間, 將UBI 鏈接過(guò)程限制在一個(gè)幾乎恒定的時(shí)間,且不影響任何現(xiàn)有的UBI 魯棒性,而且在發(fā)現(xiàn)fastmap 被破壞的情況下能回到掃描模式。
在系統(tǒng)啟動(dòng)時(shí),一般會(huì)在串口終端打印啟動(dòng)信息。 打印速度取決于串口的速度和處理器的速度, 受串口延時(shí)的影響。 可通過(guò)設(shè)置內(nèi)核啟動(dòng)參數(shù)“quiet”來(lái)控制內(nèi)核的日志級(jí)別為4,使之處于靜默模式,只打印關(guān)鍵消息,縮短啟動(dòng)時(shí)間。
在嵌入式設(shè)備創(chuàng)建用戶(hù)體驗(yàn)方面的需求已發(fā)生巨大變化。 快節(jié)奏行業(yè)的用戶(hù)現(xiàn)在要求制作美觀的界面,以60 幀每秒的速度流暢運(yùn)行,而且過(guò)渡、動(dòng)畫(huà)和縮放都要平滑[5]。
應(yīng)用程序采用的是高級(jí)用戶(hù)界面技術(shù)Qt Quick (Qt User Interface Creation Kit),開(kāi)發(fā)人員和設(shè)計(jì)人員可用它協(xié)同創(chuàng)建動(dòng)畫(huà)觸摸式用戶(hù)界面和應(yīng)用程序。 Qt5.2 引入了一個(gè)場(chǎng)景圖形渲染器,Qt5.3 嵌入式企業(yè)版發(fā)布了Qt Quick 編譯器[5],進(jìn)一步改善了Qt Quick 的圖形性能,為系統(tǒng)釋放了更多的CPU時(shí)間并且更加有效的使用GPU。
一個(gè)精細(xì)的用戶(hù)圖形界面程序在嵌入式設(shè)備上運(yùn)行時(shí)往往產(chǎn)生啟動(dòng)速度慢、動(dòng)畫(huà)不順暢、延時(shí)過(guò)長(zhǎng)、幀速率過(guò)低等問(wèn)題。 針對(duì)啟動(dòng)速度慢的問(wèn)題, 采用Qt Creator 自帶的QML Profiler 來(lái)遠(yuǎn)程調(diào)試分析嵌入式設(shè)備上應(yīng)用程序的啟動(dòng)時(shí)間開(kāi)銷(xiāo),并從以下幾個(gè)方面提出優(yōu)化方案。
圖片對(duì)于用戶(hù)界面來(lái)說(shuō)至關(guān)重要, 而加載圖片的時(shí)間開(kāi)銷(xiāo)也很大。GPU 處理速度和性能有限,且Frame Buffer 大小有限, 大批量使用圖片或者使用大容量圖片會(huì)減緩處理速度,延長(zhǎng)開(kāi)機(jī)時(shí)間,降低幀速率。 針對(duì)這一問(wèn)題,提出以下幾個(gè)圖片優(yōu)化方案:
1)一般來(lái)說(shuō),本地圖片能立刻被加載,此時(shí)用戶(hù)接口被堵塞,直到加載完成。 如果需要加載一張大圖,最好使用低優(yōu)先級(jí)的異步線程來(lái)加載,設(shè)置圖片asynchronous 屬性為true。 如果圖片來(lái)自網(wǎng)絡(luò)而非本地, 那么它將被自動(dòng)地異步加載,線程和狀態(tài)屬性也會(huì)被適當(dāng)更新。
2)圖片在內(nèi)部被緩存和共享,因此如果幾個(gè)圖片元素的資源相同,那么只會(huì)有一個(gè)圖片元素被加載。因此盡可能使用同一資源,將其鏡面對(duì)稱(chēng)或更改其他屬性來(lái)達(dá)到預(yù)期效果。
3)圖片在QML 交互界面中經(jīng)常是內(nèi)存的最大使用者。對(duì)于不組成交互界面的圖片,特別是從外部加載或者用戶(hù)提供的內(nèi)容,建議圖片尺寸通過(guò)sourceSize 屬性來(lái)限定。
4)只在必須的時(shí)候設(shè)置圖片smooth 屬性。
5)在應(yīng)用程序中,可將不產(chǎn)生相對(duì)移動(dòng)或其他如透明度、顏色等變化的幾張圖片合并。
在精細(xì)的用戶(hù)界面應(yīng)用程序中, 會(huì)使用大量經(jīng)過(guò)精心設(shè)計(jì)和排版的圖片和文字。 啟動(dòng)時(shí)若加載龐大的QML 文件將造成開(kāi)機(jī)速度慢,內(nèi)存占用大等問(wèn)題。 動(dòng)畫(huà)設(shè)計(jì)的需要,會(huì)使大量圖片產(chǎn)生相對(duì)移動(dòng),無(wú)法合并。 一般其他一些元素在開(kāi)機(jī)動(dòng)畫(huà)結(jié)束后才顯示出來(lái),如果在程序加載時(shí)將所有元素都創(chuàng)建,則所有數(shù)據(jù)都會(huì)讀入內(nèi)存中,這使得啟動(dòng)和運(yùn)行速度變慢。
為了在啟動(dòng)時(shí)減少加載內(nèi)容, 可將應(yīng)用程序分割成幾個(gè)QML 文件,每個(gè)文件包含一個(gè)邏輯UI 實(shí)體,按需求加載UI。 當(dāng)程序啟動(dòng)時(shí),僅加載需要顯示的部分,當(dāng)開(kāi)機(jī)界面完成后,再進(jìn)行其他工作。 loader 能夠用來(lái)動(dòng)態(tài)加載及卸載QML文件或組件對(duì)象,它允許了延時(shí)創(chuàng)建在程序啟動(dòng)加載時(shí)不使用的元素,直到這些元素需要使用時(shí)才創(chuàng)建,不需要時(shí)則釋放,用延時(shí)的方式盡可能減少啟動(dòng)時(shí)所需工作,加快了程序啟動(dòng)速度,減少了內(nèi)存占用,提高了幀速率。
使用Qt Quick 開(kāi)發(fā)應(yīng)用程序周期短,與傳統(tǒng)的C++程序不同,它在運(yùn)行時(shí)動(dòng)態(tài)加載QML 資源,即時(shí)編譯技術(shù)用于生成機(jī)器代碼,加速執(zhí)行JavaScript 和QML 綁定表達(dá)式。 但在程序啟動(dòng)時(shí), 需要解析并動(dòng)態(tài)加載QML 文件才能成為可見(jiàn)的交互界面。
Qt5.3 在嵌入式企業(yè)版里首次推出了一個(gè)新的專(zhuān)業(yè)編譯工具,Qt Quick 編譯器,它能保護(hù)QML 文件資源的知識(shí)產(chǎn)權(quán),并且提高加載速度,改善性能。 Qt Quick 編譯器會(huì)將QML 文件進(jìn)行預(yù)解析, 連同JavaScript 文件一起翻譯成C++中間源代碼,在傳統(tǒng)的編譯器編譯后,代碼被鏈接到最終二進(jìn)制文件[6]。 所有的解析工作都在編譯時(shí)間完成,縮短了加載時(shí)間,提高了性能,對(duì)于使用Qt Quick 來(lái)做交互界面的設(shè)備和應(yīng)用程序的啟動(dòng)時(shí)間會(huì)有很大改善,Qt 官網(wǎng)表明, 一個(gè)典型的中型Qt Quick 應(yīng)用程序經(jīng)過(guò)編譯后啟動(dòng)速度相較之前快30-40%[7]。
硬件平臺(tái):全志A10 處理器,主頻1 GHz
非易失性存儲(chǔ)器NAND Flash 4G
動(dòng)態(tài)存儲(chǔ)器SRAM 512M
軟件平臺(tái):移植好的u-boot
內(nèi)核Linux-sunxi 3.4
根文件系統(tǒng)buildroot
文件系統(tǒng)ubi/ubifs
圖形界面開(kāi)發(fā)工具Qt 5.3
通過(guò)grabserial 和QML Profiler 工具采集系統(tǒng)啟動(dòng)時(shí)間,實(shí)驗(yàn)數(shù)據(jù)證明,本文提出的啟動(dòng)優(yōu)化方案在bootloader、內(nèi)核加載、Qt Quick 應(yīng)用程序3 個(gè)方面都有明顯的改善效果。 最終啟動(dòng)時(shí)間為5.3 s,各優(yōu)化部分實(shí)驗(yàn)數(shù)據(jù)如表1 所示。
表1 啟動(dòng)優(yōu)化方案效果Tab.1 Optimization effect of boot time
優(yōu)化bootloader,采用SPL 直接啟動(dòng)內(nèi)核的方式,省去了uboot 的運(yùn)行,以及5 s 等待按鍵的過(guò)程,總體運(yùn)行時(shí)間縮短5.3 s。
內(nèi)核配置,將不需要的內(nèi)容裁剪,啟動(dòng)時(shí)不使用的內(nèi)容編譯成模塊。 未經(jīng)裁剪的內(nèi)核映像通過(guò)LZO 方式壓縮,體積為5.1 M,裁剪后僅2.3 M,優(yōu)化后啟動(dòng)時(shí)間縮短0.6 s。
內(nèi)核幾種壓縮方式的比較結(jié)果如圖1 所示。 LZ4 與LZO的壓縮率較低但解壓速度快,拷貝與解壓時(shí)間短。 LZ4 壓縮后的內(nèi)核比LZO 稍大,但解壓更快,最終結(jié)果幾乎相同。
UBI 掛載MTD 設(shè)備時(shí),一般分區(qū)越大,掛載時(shí)間呈線性增長(zhǎng); 使用fastmap 可使掛載時(shí)間相對(duì)恒定。 在分區(qū)大小為4G 的條件下,使用fastmap 縮短了4 s 的啟動(dòng)時(shí)間。
圖1 幾種壓縮方式的比較Fig. 1 Comparing diagram of several methods of compression
優(yōu)化或者關(guān)閉調(diào)試串口的輸出, 至少可以縮短1 s 的啟動(dòng)時(shí)間。
Qt Quick 應(yīng)用程序在優(yōu)化前, 通過(guò)QML profiler 可以看出其編譯和創(chuàng)建元素的時(shí)間很長(zhǎng),占用5.9 s,編譯創(chuàng)建完成后才開(kāi)始繪制交互界面,如圖3(a)所示。
將QML 文件分割, 把程序啟動(dòng)時(shí)不需要的元素采用Loader 形式延遲至必要時(shí)再動(dòng)態(tài)加載,這樣程序啟動(dòng)時(shí)間縮短至5.1 s,如圖3(b)所示。
圖2 fastmap 效果與分區(qū)大小的關(guān)系Fig. 2 Relationship of fastmap effect and partition size
對(duì)應(yīng)用程序中的圖片進(jìn)行優(yōu)化, 刪除不必要的圖片,合并多余的圖片,啟動(dòng)時(shí)間減少到4.6 s,如圖3(c)所示。
采用Qt5.3 中推出的Qt Quick 編譯器, 使得QML 內(nèi)容能夠在程序運(yùn)行之前就預(yù)解析完成,啟動(dòng)時(shí)不再占用時(shí)間來(lái)解析QML,大大縮短了程序啟動(dòng)時(shí)間,為2.8 s,如圖3(d)所示。 相較未經(jīng)過(guò)Qt Quick 編譯器編譯時(shí)的啟動(dòng)時(shí)間4.6 s,縮短了39%。
圖3 Qt Quick 應(yīng)用啟動(dòng)時(shí)間分析Fig. 3 QML Profiler analyzation on boot time of Qt Quick application
本文對(duì)基于Linux 和Qt Quick 的嵌入式系統(tǒng)啟動(dòng)進(jìn)行了分析,提出了由SPL 直接調(diào)用內(nèi)核,選用適合的內(nèi)核壓縮方式,采用fastmap 掛載文件系統(tǒng),在應(yīng)用程序中減少圖片,采用新的Qt Quick 編譯器等優(yōu)化方案,由實(shí)驗(yàn)采集的數(shù)據(jù)證明,啟動(dòng)時(shí)間縮短73%,優(yōu)化效果顯著。 嵌入式系統(tǒng)軟硬件結(jié)構(gòu)復(fù)雜多樣,在相應(yīng)的實(shí)際場(chǎng)合中靈活應(yīng)用,可加快系統(tǒng)啟動(dòng)速度,提供更好的人機(jī)交互。
[1] 陳軍,涂亞慶. 加快嵌入式Linux系統(tǒng)啟動(dòng)速度的方法及應(yīng)用[J]. 后勤工程學(xué)院學(xué)報(bào),2005(3):54-58.CHEN Jun,TU Ya -qing. Analysis and Application of Accelerating the Boot Process for An Embedded Linux System [J].Journal of Logistical Engineering University,2005(3):54-58.
[2] 段紅祥, 孫棣華, 劉衛(wèi)寧等. 基于內(nèi)核啟動(dòng)優(yōu)化的嵌入式Linux快速啟動(dòng)方案[J].計(jì)算機(jī)工程與設(shè)計(jì),2009(1):16-18.YIN Xiang-hong,SUN Di-hua,LIU Wei-ning,et al.Fast booting method based on kernel booting improvement in embedded Linux[J].Computer Engineering and Design,2009(1):16-18.
[3] SPL[DB/OL].(2012-11)[2014-06-25].http://forum.xda-develdevelopers.com/wiki/index.php&title=SPL&oldid=29084.
[4] Richard Weinberger. UBI: Fastmap request for inclusion(v18)[EB/OL]. 2012.9.[2014-06-25]. http://lwn.net/Articles/517422/.
[5] Digia updates Qt Enterprise Embedded to deliver enhanced development and deployment experience for embedded device creation [EB/OL]. 2014.5 [2014-06-29]. http://qt.digia.com/About-Us/News/Digia-updates-Qt-Enterprise-Embedded-to-deliver-enhanced-development-and-deploymentexperience-for-embedded-device-creation/.
[6] Qt Quick Compiler[EB/OL].2014[2014-06-30]. http://doc.qt.digia.com/QtQuickCompiler/index.html.
[7] Tuukka Turunen. Qt 5.3.1 Released [EB/OL].2014.6 [2014-06-30]. http://blog.qt.digia.com/blog/2014/06/25/qt-5-3-1-released/.