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

國(guó)產(chǎn)銀河麒麟操作系統(tǒng)V10和星光麒麟V1.0操作系統(tǒng)如何選擇?

云服務(wù)器選擇什么操作系統(tǒng)好?
deepin操作系統(tǒng)介紹

國(guó)產(chǎn)實(shí)時(shí)操作系統(tǒng):和RT-Linux,Zephyr的實(shí)時(shí)性對(duì)比

linux是實(shí)時(shí)系統(tǒng)還是分時(shí)操作系統(tǒng)
嵌入式 Linux 操作系統(tǒng)配置
linux操作系統(tǒng)安裝步驟 linux操作系統(tǒng)的特點(diǎn)及組成
面向功能安全應(yīng)用的汽車開源操作系統(tǒng)解決方案

Linux操作系統(tǒng)份額創(chuàng)歷史新高,逼近4.5%里程碑
Linux操作系統(tǒng)運(yùn)行參數(shù)自動(dòng)調(diào)整技術(shù)

請(qǐng)問(wèn)MODUS支持LINUX、FREERTOS、UCOS、Mbed、Android所有操作系統(tǒng)嗎?
嵌入式實(shí)時(shí)操作系統(tǒng):Intewell操作系統(tǒng)與VxWorks操作系統(tǒng)有啥區(qū)別

工業(yè)實(shí)時(shí)操作系統(tǒng)對(duì)比:鴻道Intewell跟rt-linux有啥區(qū)別

評(píng)論