跑Linux操作系统需要什么处理器
单片机、Cortex-M、Linux它们和嵌入式有什么差别?
跑 Linux 操作体系须要什么处理器?ARM9、ARM11?
Cortex-M比ARM9更新,为什么不克不及跑Linux?
信赖很多小伙伴都有类似如许的疑问,下面环绕Cortex-M、 ARM、 Linux来讲讲相干内容。
ARM和Cortex-M
ARM处理器的体系构造定义了指令集(ISA)和基于这一体系构造下处理器的模型。ARM的指令集从ARMv1成长到今天的ARMv9,每一次体系构造的修改都邑添加实用技巧。
在ARMv6之前,其内核指令集架构都是单一格式,但在ARMv7开端,其指令集架构变成3种格式,即今朝大年夜家熟知的Cotex-M、 Cotex-R、 Cotex-A,或者ARMv7-A、ARMv7-R、 ARMv7-M这三款。
Cotex-M:重要指微处理器;
Cotex-R:重要指及时性处理器;
Cotex-A:重要指应用型处理器;
更多介绍可以参看文章:STM32、Cortex-M3和ARMv8-M之间的接洽关系。
值得留意的是,Cortex-M下的处理器没有内存治理单位MMU。
内存治理单位MMU
MMU:Memory Management Unit,内存治理单位。
内存治理单位重要负责从虚拟地址到物理地址的映射,并在硬件层对内存拜访权限的检查。
在Linux等多用户、多过程的操作体系中,MMU使得各个用户过程都有自力的地址空间,以防止内存越界。
MCU都有一个地址集和,被称为虚拟地址范围。以Cortex-M 32为机为例,虚拟地址范围为0 ~ 0xFFFFFFFF (4G地址空间)。
当该控制器寻址一个256M的内存时,它的可用地址范围被限制为0 ~ 0x0FFFFFFF(256M)。
1.在没有内存治理的处理器中,虚拟地址被直接发送到内存总线上,以读写该地址下的物理存储器。
这里拓展浏览:无MMU抢占式操作体系的抢占工作道理
2.在有内存治理的控制器中,虚拟地址起首被发送到MMU中,被映射为物理地址后再发送到内存总线上。
注:上图仅简单反应内存治理的映射机制,其他暂不做评论辩论。
MMU虚拟内存治理最重要的感化是让每个过程有自力的地址空间。
不合过程中的同一个虚拟地址被MMU映射到不合的物理地址,并且在某一个过程中拜访任何地址都弗成能拜访到别的一个过程的数据,如许使得任何一个过程因为履行缺点指令或恶意代码导致的不法内存拜访都不会心外改写其它过程的数据,不会影响其它过程的运行,从而包管全部体系的稳定性。
另一方面,每个过程都认为本身独有全部虚拟地址空间,如许链接器和加载器的实现会比较轻易,不必推敲各过程的地址范围是否冲突。
Liunx操作体系
操作体系平日分为及时操作体系和非及时操作体系。
1.及时操作体系大年夜多为单过程、多线程(多义务),是以不涉及到线程间的地址空间分派,不须要应用MMU,例如ucos、 FreeRTOS、 RT-Thread等。
2.Linux体系属于非及时性操作体统,多过程是其重要特点,可以参考文章:Linux是及时体系照样分时操作体系?
以Ubuntu为例,打开一个shell并且查看bash过程的地址范围如图4,它的地址范围为0x0000000000400000~0xffffffffff600000。
我们打开另一个shell,查看该shell中bash过程的地址范围,如图5。不难发明,两个不合bash过程的地址范围完全雷同。其实操作体系或者用户在fork()过程时完全不须要推敲物理内存的地址分派,该工作由微控制器的内存治理单位MMU来做。
既然是多过程依附了内存治理单位,那么在应用嵌入式Linux时只开一个过程可以吗?肯定是弗成行的!开机后即应用户什么都不做,可见的体系运行必须的过程已经运行了几十至上百个,如图6。
总结
经由过程上述描述我们可以知道,Linux操作体系对MMU(内存治理单位)有极强的依附,若在没有内存治理单位的CPU中运行Linux,生怕全部体系只能逗留在Uboot阶段了。
因为ARM的Cortex-M处理器没有内存治理单位,,一般来说不建议跑Linux操作体系。
当然,任何工作都不是绝对的,假如你重写了Linux内核且搭配足够大年夜的内存芯片,从理论上来说是可以省掉落MMU的。
然则,如许的工作量,真的值得吗?实际上,MMU就是为懂得决操作体系越来越复杂的内存治理而产生的。
义务编辑:haq