何立民
北京航空航天大學(xué)
智能硬件時(shí)代的開源硬件
——寫給硬件工程師們
何立民
北京航空航天大學(xué)
微控制器誕生后,傳統(tǒng)電子領(lǐng)域的工程師已升華為軟、硬兼顧,可從事應(yīng)用軟件開發(fā)的電子工程師,但人們?nèi)粤?xí)慣稱他們?yōu)橛布こ處?。隨著智能硬件系統(tǒng)的同質(zhì)化、多種智能硬件的軟件生成、軟件開發(fā)工具層出不窮,如今,嵌入式產(chǎn)品開發(fā)中的純硬件工作已很少見。智能電子系統(tǒng)的同質(zhì)化,誕生了用戶板;為解決操作系統(tǒng)通用性與用戶板的特殊性矛盾,在操作系統(tǒng)中引入了板級(jí)支持包;FPGA誕生后,有了硬件描述語(yǔ)言的硬件系統(tǒng)設(shè)計(jì)模式。所有這些,都體現(xiàn)了嵌入式產(chǎn)品開發(fā)不斷軟化的趨勢(shì),而且軟化中不斷向用戶開放,便有了如今的開源硬件概念。
開源概念起源于操作系統(tǒng)的源代碼開放。出于商業(yè)利益考慮,眾多商用操作系源代碼不向用戶開放。為了便于用戶二次開發(fā),Linux從一開始就是一個(gè)源代碼對(duì)用戶開放的操作系統(tǒng),從此便有了開源軟件的概念。目前在嵌入式系統(tǒng)領(lǐng)域有大量的開源RTOS,這些開源RTOS不僅為嵌入式應(yīng)用做出了巨大的貢獻(xiàn),還形成了開源文化。即在市場(chǎng)經(jīng)濟(jì)利益交織環(huán)境下,為用戶提供一個(gè)開放的、低成本的、可任意裁剪、可二次開發(fā)的公共平臺(tái)。開源軟件出現(xiàn)后,培養(yǎng)出了大批嵌入式領(lǐng)域的軟件人才。
相對(duì)于源代碼開放的開源軟件,開源硬件似乎今人費(fèi)解。因?yàn)閭鹘y(tǒng)的硬件體系中沒(méi)有數(shù)字化代碼,何來(lái)開源?因此,開源硬件的開源內(nèi)涵主要體現(xiàn)在開源文化中的開放、低成本、可二次開發(fā)與可任意裁剪上。開源硬件的開放不僅是電路系統(tǒng)的開放,還在于對(duì)軟件工程師的開放,因此,開源硬件誕生后,吸引了眾多軟件工程師進(jìn)入嵌入式應(yīng)用領(lǐng)域。
可二次開發(fā)的開源硬件,是一個(gè)基于軟件開發(fā)的軟硬件綜合開發(fā)平臺(tái);基于軟件的開發(fā)模式有利于軟件工程師介入嵌入式產(chǎn)品開發(fā);開源硬件可任意裁剪、任意選擇的特點(diǎn),為開發(fā)眾多個(gè)性化嵌入式產(chǎn)品提供了低成本、低門檻、靈活、便捷的手段。
嵌入式應(yīng)用領(lǐng)域之所以能演化出開源硬件,與其硬件結(jié)構(gòu)的同質(zhì)化、開發(fā)環(huán)境的不斷軟化、開源操作系統(tǒng)引入有關(guān)。在早期的嵌入式系統(tǒng)產(chǎn)品設(shè)計(jì)中,電子工程師是主體,因?yàn)檐浖こ處煙o(wú)法介入硬件系統(tǒng)的應(yīng)用開發(fā)。有了用戶板的嵌入式產(chǎn)品平臺(tái)后,軟件工程師在用戶板級(jí)產(chǎn)品平臺(tái)上,不必了解硬件結(jié)構(gòu),借助開源RTOS、集成開發(fā)環(huán)境,就能實(shí)現(xiàn)嵌入式產(chǎn)品開發(fā)。另外,有了硬件描述語(yǔ)言,軟件工程師可以繞開傳統(tǒng)的硬件設(shè)計(jì)模式,實(shí)現(xiàn)SoC的嵌入式產(chǎn)品設(shè)計(jì)。所有這些硬件系統(tǒng)設(shè)計(jì)模式的轉(zhuǎn)變,為軟件工程師開放了傳統(tǒng)的智能硬件系統(tǒng)設(shè)計(jì)領(lǐng)域。在他們看來(lái),從用戶可介入二次開發(fā)的開源概念出發(fā),不妨以“開源硬件”來(lái)描述如今基于嵌入式產(chǎn)品平臺(tái)、基于硬件描述語(yǔ)言、以軟件技術(shù)為主的智能硬件的開發(fā)模式。
從硬件系統(tǒng)開發(fā)不斷軟化的變革可以看出,當(dāng)今的開源硬件有以下幾類:一類是由用戶板進(jìn)化出的可二次開發(fā)的板級(jí)開源硬件(早期以樹莓派為代表);另一類是開源硬件描述語(yǔ)言(以Chisel為代表源代碼開放的開源硬件);還有一類是開源操作系統(tǒng)中的開源硬件數(shù)據(jù)結(jié)構(gòu)(如ARM Device Tree)。
用戶板是最原始的板級(jí)開源硬件。由于嵌入式產(chǎn)品都有相同的微處理器內(nèi)核及通用外圍功能單元,將它們集合起來(lái),可做成一個(gè)供眾多嵌入式產(chǎn)品個(gè)性化開發(fā)的產(chǎn)品平臺(tái)。最引人注目的是由樹莓派(Raspberry Pi)引發(fā)的智能化通用板級(jí)開源硬件。
Raspberry Pi配置了眾多的外圍電路與外部交互接口,與其說(shuō)是微型電腦,不如說(shuō)是嵌入式的綜合實(shí)驗(yàn)平臺(tái),是用戶板系統(tǒng)的終極化發(fā)展。由于低價(jià)位、功能強(qiáng)大、有眾多的外圍電路與I/O端口、易開發(fā)的軟件配置,樹莓派迅速成為板級(jí)開源硬件的理想化通用產(chǎn)品平臺(tái)。2015年統(tǒng)計(jì),板級(jí)開源硬件已形成三大主流平臺(tái),即Arduino平臺(tái)(Arduino板+Arduino IDE)、Beagle板平臺(tái)與Raspberry Pi板平臺(tái)。它們集硬件(開放性板級(jí)智能電子系統(tǒng))、軟件(開源RTOS)、開發(fā)環(huán)境于一身,是一個(gè)極佳的通用產(chǎn)品開發(fā)平臺(tái)。如今,網(wǎng)上商城都可以方便地選購(gòu)。近年來(lái),也出現(xiàn)了國(guó)產(chǎn)化的板級(jí)開源硬件,中航工業(yè)部門的有關(guān)研究所推出了由國(guó)產(chǎn)GD32微控制器和RT-Thread實(shí)時(shí)操作系統(tǒng)構(gòu)建的一個(gè)Colibri-F207ZE開發(fā)板,具有軟硬件自主可控、安全可靠,為嵌入式應(yīng)用提供了有效解決方案,被稱為口袋實(shí)驗(yàn)室。2017年《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》第3期呂華溢等人的“一種軟硬件自主可控的嵌入式實(shí)時(shí)控制系統(tǒng)”,詳細(xì)介紹了Colibri-F207ZE的板級(jí)開源硬件及其應(yīng)用方法。
硬件描述語(yǔ)言HDL是一種用形式化方法描述數(shù)字電路和系統(tǒng)的語(yǔ)言。硬件描述語(yǔ)言發(fā)展至今已有20多年的歷史,它將硬件設(shè)計(jì)軟件化,通過(guò)EDA工具進(jìn)行仿真驗(yàn)證,最終通過(guò)微電子的ASIC手段或半定制的FPGA來(lái)實(shí)現(xiàn)一個(gè)真實(shí)的硬件系統(tǒng)。這是一種非主流電子工程師的非傳統(tǒng)硬件系統(tǒng)設(shè)計(jì)方法,成功地應(yīng)用于硬件設(shè)計(jì)的各個(gè)階段,如建模、仿真、驗(yàn)證與數(shù)字化模塊的綜合等。隨著系統(tǒng)級(jí)FPGA以及系統(tǒng)芯片的出現(xiàn),軟硬件協(xié)調(diào)設(shè)計(jì)和系統(tǒng)設(shè)計(jì)變得越來(lái)越重要。傳統(tǒng)意義上的硬件設(shè)計(jì)越來(lái)越傾向于系統(tǒng)設(shè)計(jì)和軟件設(shè)計(jì)結(jié)合。硬件描述語(yǔ)言為適應(yīng)新的情況,迅速發(fā)展,出現(xiàn)了很多新的硬件描述語(yǔ)言。硬件描述語(yǔ)言從一開始就是一種用軟件工具、在軟件方法基礎(chǔ)上實(shí)現(xiàn)的電路系統(tǒng)設(shè)計(jì)方法。
Chisel是加州大學(xué)伯克利分校研究人員設(shè)計(jì)并發(fā)布的一種新的開源硬件設(shè)計(jì)語(yǔ)言。Chisel建立在Scala語(yǔ)言之上,可以支持高級(jí)硬件設(shè)計(jì)。用戶使用Chisel時(shí),以編寫Scala程序的方式來(lái)設(shè)計(jì)硬件電路。采用Chisel設(shè)計(jì)的電路,經(jīng)過(guò)編譯可以得到FPGA、ASIC的Verilog HDL的相關(guān)代碼。目前國(guó)內(nèi)外已有人使用Chisel語(yǔ)言成功地實(shí)現(xiàn)了多種開源處理器。有多個(gè)開源項(xiàng)目使用Chisel作為開發(fā)語(yǔ)言,包括:采用RISC-V架構(gòu)的開源標(biāo)量處理器Rocket、開源亂序執(zhí)行處理器BOOM(Berkeley Out-of-Order Machine)等。
此外,Chisel的開源特性,也有助于用戶了解硬件設(shè)計(jì)語(yǔ)言的內(nèi)部實(shí)現(xiàn)機(jī)理,并在此基礎(chǔ)上進(jìn)行特定的優(yōu)化與改進(jìn)。2017年《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》第3期刊登雷思磊的“開源硬件描述語(yǔ)言Chisel的組合電路設(shè)計(jì)”,詳細(xì)地介紹了這種開源硬件的電路設(shè)計(jì)方法。
設(shè)備樹是嵌入式操作系統(tǒng)中的一種開源硬件數(shù)據(jù)結(jié)構(gòu),是嵌入式操作系統(tǒng)中板級(jí)支持包(Board Support Package,BSP)的華麗轉(zhuǎn)身,其源頭是PowerPC的Device Tree技術(shù)。目前,最著名的是ARM Linux中的扁平設(shè)備樹FDT(Flattened Device Tree)。
早先在嵌入式系統(tǒng)中引入操作系統(tǒng)時(shí)為了滿足操作系統(tǒng)對(duì)硬件單元的有效管理,設(shè)置了板級(jí)支持包,并添加有大量的驅(qū)動(dòng)程序固件。板級(jí)支持包介于主板硬件與操作系統(tǒng)之間,是操作系統(tǒng)的一部分。程序員在使用嵌入式操作系統(tǒng)時(shí),可以根據(jù)硬件結(jié)構(gòu)的變化,在BSP中添加一些和系統(tǒng)相關(guān)的驅(qū)動(dòng)程序。因此,隨著主板的升級(jí)與變更,BSP也愈加龐雜。
以ARM Linux為例,早期的ARM Linux中充斥著大量的垃圾代碼,相當(dāng)多的代碼只是在描述板級(jí)細(xì)節(jié),而這些板級(jí)細(xì)節(jié)對(duì)于內(nèi)核來(lái)講,只是垃圾。后來(lái)引入了PowerPC已成熟應(yīng)用的Device Tree技術(shù),使得ARM Linux內(nèi)核中的BSP華麗轉(zhuǎn)身為扁平設(shè)備樹。
Device Tree是一種描述硬件的數(shù)據(jù)結(jié)構(gòu),基本上是一個(gè)描述電路板上CPU、總線、設(shè)備組成的樹形結(jié)構(gòu),由一系列的結(jié)點(diǎn)(node)和屬性(property)組成,結(jié)點(diǎn)本身可包含子結(jié)點(diǎn),可用來(lái)描述原先Kernel中的大量板級(jí)細(xì)節(jié)與硬件細(xì)節(jié),直接通過(guò)它傳遞給Linux。Bootloader會(huì)將這棵樹傳遞給內(nèi)核,然后內(nèi)核可以識(shí)別這棵樹,并根據(jù)它展開出Linux內(nèi)核中的眾多設(shè)備,而這些設(shè)備用到的內(nèi)存、IRQ等資源,也被傳遞給了內(nèi)核,內(nèi)核會(huì)將這些資源綁定給展開的相應(yīng)設(shè)備。使用FDT后,Linux內(nèi)核可以直接通過(guò)FDT獲取硬件的細(xì)節(jié)信息。
由根結(jié)點(diǎn)、子結(jié)點(diǎn)、葉結(jié)點(diǎn)形成了硬件相關(guān)的樹形結(jié)構(gòu),樹結(jié)構(gòu)將在節(jié)點(diǎn)之間創(chuàng)建父子關(guān)系,此父子關(guān)系是體系結(jié)構(gòu)無(wú)關(guān)性的關(guān)鍵。當(dāng)葉驅(qū)動(dòng)程序或總線結(jié)點(diǎn)驅(qū)動(dòng)程序本質(zhì)上需要依賴于體系結(jié)構(gòu)的服務(wù)時(shí),該驅(qū)動(dòng)程序會(huì)請(qǐng)求其父級(jí)節(jié)點(diǎn)提供該服務(wù)。采用此方法,不管計(jì)算機(jī)或處理器的體系結(jié)構(gòu)是什么,驅(qū)動(dòng)程序都可以正常運(yùn)行。使用FDT后,Linux內(nèi)核可以直接通過(guò)FDT獲取硬件的細(xì)節(jié)信息,這使得ARM Linux內(nèi)核中的冗余編碼大大減少,同時(shí)也使得用一個(gè)內(nèi)核鏡像去引導(dǎo)同一類ARM芯片集的硬件平臺(tái)成為可能。2017年《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》第3期羅名駒等人的“扁平設(shè)備樹FDT在ARM Linux中的應(yīng)用研究”詳細(xì)地介紹了ARM Linux中的FDT,以及如何通過(guò)FDT獲取板級(jí)硬件的細(xì)節(jié)信息。
?士然
2017-02-02)
單片機(jī)與嵌入式系統(tǒng)應(yīng)用2017年3期