開(kāi)源硬件概況
相對(duì)于源代碼開(kāi)放的開(kāi)源軟件,開(kāi)源硬件似乎今人費(fèi)解。因?yàn)閭鹘y(tǒng)的硬件體系中沒(méi)有數(shù)字化代碼,何來(lái)開(kāi)源?因此,開(kāi)源硬件的開(kāi)源內(nèi)涵主要體現(xiàn)在開(kāi)源文化中的開(kāi)放、低成本、可二次開(kāi)發(fā)與可任意裁剪上。開(kāi)源硬件的開(kāi)放不僅是電路系統(tǒng)的開(kāi)放,還在于對(duì)軟件工程師的開(kāi)放,因此,開(kāi)源硬件誕生后,吸引了眾多軟件工程師進(jìn)入嵌入式應(yīng)用領(lǐng)域。
可二次開(kāi)發(fā)的開(kāi)源硬件,是一個(gè)基于軟件開(kāi)發(fā)的軟硬件綜合開(kāi)發(fā)平臺(tái);基于軟件的開(kāi)發(fā)模式有利于軟件工程師介入嵌入式產(chǎn)品開(kāi)發(fā);開(kāi)源硬件可任意裁剪、任意選擇的特點(diǎn),為開(kāi)發(fā)眾多個(gè)性化嵌入式產(chǎn)品提供了低成本、低門檻、靈活、便捷的手段。
“開(kāi)源硬件”:描述如今基于嵌入式產(chǎn)品平臺(tái)、基于硬件描述語(yǔ)言、以軟件技術(shù)為主的智能硬件的開(kāi)發(fā)模式。
當(dāng)今的開(kāi)源硬件有以下幾類:
一類是由用戶板進(jìn)化出的可二次開(kāi)發(fā)的板級(jí)開(kāi)源硬件(早期以樹(shù)莓派為代表);
另一類是開(kāi)源硬件描述語(yǔ)言(以Chisel為代表源代碼開(kāi)放的開(kāi)源硬件);
還有一類是開(kāi)源操作系統(tǒng)中的開(kāi)源硬件數(shù)據(jù)結(jié)構(gòu)(如ARM Device Tree)。
開(kāi)源硬件描述語(yǔ)言:
硬件描述語(yǔ)言HDL是一種用形式化方法描述數(shù)字電路和系統(tǒng)的語(yǔ)言。
硬件描述語(yǔ)言發(fā)展至今已有20多年的歷史,它將硬件設(shè)計(jì)軟件化,通過(guò)EDA工具(電子設(shè)計(jì)自動(dòng)化)進(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ǔ)言從一開(kāi)始就是一種用軟件工具、在軟件方法基礎(chǔ)上實(shí)現(xiàn)的電路系統(tǒng)設(shè)計(jì)方法。
Chisel是加州大學(xué)伯克利分校研究人員設(shè)計(jì)并發(fā)布的一種新的開(kāi)源硬件設(shè)計(jì)語(yǔ)言。他們認(rèn)為現(xiàn)有的硬件描述語(yǔ)言VHDL、Verilog HDL等最初設(shè)計(jì)的目的是用來(lái)仿真的,所以有很多不可綜合的語(yǔ)法,此外,VHDL、Verilog HDL缺少目前高級(jí)語(yǔ)言具備的一些特性,比如:對(duì)象、繼承等,于是設(shè)計(jì)了Chisel,并將其開(kāi)源。
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)了多種開(kāi)源處理器。有多個(gè)開(kāi)源項(xiàng)目使用Chisel作為開(kāi)發(fā)語(yǔ)言,包括:采用RISC-V架構(gòu)的開(kāi)源標(biāo)量處理器Rocket、開(kāi)源亂序執(zhí)行處理器BOOM(Berkeley Out-of-Order Machine)等。
此外,Chisel的開(kāi)源特性,也有助于用戶了解硬件設(shè)計(jì)語(yǔ)言的內(nèi)部實(shí)現(xiàn)機(jī)理,并在此基礎(chǔ)上進(jìn)行特定的優(yōu)化與改進(jìn)。
開(kāi)源設(shè)備樹(shù)
設(shè)備樹(shù)是嵌入式操作系統(tǒng)中的一種開(kāi)源硬件數(shù)據(jù)結(jié)構(gòu),是嵌入式操作系統(tǒng)中板級(jí)支持包(Board Support Package,BSP)的華麗轉(zhuǎn)身,其源頭是PowerPC的Device Tree技術(shù)。目前,最著名的是ARM Linux中的扁平設(shè)備樹(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è)備樹(shù)(FDT)。
Device Tree是一種描述硬件的數(shù)據(jù)結(jié)構(gòu),基本上是一個(gè)描述電路板上CPU、總線、設(shè)備組成的樹(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ì)將這棵樹(shù)傳遞給內(nèi)核,然后內(nèi)核可以識(shí)別這棵樹(shù),并根據(jù)它展開(kāi)出Linux內(nèi)核中的眾多設(shè)備,而這些設(shè)備用到的內(nèi)存、IRQ等資源,也被傳遞給了內(nèi)核,內(nèi)核會(huì)將這些資源綁定給展開(kāi)的相應(yīng)設(shè)備。使用FDT后,Linux內(nèi)核可以直接通過(guò)FDT獲取硬件的細(xì)節(jié)信息。
由根結(jié)點(diǎn)、子結(jié)點(diǎn)、葉結(jié)點(diǎn)形成了硬件相關(guān)的樹(shù)形結(jié)構(gòu),樹(shù)結(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è)備樹(shù)FDT在ARM Linux中的應(yīng)用研究”詳細(xì)地介紹了ARM Linux中的FDT,以及如何通過(guò)FDT獲取板級(jí)硬件的細(xì)節(jié)信息。
評(píng)論
查看更多