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