在臺(tái)式計(jì)算機(jī)上,操作系統(tǒng)(OS)的選擇很大程度上取決于口味-Windows,Apple,Linux。選擇相對(duì)較少。對(duì)于嵌入式系統(tǒng),問題要復(fù)雜得多。可用的大量選項(xiàng)反映了嵌入式應(yīng)用程序的多樣性。
您真的需要一個(gè)操作系統(tǒng)嗎?如今很少找到?jīng)]有操作系統(tǒng)的嵌入式系統(tǒng)。沒有某種類型的內(nèi)核,只有最簡(jiǎn)單的一種設(shè)備才能有效地構(gòu)建。但是這種可能性不容忽視。嵌入式設(shè)備的整個(gè)范圍可以由CPU復(fù)雜度(廣義上為數(shù)據(jù)總線寬度)與軟件復(fù)雜度的圖表(圖1)表示。
圖1:CPU與軟件和OS的復(fù)雜性。
圖1分為四個(gè)象限。右上角(高端處理器上的復(fù)雜軟件)是傳統(tǒng)的實(shí)時(shí)操作系統(tǒng)(RTOS)和其他操作系統(tǒng)。在功能不那么強(qiáng)大的CPU上,如果軟件相當(dāng)復(fù)雜,則部署基本內(nèi)核可能仍然有用。有時(shí),功能強(qiáng)大的芯片用于運(yùn)行非常簡(jiǎn)單的軟件,在該軟件中,需要CPU性能來提高執(zhí)行速度。在這種情況下,可能并非嚴(yán)格要求使用內(nèi)核,但應(yīng)謹(jǐn)慎使用,因?yàn)樗梢愿纳栖浖w系結(jié)構(gòu)的可伸縮性并適應(yīng)將來復(fù)雜性的提高。實(shí)際上,只有在低端設(shè)備上運(yùn)行簡(jiǎn)單軟件時(shí),才不需要任何類型的內(nèi)核。
得出結(jié)論,項(xiàng)目需要操作系統(tǒng),因此存在選擇的問題。廣義上講,有四個(gè)選項(xiàng):選擇高端操作系統(tǒng),例如Linux或Windows的嵌入式變體。從眾多選擇中選擇一個(gè)實(shí)時(shí)操作系統(tǒng);部署廣泛可用的免費(fèi)操作系統(tǒng)之一;或在內(nèi)部實(shí)現(xiàn)內(nèi)核。接下來是對(duì)這些選項(xiàng)的回顧。
商業(yè)操作系統(tǒng)市場(chǎng)上
有許多商業(yè)操作系統(tǒng)。與其他產(chǎn)品相比,這些產(chǎn)品具有許多優(yōu)點(diǎn)和缺點(diǎn)。
優(yōu)點(diǎn)。 有許多商業(yè)RTOS產(chǎn)品可用,其中許多來自成熟的,信譽(yù)良好的供應(yīng)商。但這是應(yīng)該仔細(xì)考慮的事情。公司的規(guī)模,產(chǎn)品的成熟度和用戶群都是重要因素。關(guān)鍵要求是技術(shù)支持的可用性。
在選擇RTOS時(shí),買賣雙方都做出了長(zhǎng)期承諾。關(guān)系的一個(gè)方面是考慮將來可能的CPU遷移。可以依靠成熟的RTOS供應(yīng)商來及時(shí)支持新設(shè)備,而他們的產(chǎn)品可能旨在簡(jiǎn)化移植過程。
好的文檔是必不可少的,并且可能需要商業(yè)RTOS供應(yīng)商提供。沒有理由不要求查看手冊(cè)樣本。在過去,這可能具有挑戰(zhàn)性-將書籍運(yùn)送到世界各地。現(xiàn)在,通過電子郵件發(fā)送PDF是一個(gè)合理的期望。
源代碼可用于許多商業(yè)操作系統(tǒng)-有時(shí)是免費(fèi)的;有時(shí)需要收取特定費(fèi)用。值得檢查代碼是否可讀,因?yàn)樵创a可能會(huì)使人類讀者難以理解,并且也應(yīng)進(jìn)行注釋。這不是好的文檔的替代品,而是有用的補(bǔ)充
開發(fā)多線程應(yīng)用程序有很多挑戰(zhàn),其中之一就是調(diào)試。擁有某種支持RTOS的調(diào)試器非常有用。對(duì)停止模式(CPU在斷點(diǎn)處暫停)的支持就足夠了。在某些情況下,運(yùn)行模式(僅停止當(dāng)前任務(wù))會(huì)很有用。
很少有嵌入式應(yīng)用程序只需要一個(gè)準(zhǔn)系統(tǒng)多線程內(nèi)核。通常需要其他中間件組件。商業(yè)OS可能范圍很廣,包括通信協(xié)議,應(yīng)該對(duì)其進(jìn)行充分驗(yàn)證;文件系統(tǒng),包括閃存;和圖形包以幫助UI設(shè)計(jì)。
嵌入式開發(fā)的一個(gè)特殊挑戰(zhàn)是在硬件附近工作。使用操作系統(tǒng),這意味著要開發(fā)驅(qū)動(dòng)程序。商業(yè)操作系統(tǒng)很可能會(huì)為標(biāo)準(zhǔn)設(shè)備提供廣泛的驅(qū)動(dòng)程序,并支持自定義驅(qū)動(dòng)程序開發(fā)。
缺點(diǎn)。 從技術(shù)上講,每個(gè)嵌入式系統(tǒng)都是不同的。一臺(tái)設(shè)備到另一臺(tái)設(shè)備的CPU,內(nèi)存和外圍設(shè)備都不同。但是系統(tǒng)在商業(yè)上也有所不同,并且設(shè)備的最終價(jià)格以及生產(chǎn)的數(shù)量會(huì)影響OS許可選項(xiàng)。在某些情況下,每臺(tái)設(shè)備幾美元是合理的。在另一些預(yù)計(jì)數(shù)量非常龐大的國家中,免版稅業(yè)務(wù)模型可能是理想的。
反對(duì)使用商業(yè)操作系統(tǒng)的一個(gè)普遍反對(duì)意見是,開發(fā)人員對(duì)其功能沒有內(nèi)部了解。這可能是正確的,但這真的重要嗎?如果操作系統(tǒng)的行為如記錄所示,為什么準(zhǔn)確知道其如何實(shí)現(xiàn)結(jié)果很重要?可能會(huì)爭(zhēng)辯說,由于OS的操作是特定的專業(yè)知識(shí),因此大多數(shù)嵌入式軟件開發(fā)團(tuán)隊(duì)無法負(fù)擔(dān)得起維持這種專業(yè)知識(shí)的能力。如果源代碼可用,它可以提供保險(xiǎn),以防需要檢查操作系統(tǒng)的內(nèi)部運(yùn)行。
像購買任何產(chǎn)品的人一樣,操作系統(tǒng)的購買者也不想被某個(gè)供應(yīng)商所束縛,即使該供應(yīng)商會(huì)歡迎這種可能性。對(duì)于商用OS產(chǎn)品,它們之間的主要區(qū)別在于應(yīng)用程序接口– API。現(xiàn)實(shí)情況是這些差異不會(huì)太大,因此,如果需要更換OS供應(yīng)商,則稍后移植可能不是大問題。當(dāng)然,遵守標(biāo)準(zhǔn)至少會(huì)導(dǎo)致一定程度的供應(yīng)商獨(dú)立性。在這種情況下,POSIX API可能是最佳選擇。
商用OS的另一個(gè)常見異議是它們具有太多的功能,因?yàn)樗鼈冃枰獫M足大量客戶群的需求。盡管這是事實(shí),但該功能的成本已被分?jǐn)偅虼藢?duì)單個(gè)客戶沒有實(shí)際影響。操作系統(tǒng)也可能作為一組組件提供,其中許多是可選的。在商業(yè)RTOS的早期,產(chǎn)品是單片的代碼塊,但是隨著可用功能的增加,出現(xiàn)了可伸縮性的想法。完全可擴(kuò)展的OS可以將所需的功能僅合并到最終的可執(zhí)行映像中。
“免費(fèi)”操作系統(tǒng)
在這種情況下,免費(fèi)操作系統(tǒng)并不真正包含Linux,因?yàn)榇蠖鄶?shù)嵌入式開發(fā)人員可能會(huì)花錢購買受支持和打包的版本,因此它并不是真正的免費(fèi)。本節(jié)介紹一些比較流行的較小的,易于下載的RTOS。
優(yōu)點(diǎn)。 明顯的吸引力顯然是缺乏前期成本,由于無需擔(dān)心許可證費(fèi)用,部署后該成本仍將繼續(xù)。
自由OS傾向于包含源代碼,這當(dāng)然對(duì)參考很有用,因?yàn)槲臋n可能有限并且難以獲得支持。這也是配置和移植到新硬件環(huán)境的要求,當(dāng)然這要取決于用戶。
與許多類型的用戶支持的軟件一樣,免費(fèi)的RTOS經(jīng)常會(huì)吸引大量的追隨者,從而形成了一個(gè)活躍的在線社區(qū),可以免費(fèi)獲得支持。盡管這是有吸引力且有用的,但值得關(guān)注的是它的壽命。嵌入式軟件往往會(huì)經(jīng)歷不同技術(shù)或產(chǎn)品流行的階段。如果您選擇的RTOS過時(shí)了怎么辦?同樣,這種社區(qū)支持通常集中在軟件的當(dāng)前版本上。如果您的產(chǎn)品使用的是較早版本,則可能無法找到有關(guān)問題的幫助。
缺點(diǎn)。 在嵌入式設(shè)備中部署OS是一項(xiàng)長(zhǎng)期的任務(wù),因此長(zhǎng)期支持的問題非常重要。對(duì)于免費(fèi)的OS,您可以依靠社區(qū)的長(zhǎng)期支持嗎?另外,由于經(jīng)常會(huì)導(dǎo)致解決方案,因此文檔是否草草了?
開發(fā)多線程代碼具有挑戰(zhàn)性,因此需要合適的調(diào)試工具。如果免費(fèi)OS流行,則可能是第三方開發(fā)了這種工具,但是支持的問題仍然存在。
自由軟件存在心理挑戰(zhàn)。由于源代碼易于獲得,并且開發(fā)人員認(rèn)為該代碼不具有貨幣價(jià)值,因此強(qiáng)烈傾向于“改進(jìn)”它。這可能只是為了使代碼更高效而進(jìn)行的微小調(diào)整,也可能是增加了新功能。無論哪種情況,結(jié)果都可能是不同項(xiàng)目中使用的許多類似但不同的OS版本。維護(hù)是一個(gè)巨大的挑戰(zhàn)。
在大多數(shù)部署了OS的嵌入式應(yīng)用程序中,不僅需要多線程內(nèi)核,還需要文件系統(tǒng)或網(wǎng)絡(luò)之類的東西。這樣的選項(xiàng)可能可用,但如果沒有,則需要更多的工作來定位必要的中間件并進(jìn)行移植或使其適應(yīng)所選的OS。
選擇一個(gè)操作系統(tǒng)(無論是否免費(fèi))的關(guān)鍵條件之一是對(duì)為項(xiàng)目選擇的CPU的支持。但是,選擇了OS后,需要大量的時(shí)間和精力投入。如果可以將其用于多個(gè)項(xiàng)目,則這是值得的。但是,如果選擇了不同的CPU,那么有什么保證可以提供或?qū)⑻峁┲С郑?/p>
所有軟件,無論是免費(fèi)的還是商業(yè)的,都以某種方式獲得許可。許可證可能是一個(gè)復(fù)雜的文檔,以某種方式限制了軟件的部署。違反許可證的處罰可能很嚴(yán)厲。開源軟件可能特別棘手,因?yàn)樵S可證可能會(huì)損害應(yīng)用程序代碼的狀態(tài),從而迫使您必須公開提供其源代碼。在將任何開源代碼合并到您的應(yīng)用程序之前,應(yīng)尋求法律建議。
自定義操作系統(tǒng)的
優(yōu)點(diǎn)。 開發(fā)內(nèi)部?jī)?nèi)核最常被引用的原因是保持對(duì)完整代碼庫的控制。這聽起來很明智,但它假設(shè)保留了具有相當(dāng)專業(yè)知識(shí)的工作人員,這些專業(yè)知識(shí)可能非常專業(yè)。
對(duì)于內(nèi)部開發(fā)的代碼,當(dāng)然沒有持續(xù)的許可證費(fèi)用。但是持續(xù)的維護(hù)成本不容忽視。
內(nèi)部開發(fā)的另一個(gè)常見理由是,最終的實(shí)時(shí)操作系統(tǒng)將完全符合項(xiàng)目要求。可以說,內(nèi)核的功能更有可能由負(fù)擔(dān)得起的開發(fā)量來定義。完全可擴(kuò)展的商用OS可能會(huì)在不妥協(xié)的情況下完全滿足需求。
缺點(diǎn)。 所有軟件開發(fā)都要花錢。但是,開發(fā)內(nèi)部?jī)?nèi)核的成本通常被吸收到項(xiàng)目中,因此它們是不可見的。
部署操作系統(tǒng)后,它可能會(huì)使用一段時(shí)間。因此,需要長(zhǎng)期的支持。如果開發(fā)人員留在這里,這不是問題。同樣,如果代碼經(jīng)過精心記錄,將不會(huì)有太大的問題。但這都是危險(xiǎn)的假設(shè)。
如前所述,多線程代碼可能會(huì)出現(xiàn)一些細(xì)微的錯(cuò)誤,需要操作系統(tǒng)感知的調(diào)試器才能檢測(cè)到。創(chuàng)建了內(nèi)核之后,開發(fā)這種工具的可能性不大。一種選擇是使商業(yè)調(diào)試器適合內(nèi)部?jī)?nèi)核。
隨著時(shí)間的推移,內(nèi)部?jī)?nèi)核可能會(huì)在多個(gè)項(xiàng)目中使用。但是,每個(gè)項(xiàng)目團(tuán)隊(duì)都有可能尋求改進(jìn)基本代碼的危險(xiǎn)。這導(dǎo)致內(nèi)核的多個(gè)版本,從而加劇了支持和維護(hù)問題。
一個(gè)普通的內(nèi)核不可能就足夠了。附加中間件的開發(fā)將進(jìn)一步增加開發(fā)成本,并且商業(yè)中間件供應(yīng)商不太可能會(huì)接受移植到非商業(yè)RTOS的想法。
在某個(gè)時(shí)候,隨著技術(shù)的發(fā)展,必須更換CPU。如果內(nèi)核具有沉重的處理器專用性,這將是一個(gè)問題。通常,有很大一部分匯編語言和字節(jié)序,并且需要檢查中斷支持。
開發(fā)內(nèi)部OS的最大缺點(diǎn)是哲學(xué)上的。最成功的企業(yè)專注于他們的核心競(jìng)爭(zhēng)力。除非您是內(nèi)核開發(fā)人員,否則專注于您的主要業(yè)務(wù)是最有意義的。
操作系統(tǒng)選擇標(biāo)準(zhǔn)
決定研究商用或至少商用支持的操作系統(tǒng)后,將要解決一系列資格問題:
您的應(yīng)用程序?qū)崟r(shí)嗎?“實(shí)時(shí)”不一定意味著快速-它意味著可預(yù)測(cè)或確定性。這些不是絕對(duì)術(shù)語。這是一個(gè)問題,即您需要系統(tǒng)如何對(duì)事件做出響應(yīng)。時(shí)機(jī)有多關(guān)鍵?如果您需要較高的確定性,那么RTOS可能是您的最佳選擇。在某些情況下,Linux可以使用,特別是在可以使用實(shí)時(shí)擴(kuò)展的情況下。
內(nèi)存大小受限制嗎?與臺(tái)式計(jì)算機(jī)不同,大多數(shù)嵌入式系統(tǒng)的內(nèi)存大小是固定的。可用內(nèi)存量是另一個(gè)重要的選擇標(biāo)準(zhǔn)。除非您有用于操作系統(tǒng)的數(shù)兆字節(jié),否則Linux等的實(shí)現(xiàn)不太可能。
CPU功率受限嗎?可用的CPU功率也很重要。如果處理器僅具有足夠的能力來運(yùn)行應(yīng)用程序,則OS不會(huì)引入運(yùn)行時(shí)開銷。實(shí)時(shí)操作系統(tǒng)傾向于有效地以及可預(yù)測(cè)地使用CPU時(shí)間。
設(shè)備功耗是否成問題?對(duì)于許多類型的系統(tǒng),功耗已成為越來越普遍的關(guān)注點(diǎn)。這可能是為了保留手持設(shè)備的電池壽命,或者是出于環(huán)境和經(jīng)濟(jì)原因而使用固定系統(tǒng)。以前的內(nèi)存大小和CPU能力標(biāo)準(zhǔn)在這里具有影響力,因此OS的大小和執(zhí)行效率很重要。許多操作系統(tǒng)包括電源管理工具(圖2)。Linux提供了一些這樣的功能,并且越來越多的RTOS包含了電源管理框架,包括Nucleus RTOS。
圖2:操作系統(tǒng)電源管理功能。
您是否有晦澀或自定義的外圍設(shè)備?嵌入式系統(tǒng)始終包括許多外圍設(shè)備以及CPU。如果這些是標(biāo)準(zhǔn)設(shè)備,則無論選擇哪種操作系統(tǒng),驅(qū)動(dòng)程序都應(yīng)該可用。通信協(xié)議也是如此。如果您的設(shè)備比較晦澀,則可能有問題。盡管許多RTOS具有廣泛的驅(qū)動(dòng)程序,但它們幾乎總是會(huì)被Linux擊敗。如果您具有獨(dú)特的自定義硬件,則需要編寫驅(qū)動(dòng)程序。Linux的好處是可以使用大量的驅(qū)動(dòng)程序編寫專業(yè)知識(shí)。因此,可以選擇雇用員工或?qū)で笾С智度胧絃inux的供應(yīng)商(例如Mentor Embedded)的幫助。
您是否有MMU,或者可以包含MMU?如果您的設(shè)計(jì)不包括內(nèi)存管理單元(MMU),則沒有選擇使用Linux等的選項(xiàng),因?yàn)镸MU對(duì)于所有過程模型操作系統(tǒng)都是必需的。大多數(shù)RTOS是線程模型,不需要MMU。但是,某些RTOS(如果有)可以有效地使用MMU。
您的應(yīng)用需要安全認(rèn)證嗎?在某些行業(yè)中,認(rèn)證是強(qiáng)制性的。這可能是一個(gè)昂貴的過程,需要訪問所有源代碼。由于認(rèn)證成本在某種程度上與代碼行數(shù)有關(guān),因此較小的OS自然是吸引人的。通常有必要對(duì)完整的應(yīng)用程序進(jìn)行認(rèn)證,因此無法購買預(yù)先認(rèn)證的操作系統(tǒng)。一些OS供應(yīng)商可以通過提供一些必需的文檔來提供幫助。顯然,優(yōu)良作法是選擇一個(gè)在特定應(yīng)用領(lǐng)域中擁有可靠記錄的操作系統(tǒng)。例如,即使Mentor Embedded不能向您出售Nucleus RTOS的“經(jīng)醫(yī)學(xué)系統(tǒng)認(rèn)證”版本,我們的確有許多客戶已在此類應(yīng)用程序中成功使用了該產(chǎn)品。
是否需要企業(yè)系統(tǒng)互操作性?如果您的設(shè)備需要與企業(yè)系統(tǒng)進(jìn)行重要的互操作,則可能是選擇Microsoft產(chǎn)品的一種情況。
是否知道售價(jià)和運(yùn)輸量?在查看操作系統(tǒng)的選擇時(shí),很容易陷入技術(shù)上。通常,與許多購買決策一樣,重要的因素是成本。在這種情況下,不僅僅是獲得最佳價(jià)格的問題。商業(yè)模式也很重要。對(duì)于某些嵌入式設(shè)備,在每臺(tái)設(shè)備上支付版稅是合理的。對(duì)于大批量,免版稅模式可能更好。開源當(dāng)然很有趣,但是在這種情況下,與純商業(yè)產(chǎn)品一樣,必須將持續(xù)的維護(hù)成本考慮在內(nèi)
您是否有過使用其他操作系統(tǒng)的有用經(jīng)驗(yàn)?由于培訓(xùn)是昂貴且費(fèi)時(shí)的,因此,盡可能利用現(xiàn)有經(jīng)驗(yàn)始終是一種好的做法。如果開發(fā)團(tuán)隊(duì)具有特定API的經(jīng)驗(yàn),那么這可能會(huì)對(duì)選擇過程產(chǎn)生重大影響。當(dāng)然,如果您有使用POSIX這樣的標(biāo)準(zhǔn)的經(jīng)驗(yàn),那么您將擁有更大的自由度。供應(yīng)商的經(jīng)驗(yàn)也很重要。特別是,過去與技術(shù)支持的互動(dòng)非常有價(jià)值。同樣,請(qǐng)考慮文檔和源代碼的質(zhì)量。至少有一個(gè)供應(yīng)商提供源代碼,但故意使其變得不可讀
要考慮的多核問題
廣泛地講,有兩種類型的多核系統(tǒng)。如果CPU都是相同的架構(gòu),則該系統(tǒng)稱為同類系統(tǒng)。如果CPU的架構(gòu)不同,那么它就是異構(gòu)的。系統(tǒng)也可以是兩者的混合體。
大致有兩種軟件體系結(jié)構(gòu)。對(duì)稱多處理(SMP)是指一個(gè)OS跨多個(gè)內(nèi)核運(yùn)行,并在它們之間分配工作。SMP只能在同類多核系統(tǒng)上實(shí)現(xiàn)。非對(duì)稱多處理(AMP)是每個(gè)CPU都有自己的OS實(shí)例時(shí)。AMP可以在任何多核配置上實(shí)現(xiàn)。系統(tǒng)部分組成一個(gè)SMP子系統(tǒng),其他部分組成AMP的混合形式很有可能。
選擇多核操作系統(tǒng)。借助SMP系統(tǒng),操作系統(tǒng)可以在可用核心之間分配工作。這需要特定的OS變體。所有高端操作系統(tǒng)都具有此選項(xiàng),這是臺(tái)式機(jī)系統(tǒng)的常見做法。像Nucleus RTOS這樣的實(shí)時(shí)操作系統(tǒng)越來越多地具有SMP版本。顯然,利用多核體系結(jié)構(gòu)的效率可能是關(guān)鍵的OS選擇因素。
為AMP系統(tǒng)中的每個(gè)核心選擇操作系統(tǒng)所需的步驟與為單核系統(tǒng)選擇一個(gè)操作系統(tǒng)所需的步驟相同。但是,還存在內(nèi)核間通信的問題,在其中使用MCAPI可能是一個(gè)有吸引力的選擇。替代地,可以使用管理程序來提供對(duì)AMP系統(tǒng)的全面監(jiān)視。
考慮工具很重要。對(duì)于任何嵌入式軟件開發(fā),擁有正確的工具至關(guān)重要。對(duì)于多核,多OS項(xiàng)目,這至關(guān)重要。維護(hù)完整系統(tǒng)的可見性,評(píng)估其性能以及調(diào)試不同內(nèi)核上的代碼之間的復(fù)雜交互都需要復(fù)雜的工具。此類工具的可用性可能會(huì)對(duì)操作系統(tǒng)的選擇和您選擇的供應(yīng)商產(chǎn)生重大影響。(Mentor Embedded的Sourcery Analyzer是支持多核,多OS設(shè)計(jì)的理想工具。)
結(jié)論
lw
評(píng)論
查看更多