秦貞滕 張永狀 鄧志豪 重慶三峽學(xué)院電子與信息工程學(xué)院通信工程專業(yè)2015級(jí)
引言:隨著社會(huì)的不斷發(fā)展,無(wú)線的傳輸速度和傳輸時(shí)延也越來(lái)越快,這將推動(dòng)著物聯(lián)網(wǎng)技術(shù)的快速發(fā)展,而嵌入式系統(tǒng)可以說(shuō)是一種比較好的與各類硬件軟件連接工作的平臺(tái),嵌入式系統(tǒng)可以自定義各種驅(qū)動(dòng)是否含有,讓操作系統(tǒng)能以最小的體積,最合適的功能,不浪費(fèi)運(yùn)行空間和設(shè)備性能來(lái)保證嵌入式設(shè)備正常工作。而QT是一種一次開(kāi)發(fā),多處運(yùn)行的一種開(kāi)發(fā)平臺(tái),還是一種面向?qū)ο蟮腃++應(yīng)用程序圖形界面設(shè)計(jì),其中的信號(hào)與槽機(jī)制能有效的開(kāi)發(fā)所設(shè)計(jì)的功能。作者就是為了給各位讀者搭建一個(gè)基本的開(kāi)發(fā)嵌入式硬軟件的基本概念和流程。
Linux其實(shí)僅僅是代表內(nèi)核,但大多數(shù)人都喜歡用這個(gè)單詞代表系統(tǒng),該內(nèi)核是開(kāi)源的,免費(fèi)的,可以自由傳播。Linux系統(tǒng)支持多用戶,多線程,多核CPU的實(shí)時(shí)操作系統(tǒng),Linux可以自由裁剪,自由選擇驅(qū)動(dòng)和想要的組件,以縮小系統(tǒng)大小,舍去無(wú)需的服務(wù)以減少運(yùn)行系統(tǒng)的資源開(kāi)支。
關(guān)于linux系統(tǒng)的實(shí)時(shí)性,就是在確定的范圍之內(nèi)響應(yīng)某個(gè)事件的特性,這對(duì)于一些嵌入式設(shè)備是基本的要求。對(duì)于嵌入式硬件,這種對(duì)于體積和造價(jià)要求比較苛刻的設(shè)備來(lái)說(shuō),里面的硬件資源是寸土寸金的,所以必須嚴(yán)格控制軟件占用,讓整個(gè)系統(tǒng)平穩(wěn)運(yùn)作。
Linux系統(tǒng)的移植還需要一個(gè)基本工具就是bootloader,用來(lái)引導(dǎo)操作系統(tǒng),主要作用是初始化和檢測(cè)硬件設(shè)備,建立內(nèi)存空間映射讓基本的硬件都協(xié)調(diào)工作,實(shí)現(xiàn)基本硬件功能,為了接下來(lái)的系統(tǒng)移植提供基本的硬件準(zhǔn)備。
Qt是一款跨平臺(tái)C++圖形用戶應(yīng)用開(kāi)發(fā)平臺(tái),可以開(kāi)發(fā)GUI應(yīng)用,也可以開(kāi)發(fā)非GUI應(yīng)用,控制臺(tái),服務(wù)器等都可以,我們?yōu)榱吮O(jiān)控和控制嵌入式設(shè)備一般都是開(kāi)發(fā)圖形用戶界面來(lái)直觀的觀察情況。由于QT的跨平臺(tái)性,我們可以在任何一個(gè)平臺(tái)開(kāi)發(fā),到其他平臺(tái)上編譯,然后去運(yùn)行,省去了二次開(kāi)發(fā)的麻煩。QT提供了很多API,包括串口通信,TCP/IP網(wǎng)絡(luò),各種GUI組件和控件,XML支持。QT獨(dú)特的信號(hào)與槽機(jī)制讓各種可以與用戶交互的按鈕和控件可以關(guān)聯(lián)到SLOT槽函數(shù)里面,交互即執(zhí)行函數(shù),直觀便于理解。
對(duì)一些新手開(kāi)發(fā)者最有利的就是,QT官方提供了大量的開(kāi)發(fā)文檔,可以在QT creator 里面直接搜索得到解決辦法。
任何項(xiàng)目或者設(shè)計(jì)在開(kāi)始之前都需要合理規(guī)劃和分析,然后再去一步一步的開(kāi)發(fā)和設(shè)計(jì),避免從做無(wú)用的工作。
開(kāi)發(fā)人員在開(kāi)始一個(gè)項(xiàng)目之前,需要深入細(xì)致的用戶調(diào)研,開(kāi)發(fā)分析,根據(jù)客戶的要求和功能實(shí)現(xiàn),來(lái)初步設(shè)計(jì)項(xiàng)目的模板,評(píng)價(jià)項(xiàng)目的可行性,可靠性,把需求轉(zhuǎn)化為可開(kāi)發(fā)功能,最后對(duì)項(xiàng)目所需人員,財(cái)力物力進(jìn)行評(píng)估,才能開(kāi)始進(jìn)行開(kāi)發(fā)。
3.2.1 硬件設(shè)備選擇
根據(jù)項(xiàng)目規(guī)劃和需求分析選擇最合理,最合適,最擅長(zhǎng)的硬件,一來(lái)可以縮短開(kāi)發(fā)周期,二可以節(jié)省開(kāi)發(fā)成本。
選擇各種硬件設(shè)備的時(shí)候還要考慮各種硬件之間的兼容性和沖突性,最好選擇兼容性最好的硬件,也便于接下來(lái)的維修維護(hù)。
3.2.2 系統(tǒng)裁剪和移植
Linux系統(tǒng)移植有著基本的步驟,我們這次設(shè)計(jì)舉例用Ubuntu系統(tǒng)。
大部分開(kāi)發(fā)平臺(tái)和目標(biāo)硬件設(shè)備是不同的芯片或者操作系統(tǒng),這時(shí)候就需要搭建交叉編譯環(huán)境,比如我們?cè)贏RM平臺(tái)開(kāi)發(fā)程序,在x64或者x86平臺(tái),就需要搭建arm平臺(tái)的編譯環(huán)境,可以安裝編譯器arm-linux-gcc用來(lái)編譯開(kāi)發(fā)主機(jī)所需的程序。移植的linux系統(tǒng)也是必須用這個(gè)編譯器來(lái)編譯。
u-boot移植,分析架構(gòu)和硬件兼容性,根據(jù)u-boot給的origen板子實(shí)例,找到與開(kāi)發(fā)主機(jī)相同的芯片編譯文件,拷貝板級(jí)文件到編譯目錄,修改Makefile編譯新加入的文件,拷貝板級(jí)頭文件,修改boards.cfg配置文件,添加BL1和BL2啟動(dòng)代碼(根據(jù)不同芯片查看開(kāi)發(fā)主機(jī)的芯片手冊(cè)),添加看門狗關(guān)閉代碼編,關(guān)閉中斷,添加電源管理相關(guān)代碼,添加串口初始化相關(guān)代碼,譯后把u-boot.bin文件燒寫到emmc中即可觀察到串口數(shù)據(jù)輸出。u-boot移植完成后需要設(shè)置網(wǎng)絡(luò)tftp服務(wù)或者其他通信方法,因?yàn)榇谕ㄐ潘俣嚷?/p>
內(nèi)核編譯,根據(jù)開(kāi)發(fā)主機(jī)選擇linux內(nèi)核源碼,根據(jù)開(kāi)發(fā)主機(jī)芯片型號(hào)選擇內(nèi)核編譯選項(xiàng)和添加配置文件,不需要的功能和一些服務(wù)可以去掉,用來(lái)節(jié)省空間,編譯后會(huì)生成一個(gè)uImage鏡像文件。
設(shè)備樹文件就是把系統(tǒng)中各種文件分類添加索引,以至內(nèi)核可以準(zhǔn)確找到想要找的文件,編譯設(shè)備數(shù)文件,為.dtb文件。在編譯內(nèi)核和設(shè)備樹的時(shí)候可以根據(jù)需求添加驅(qū)動(dòng)。
編譯完成內(nèi)核和設(shè)備樹后就可以通過(guò)u-boot的tftp下載到開(kāi)發(fā)主機(jī)中。編譯完成后開(kāi)發(fā)主機(jī)就可以執(zhí)行我們編寫的生成的.out等文件。
3.3.1 開(kāi)發(fā)主機(jī)應(yīng)用程序
根據(jù)開(kāi)發(fā)主機(jī)的搭載芯片,和電路連接,查看芯片手冊(cè)和硬件工程師提供資料來(lái)開(kāi)發(fā)程序,實(shí)現(xiàn)對(duì)應(yīng)功能,不同寄存器的設(shè)置代表不同功能,查看手冊(cè)和討論編寫程序來(lái)調(diào)用芯片相連的硬件,實(shí)現(xiàn)目標(biāo)功能。
3.3.2 圖形化界面開(kāi)發(fā)
QT開(kāi)發(fā)我們可以選擇在Windows平臺(tái)開(kāi)發(fā),根據(jù)需求繪制圖形化窗口,設(shè)置基本需要顯示的數(shù)據(jù),圖像,窗口,可以通過(guò)無(wú)線協(xié)議,有線連接,通過(guò)服務(wù)器等獲取開(kāi)發(fā)主機(jī)的信息,或者控制開(kāi)發(fā)主機(jī)。
所有工作做完并且沒(méi)有錯(cuò)誤可以運(yùn)行在主機(jī)上,就可以進(jìn)行調(diào)試測(cè)試階段,調(diào)試包括基本功能測(cè)試,穩(wěn)定性測(cè)試,干擾分析,連接強(qiáng)度,等一些根據(jù)項(xiàng)目具體情況要求的測(cè)試。
科技的發(fā)展不會(huì)停止,5g通信技術(shù)已經(jīng)在實(shí)踐階段,我們不難想象以后的世界會(huì)是物物互聯(lián),萬(wàn)物相通的方向發(fā)展,學(xué)習(xí)基本的嵌入式設(shè)備開(kāi)發(fā)和軟件調(diào)試技巧是非常有必要的。學(xué)習(xí)基本嵌入式開(kāi)發(fā)知識(shí)對(duì)我們今后的學(xué)習(xí)和工作也有著很重要的作用,當(dāng)我們拿到任何一個(gè)項(xiàng)目或者硬件設(shè)備都會(huì)有基本的思路來(lái)調(diào)試。