使用仿真和虛擬化的嵌入式設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
虛擬化通過(guò)提供靈活性、便捷性以及增強(qiáng)的IT基礎(chǔ)設(shè)施魯棒性,為IT帶來(lái)了巨大的變革。與物理目標(biāo)硬件相比,虛擬化為那些面向普通計(jì)算機(jī)的軟件開(kāi)發(fā)人員帶來(lái)了更大的幫助,其中包括下列功能:
輕松地管理多種虛擬機(jī)配置(不同的OS版本、不同的內(nèi)存容量等)。
在這些不同配置上測(cè)試/調(diào)試自己的軟件。
在相互隔離的環(huán)境中進(jìn)行測(cè)試/調(diào)試,不必?fù)?dān)心自己的工作站會(huì)崩潰。
不過(guò),軟件開(kāi)發(fā)社區(qū)的其他人員——那些開(kāi)發(fā)運(yùn)行在嵌入式設(shè)備、非PC/工作站/普通計(jì)算機(jī)、非x86架構(gòu)上的軟件的開(kāi)發(fā)人員,那些試圖去維護(hù)過(guò)時(shí)硬件上的舊版應(yīng)用程序或運(yùn)行在供應(yīng)不足或尚未面世的硬件上的應(yīng)用程序的開(kāi)發(fā)人員——是否能從中受益呢?
全系統(tǒng)仿真
全系統(tǒng)仿真為這些開(kāi)發(fā)人員甚至非PC硬件配置提供了虛擬化功能。顧名思義,全系統(tǒng)仿真提供了對(duì)整個(gè)系統(tǒng)進(jìn)行仿真的能力,其中包括其微處理器、內(nèi)存、I/O外設(shè)、磁盤(pán)驅(qū)動(dòng)器、網(wǎng)絡(luò)連接等。
不過(guò),與其將全系統(tǒng)仿真看作是設(shè)備的集合,不如將其看作是最終系統(tǒng),例如,新型飛機(jī)上的航空電子設(shè)備機(jī)架、通信基站、網(wǎng)絡(luò)設(shè)備、汽車(chē)或工業(yè)發(fā)動(dòng)機(jī)控制器、人造衛(wèi)星或高端計(jì)算服務(wù)器。
利用全系統(tǒng)仿真,軟件開(kāi)發(fā)人員能夠在自己的臺(tái)式或筆記本電腦上運(yùn)行整個(gè)系統(tǒng)的虛擬表現(xiàn)。開(kāi)發(fā)人員使用標(biāo)準(zhǔn)源代碼調(diào)試器、編譯器和鏈接器在虛擬系統(tǒng)上加載軟件的方式就像對(duì)實(shí)際目標(biāo)硬件進(jìn)行操作一樣。不過(guò),一項(xiàng)明顯的不同在于,開(kāi)發(fā)人員可以隨身攜帶虛擬系統(tǒng),這樣,即使在旅途中也能夠進(jìn)行開(kāi)發(fā)、調(diào)試和測(cè)試。
功能
與實(shí)際硬件相比,虛擬系統(tǒng)提供了更多的調(diào)試功能,這是因?yàn)樗哂幸韵绿匦裕耗嫦驁?zhí)行、保存和重新加載完整系統(tǒng)狀態(tài)的功能以及窺視并控制虛擬系統(tǒng)設(shè)備的功能。這就為軟件工程師的調(diào)試和測(cè)試工作額外提供了一個(gè)維度。與只能查看微處理器的寄存器和程序計(jì)數(shù)器狀態(tài)的普通調(diào)試所不同的是,全系統(tǒng)仿真提供了查看在所有系統(tǒng)設(shè)備中所發(fā)生事件的功能。
[!--empirenews.page--]
例如,在調(diào)試UART驅(qū)動(dòng)的問(wèn)題時(shí),可以為處理器所看不到的UART自身的特定條件設(shè)置斷點(diǎn)。開(kāi)發(fā)人員甚至能夠改變這些設(shè)備的狀態(tài),從而在系統(tǒng)中加入虛擬硬件故障,以便測(cè)試軟件如何發(fā)現(xiàn)硬件故障并從中恢復(fù)。
全系統(tǒng)仿真幫助軟件開(kāi)發(fā)人員進(jìn)行系統(tǒng)級(jí)調(diào)試,而不是單板級(jí)調(diào)試。很多工程師可能都做過(guò)以下一些嘗試:
調(diào)試在多板系統(tǒng)啟動(dòng)時(shí)間歇性出現(xiàn),且看似與電路板之間細(xì)微的時(shí)間變化有關(guān)的問(wèn)題。
在完全相同的時(shí)間同時(shí)停止系統(tǒng)的所有電路板,以便調(diào)試出現(xiàn)在電路板C但很可能起源于電路板A的問(wèn)題。
調(diào)試看似發(fā)生在內(nèi)部SoC I/O外設(shè)的設(shè)備驅(qū)動(dòng)中的軟件問(wèn)題,卻發(fā)現(xiàn)不能完全看到SoC內(nèi)部實(shí)際發(fā)生的事件。
要求
全系統(tǒng)仿真支持處理所有上述情況。它可以成為非常難的軟件和系統(tǒng)問(wèn)題的一種強(qiáng)大的解決方案。但是,要使得全系統(tǒng)仿真成為現(xiàn)實(shí),必須遵循一些重要的原則:
● 無(wú)論整套系統(tǒng)多么復(fù)雜,這種仿真需要快到足以運(yùn)行完整的軟件加載。
● 這種仿真必須可升級(jí)。如果不能仿真整套系統(tǒng)(無(wú)論是5塊、10塊還是100塊電路板),那么它的作用就很有限。
● 仿真環(huán)境必須支持一套大型開(kāi)箱即用的模型庫(kù),并同時(shí)向用戶(hù)提供為自己的目標(biāo)系統(tǒng)快速創(chuàng)建模型的方法。
● 仿真環(huán)境需要提供整個(gè)仿真系統(tǒng)的控制和可見(jiàn)性。
Virtutech公司的Simics就是仿真系統(tǒng)的一個(gè)例子,這是一款支持上述原則的全系統(tǒng)仿真器。設(shè)計(jì)人員可以運(yùn)行完整系統(tǒng)的仿真,有時(shí)會(huì)包含具有異質(zhì)目標(biāo)架構(gòu)的數(shù)百塊不同的電路板。
目標(biāo)應(yīng)用程序代碼、實(shí)時(shí)操作系統(tǒng)、驅(qū)動(dòng)和固件都可以使用虛擬化的目標(biāo)硬件進(jìn)行調(diào)試、測(cè)試和執(zhí)行。虛擬化的軟件開(kāi)發(fā)環(huán)境可以運(yùn)行的二進(jìn)制代碼,與實(shí)際目標(biāo)上所運(yùn)行的二進(jìn)制代碼完全相同。這就是說(shuō),不再需要RTOS/OS API抽象層,stubbed-out驅(qū)動(dòng)或固件,或者在生產(chǎn)環(huán)境和stubbed-out環(huán)境中使用不同軟件編譯方法的多編譯腳本。
虛擬化的軟件開(kāi)發(fā)環(huán)境提供了:
● 適用于目標(biāo)硬件中微處理器的指令集仿真器。
● 目標(biāo)硬件中與目標(biāo)軟件進(jìn)行交互的所有設(shè)備的行為仿真。
● 仿真目標(biāo)和現(xiàn)實(shí)世界內(nèi)部及二者之間的連接(例如,諸如以太網(wǎng)、MIL-STD-1553、ARINC 429、SpaceWire、Firewire、USB、ATM等網(wǎng)絡(luò)以及磁盤(pán)鏡像、內(nèi)存鏡像等其他機(jī)制。)。
● 使用與軟件開(kāi)發(fā)人員與實(shí)際硬件交互時(shí)相同的工具(如編譯器、鏈接器、調(diào)試器、IDE和RTOS)和方法的能力。