STM32是一款單片機,它由意法半導體公司制造。ST是意法半導體的簡稱,M是指微控制器(也就是單片機的)MCU的第一個英文字母,32是指32位的CPU,它的CPU是采用的ARM公司的Cortex-M系列的內核設計。
1. Cortex-M 的定位
ARM處理器的體系結構定義了指令集(ISA)和基于這一體系結構下處理器的模型。ARM的指令集從ARMv1發(fā)展到今天的ARMv9,每一次體系結構的修改都會添加實用技術。
圖1 Armv7下的Cortex系列
在ARMv6之前,其內核指令集架構都是單一款式,但在ARMv7開始,其指令集架構變成3種款式,即目前大家熟知的Cotex-M、 Cotex-R、 Cotex-A,或者ARMv7-A、ARMv7-R、 ARMv7-M這三款。
款式A:高性能的處理器級平臺,性能比肩計算機。
款式R:定位應用于高端嵌入式系統(tǒng),高可靠及高時效性。
款式M:用于深度嵌入、定制的嵌入式系統(tǒng)。
值得注意的是,Cortex-M下的處理器沒有內存管理單元MMU。
2. 內存管理單元 MMU
內存管理單元簡稱MMU,它負責虛擬地址到物理地址的映射,并提供硬件機制的內存訪問權限檢查。在多用戶、多進程的操作系統(tǒng)中,MMU使得各個用戶進程都有獨立的地址空間。
圖2 MMU的地位
任何微控制器都存在一個程序能夠產生的地址集合,被稱為虛擬地址范圍。以32為機為例,虛擬地址范圍為0~0xFFFFFFFF (4G)。當該控制器尋址一個256M的內存時,它的可用地址范圍被限定為0x00000000~0x0FFFFFFF(256M)。在沒有MMU的控制器中,虛擬地址被直接發(fā)送到內存總線上,以讀寫該地址下的物理存儲器。在擁有MMU的控制器中,虛擬地址首先被發(fā)送到MMU中,被映射為物理地址后再發(fā)送到內存總線上。
圖3 內存管理機制
3. Linux系統(tǒng)
一般將操作系統(tǒng)分為實時操作系統(tǒng)和非實時操作系統(tǒng)。實時操作系統(tǒng)大多為單進程、多線程(多任務),因此不涉及到線程間的地址空間分配,不需要使用MMU,例如VxWorks。Linux系統(tǒng)屬于非實時性操作系統(tǒng),多進程是其主要特點。
以Ubuntu為例,打開一個shell并且查看bash進程的地址范圍如圖4,它的地址范圍為0x0000000000400000~0xffffffffff600000。
圖4 shell 1中的bash地址
我們打開另一個shell,查看該shell中bash進程的地址范圍,如圖5。不難發(fā)現(xiàn),兩個不同bash進程的地址范圍完全相同。其實操作系統(tǒng)或者用戶在fork()進程時完全不需要考慮物理內存的地址分配,該工作由微控制器的內存管理單元MMU來做。
圖5 shell 2中的bash地址
既然是多進程依賴了內存管理單元,那么在使用嵌入式linux時只開一個進程可以嗎?肯定是不可行的!開機后即使用戶什么都不做,可見的系統(tǒng)運行必須的進程已經運行了幾十至上百個,如圖6。
圖6 進程樹
4. 總結
綜合以上內容,linux系統(tǒng)對內存管理單元有極強的依賴,若在沒有MMU的處理器中運行l(wèi)inux,恐怕整個系統(tǒng)只能停留在Uboot階段了。由于Cortex-m處理器沒有內存管理單元,因此跑不了linux系統(tǒng)。任何事情都不是絕對的,如果你重寫了linux內核且搭配足夠大的內存芯片,從理論上來說是可以省掉MMU的。但是,這樣的工作量,真的值得嗎?實際上,MMU就是為了解決操作系統(tǒng)越來越復雜的內存管理而產生的。
審核編輯:湯梓紅
-
單片機
+關注
關注
6040文章
44594瀏覽量
636917 -
ARM
+關注
關注
134文章
9121瀏覽量
368247 -
Linux
+關注
關注
87文章
11327瀏覽量
209966 -
STM32
+關注
關注
2270文章
10915瀏覽量
356762
原文標題:stm32可以跑Linux操作系統(tǒng)嗎?
文章出處:【微信號:混說Linux,微信公眾號:混說Linux】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論