當前位置:
首頁 > 科技 > 為何Cortex-M處理器運行不了linux

為何Cortex-M處理器運行不了linux

單片機與應用處理器的核心區別到底是什麼呢?是核心主頻的差異?還是Linux系統的支持?又或者是處理器的架構?本文將以NXP的Cortex-M系列為例做簡要介紹。

一、Cortex-M的定位

處理器的體系結構定義了指令集(ISA)和基於這一體系結構下處理器的程序員模型,通俗來講就是相同的ARM體系結構下的應用軟體是兼容的。從ARMv1到ARMv8,每一次體系結構的修改都會添加實用技術。

在ARMv7版本中,內核架構首次從單一款式變成3種款式。Cortex-M系列屬於ARMv7結構下的一個款式:款式M。款式M包含的處理器有Cortex-M0、Cortex-M1、Cortex-M3、Cortex-M4以及Cortex-M7,以上處理器常被用於低成本、低功耗、高可靠的嵌入式實時系統中。它們既可以用於「裸片」開發又能運行實時操作系統,比如us/os-ll、VxWorks以及Aworks(致遠電子開發)等。

圖1 ARMv7下的Cortex系列

● 款式A:高性能的處理器級平台,性能比肩計算機。

● 款式R:定位應用於高端嵌入式系統,高可靠及高時效性。

● 款式M:用於深度嵌入、定製的嵌入式系統。

值得注意的是,Cortex-M下的處理器沒有內存管理單元MMU。

二、內存管理單元MMU

內存管理單元簡稱MMU,它負責虛擬地址到物理地址的映射,並提供硬體機制的內存訪問許可權檢查。在多用戶、多進程的操作系統中,MMU使得各個用戶進程都有獨立的地址空間。

圖2 MMU的地位

任何微控制器都存在一個程序能夠產生的地址集和,被稱為虛擬地址範圍。以32為機為例,虛擬地址範圍為0~0xFFFFFFFF (4G)。當該控制器定址一個256M的內存時,它的可用地址範圍被限定為0x00000000~0x0FFFFFFF(256M)。在沒有MMU的控制器中,虛擬地址被直接發送到內存匯流排上,以讀寫該地址下的物理存儲器。在擁有MMU的控制器中,虛擬地址首先被發送到MMU中,被映射為物理地址後再發送到內存匯流排上。

圖3 內存管理機制

註:上圖僅簡單反映內存管理的映射機制,許可權映射、TLB快表、頁表等概念不做深入討論。

虛擬內存管理最主要的作用是讓每個進程有獨立的地址空間。不同進程中的同一個虛擬地址被MMU映射到不同的物理地址,並且在某一個進程中訪問任何地址都不可能訪問到另外一個進程的數據,這樣使得任何一個進程由於執行錯誤指令或惡意代碼導致的非法內存訪問都不會意外改寫其它進程的數據,不會影響其它進程的運行,從而保證整個系統的穩定性。另一方面,每個進程都認為自己獨佔整個虛擬地址空間,這樣鏈接器和載入器的實現會比較容易,不必考慮各進程的地址範圍是否衝突。

三、linux系統

一般將操作系統分為實時操作系統和非實時操作系統。實時操作系統大多為單進程、多線程(多任務),因此不涉及到線程間的地址空間分配,不需要使用MMU,例如VxWorks。Linux系統屬於非實時性操作體統,多進程是其主要特點。

以Ubuntu為例,打開一個shell並且查看bash進程的地址範圍如圖4,它的地址範圍為0x0000000000400000~0xffffffffff600000。

圖4 shell 1中的bash地址

我們打開另一個shell,查看該shell中bash進程的地址範圍,如圖5。不難發現,兩個不同bash進程的地址範圍完全相同。其實操作系統或者用戶在fork進程時完全不需要考慮物理內存的地址分配,該工作由微控制器的內存管理單元MMU來做。

圖5 shell 2中的bash地址

既然是多進程依賴了內存管理單元,那麼在使用嵌入式linux時只開一個進程可以嗎?肯定是不可行的!開機後即使用戶什麼都不做,可見的系統運行必須的進程已經運行了幾十至上百個,如圖6。

圖6 進程樹

四、總結

綜合以上內容,linux系統對內存管理單元有極強的依賴,若在沒有MMU的處理器中運行linux,恐怕整個系統只能停留在Uboot階段了。由於Cortex-m處理器沒有內存管理單元,因此跑不了linux系統。任何事情都不是絕對的,如果你重寫了linux內核且搭配足夠大的內存晶元,從理論上來說是可以省掉MMU的。但是,這樣的工作量,真的值得嗎?實際上,MMU就是為了解決操作系統越來越複雜的內存管理而產生的。

五、拓展部分

很大一部分開發者選用嵌入式linux系統未能發揮出它的優勢,僅僅是為了獲得開發上的便利,比如乙太網、4G上雲、LCD驅動、文件系統、圖像識別、python應用等等。那麼有沒有方法既能使用傳統高實時性、低成本的單片機又不用面對繁瑣的硬體驅動開發呢?廣州致遠電子有限公司推出的全新AWorks平台——IoT物聯網生態系統正是為此而生。

AWorks的誕生極大的降低了開發者門檻,為開發者提供便利,使開發者可以忽略底層技術細節,專註產品「核心域」,更快的開發出具有競爭力的產品。同時,AWorks為開發者提供的是高度抽象的通用介面,基於AWorks平台的軟體與底層硬體無關,可以「隨心所欲」的跨平台復用(如更換MCU等等)。跨界硬體搭載AWoeks IoT實時操作系統,讓您的開發更容易,功能更強大。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 電子產品世界 的精彩文章:

ADI公司的低功耗、單通道16位DAC支持高密度模擬輸出模塊,無須降額使用
中美貿易繼續磋商,鋰電該如何抵抗外部風險?

TAG:電子產品世界 |