ARM内存映射与存储器接口
- 格式:ppt
- 大小:2.25 MB
- 文档页数:14
对于刚刚学习ARM嵌入式的人来说,遇到的第一个难点我觉得就是地址映射的原理,往往会被一些概念弄得稀里糊涂(比如像我这种智商不高的)。
所以就静下心自己好好研读了以下杜春雷《ARM体系结构与编程》有关MMU和地址映射的讲解,个人感觉写得比较清晰,以下是自己在读的时候理解的内容,如有不正,请指出!对于32为ARM处理器,最大寻址空间为4GB(2^32),但是物理空间并没有配置到这么大,所以对于VA来说,其地址为0x00000000~0xFFFFFFFF,对于PA来说,其地址应小于或等于0xFFFFFFFF。
地址映射原理:把虚拟地址划分为一定大小空间的存储块,同样,物理空间也划分为同样大小的块。
然后,依照存储块的大小,可分为:1、段(1MB)2、大页(64KB)3、小页(4KB)4、极小页(1KB)第一种称为段模式,后面三种称为页模式这些映射,都是通过页表实现的,页表又可可以分为:一级页表(用于段模式)二级页表(用于页模式)什么是页表呢?页表就是存储在内存中(会被拷贝到SDRAM中存放,以供MMU查询),用于表示VA与PA的映射关系的一个表格。
表格中每项称为条目,条目里的内容称为描述符(段描述符和页描述符)。
段模式:以段模式映射时,因为VA大小位4GB,段模式每个条目表为1MB大小的空间,所以全映射时,条目总数(全映射时页表所占内存空间)=4GB / 1MB =4096条(每条32位,即4字节,共4 KB)。
其中,所谓的每个条目大小为1MB,意思是,CPU发出的一段地址范围为1MB的VA (假如0x00000000~0x000FFFFF),这一段VA经过MMU变换,都会索引(查找)到同一个条目。
该条目再次结合VA(PA的[19:0]位,称为段内地址偏移量),形成真正的PA地址。
具体请看下图对于段模式,其只需要使用一级页表。
页表中,条目中存储的描述符格式如下:1、段基址:在设计地址映射时,要映射的物理地址要1MB对齐,段基址就是这段1MB物理地址起始地址的高[31:20]位,每个条目中的描述符的段基址都不一样(以段来说,相差1MB)。
arm构架的存储器参数
1. 地址空间:ARM体系使用单一的地址空间,大小通常为2^32个8位字节,即4GB。
这些字节单元的地址都是无符号的32位数值,取值范围是0到2^32-1。
此外,ARM的地址空间也可以看作是2^30个32位的字单元或2^31个16位的半字单元。
2. 数据类型与存储格式:ARM处理器支持多种数据类型,包括字节(Byte,8位)、半字(Half-Word,16位)和字(Word,32位)。
存储器的格式可以是大端模式或小端模式,大端模式是指字的高字节存储在低地址字节单元中,而字的低字节存储在高地址字节单元中。
3. 寄存器:ARM处理器通常包含一定数量的通用寄存器,用于暂存数据和地址。
例如,ARM处理器可能具有37个寄存器,这些寄存器的读写周期通常小于2ns。
4. Cache和紧耦合存储器(TCM):为了提高内存访问效率,ARM 处理器通常包含片内Cache和TCM。
片内Cache可以优化内存访问,降低系统的总成本,而TCM是为了弥补Cache访问的不确定性增加的片上存储器。
5. 内存类型:ARM构架的嵌入式系统通常使用不同类型的内存,包括片内SRAM(静态随机存取存储器)提供高速内存访问,以及片外DRAM(动态随机存取存储器)或SDRAM(同步动态随机存取存储器)作为主存储器。
这些存储器的容量通常在8MB到512MB之间。
ARM处理器系统初始化过程在嵌入式系统中,ARM处理器是最常用的处理器之一。
ARM处理器的系统初始化过程可以分为硬件初始化和软件初始化两个阶段。
本文将介绍ARM处理器系统初始化的具体流程。
硬件初始化在系统上电后,ARM处理器进入硬件初始化阶段。
主要任务是对处理器的外设进行初始化。
1.初始化时钟系统:ARM处理器的时钟系统是处理器运行的根底,因此在初始化过程中需要设置适当的时钟频率和时钟源。
这可以通过配置PLL〔Phase Locked Loop〕或者外部晶振来实现。
2.使能缓存:缓存是提高处理器性能的关键。
在初始化过程中,需要配置L1缓存和L2缓存的大小、映射方式等参数,并使能它们。
3.配置中断控制器:中断是处理器与外设交互的一种方式。
在初始化过程中,需要配置中断控制器,使其能够正确地响应外设发出的中断请求。
4.初始化外设:根据系统的需求,初始化各个外设,包括串口、SPI、I2C等外设。
这些外设的初始化过程涉及到设备的存放器配置、中断使能等操作。
5.设置存储器映射:ARM处理器通过存储器映射来访问外部存储器。
在初始化过程中,需要设置存储器映射表,使处理器能够正确地访问外部存储器。
软件初始化在硬件初始化完成后,ARM处理器进入软件初始化阶段。
主要任务是加载和运行操作系统及应用程序。
1.复位处理器:在软件初始化过程中,可以选择复位处理器,将处理器重新置于初始状态。
这通常通过将Reset引脚拉低来实现。
2.加载引导程序:引导程序是系统启动的第一段代码,其功能是加载操作系统的核心代码。
在软件初始化过程中,需要将引导程序加载到适当的内存位置,并设置处理器的执行起点。
3.初始化操作系统:一旦引导程序加载完成,操作系统开始初始化。
这包括初始化内核数据结构、初始化设备驱动程序、启动任务调度器等。
4.加载应用程序:在操作系统初始化完成后,可以选择加载应用程序。
应用程序的加载可以通过文件系统来实现,将应用程序从存储设备读取并加载到内存中。
ARM外围接口电路工作原理ARM11是一种基于ARM架构设计的32位处理器。
它具有较高的计算能力和低功耗特性,被广泛应用于嵌入式系统和移动设备中。
ARM11外围接口电路是ARM11芯片上的硬件模块,用于扩展处理器的功能和连接外部设备。
1.串行接口ARM11芯片上的串行接口可以实现与外部设备的通信。
它一般包括UART(通用异步接收器/发送器)和SPI(串行外设接口)等模块。
UART模块实现了与外部设备的异步串口通信,而SPI模块则是一种同步串行接口,用于高速数据传输。
2.并行接口ARM11芯片上的并行接口通常用于与外部存储器、显示器、键盘等设备的连接。
ARM11芯片一般配备了SRAM接口、SDRAM接口和LCD接口等模块。
SRAM接口和SDRAM接口用于连接外部存储器,实现数据的读写操作。
LCD接口用于连接液晶显示器,实现图像和文字的显示。
3.时钟时钟模块是ARM11芯片中非常重要的一个模块,它用于提供系统的时钟信号。
ARM11芯片一般具有内部和外部时钟源,通过时钟分频器将外部时钟源分频后,提供给不同的模块使用。
时钟模块还负责产生处理器的时钟信号,控制处理器的工作频率。
4.中断控制中断控制模块用于处理外部的中断请求信号,并向处理器发送中断请求。
当外部设备需要与ARM11芯片通信或请求处理器的服务时,会产生中断请求信号。
中断控制模块会接收到这个信号,然后通过处理器的中断控制单元将中断请求传递给处理器,使得处理器能够及时响应和处理。
当需要与外部设备通信时,首先需要配置相关的接口模块。
比如,在使用串行接口进行通信时,需要设置相关的波特率和数据格式;在使用并行接口连接显示器时,需要配置显示器的分辨率和显示模式。
然后,通过编程方式向相应的接口模块写入数据或读取数据,实现与外部设备的数据交互。
在整个工作过程中,时钟模块起着关键的作用。
时钟模块提供稳定的时钟信号,保证各个接口模块按照预定的时序要求工作,从而实现数据的准确传输。
arm与内存数据访问有关的指令在计算机科学中,ARM(Advanced RISC Machines)是一种广泛使用的指令集架构(ISA),它适用于各种应用,从移动设备到嵌入式系统和超级计算机。
ARM架构的突出特点之一是其能够高效地访问内存数据的能力。
在本文中,我们将探讨与ARM架构中内存数据访问相关的指令。
ARM架构中的指令具有灵活性和可扩展性,可以执行各种读取和写入内存数据的操作。
下面是一些与内存数据访问相关的指令:1. LDR(Load Register):这个指令用于将内存中的数据加载到寄存器中。
例如,LDR R0, [R1]指令将从存储在地址R1处的内存中获取数据,并将其加载到寄存器R0中。
2. STR(Store Register):这个指令用于将寄存器中的数据存储到内存中的指定位置。
例如,STR R0, [R1]指令将将寄存器R0中的数据存储在地址R1处的内存中。
3. LDM(Load Multiple):这个指令用于从内存中连续加载多个数据到多个寄存器中。
例如,LDM R0!, {R1-R3}指令将从地址R0开始的连续内存区域加载数据到R1、R2和R3寄存器中,同时更新R0的值。
4. STM(Store Multiple):这个指令用于将多个寄存器中的数据一次存储到内存中。
例如,STM R0!, {R1-R3}指令将寄存器R1、R2和R3中的数据一次性存储到地址R0开始的连续内存区域中,并更新R0的值。
5. SWP(Swap Data):这个指令用于原子地交换内存中的数据与寄存器中的数据。
例如,SWP R0, R1, [R2]指令将内存地址R2处的数据与寄存器R0的值进行交换,并将交换前的内存数据加载到R1中。
6. LDRB(Load Register Byte):这个指令用于从内存中加载一个字节大小的数据到寄存器中。
例如,LDRB R0, [R1]指令将从地址R1处的内存加载一个字节的数据,并将其加载到R0寄存器中。
arm9 芯片ARM9芯片是一款由ARM公司开发的低功耗、高性能的嵌入式微处理器芯片。
它以其出色的性能和低功耗而在嵌入式系统领域得到了广泛应用。
下面将从架构、特征、应用领域等方面对ARM9芯片进行详细介绍。
首先,ARM9芯片基于ARMv5TE架构,采用了精简指令集(RISC)的设计理念,使得该架构具有高效的指令执行速度和低功耗的优点。
ARM9架构还支持32位数据宽度,具有多种不同的运行模式,如用户模式、系统模式和特权模式,从而适应不同的应用场景。
此外,ARM9还支持多种外部设备的接口,如UART、SPI、I2C等,便于与其他外设进行通信。
其次,ARM9芯片具有出色的性能。
它采用了高度流水线的执行单元,能够以较高的频率运行,同时还具备快速的内存访问能力。
此外,ARM9芯片还配备了独立的存储管理单元(MMU),可以提供虚拟内存映射和内存保护功能,从而提高系统的安全性和稳定性。
ARM9芯片还具有低功耗的优势。
它采用了先进的CMOS工艺,有效降低了功耗。
此外,ARM9芯片通过硬件加速器和高效的数据缓存等技术,能够实现高性能的同时减小功耗。
这使得ARM9芯片非常适合电池供电的移动设备和低功耗要求的嵌入式系统。
ARM9芯片在各个领域都有广泛的应用。
首先,它可以应用于智能手机和平板电脑等移动设备中,提供强大的计算能力和出色的功耗控制。
其次,ARM9芯片也广泛应用于智能家居、智能交通等物联网领域,通过其高度集成和低功耗特性,实现设备的互联互通。
此外,ARM9芯片还可以应用于嵌入式控制系统、工业自动化等需求高性能和低功耗的领域。
综上所述,ARM9芯片作为一款具有出色性能和低功耗的嵌入式微处理器芯片,在各个领域都有广泛的应用前景。
随着技术的不断发展和完善,相信ARM9芯片将会在未来发展更加繁荣。
关于arm的统一编制与内存映射机制Arm是统一编址的,也就是外设和内存进行统一的编址,共同形成了4G物理地址空间(32位为例子)。
大家知道操作外设时,实际上操作的是读写设备相关的寄存器,这些与外设相关的寄存器与不同操作模式下R0——R15那些寄存器是不同的,这些寄存器并不是所谓的物理上的寄存器,实际上是所谓的IO端口,通常会有控制、状态、数据的分类。
他们被连续地编址,对于其编址的方式有两种一种是IO映射、一种是内存映射。
IO映射是对x86为例的复杂指令集来说的,需要专门的IO控制指令,不详谈。
内存映射是对于统一编制的精简指令集计算机arm等来说的。
具体的方法就是将IO端口映射成和内存一样的物理地址,然后与内存一起进行统一编址,或者说成为了内存的一部分,当然还可以理解内存映射的意思是可以用访问内存的方式进行IO地址的访问,内存和IO地址一起编码为cpu识别的地址哦。
然后内存+IO端口地址=4GB 的寻址空间。
那么接下来还有个问题就是这种编址的硬件实现?这就要详见arm的AMBA(AdvancedMicrocontroller Bus Architecture)了,这是目前芯片总线的主流标准。
共定义了3组总线:高性能总线(AdvancedHigh Performance Bus,AHB)、系统总线(AdvancedSystem Bus,ASB)和外设总线(Advanced PeripheralBus,APB)。
不同的总线上挂接着不同的外设和存储器,大部分由三态门控制。
比如,当AHB总线上的主设备读写从设备时,发出的地址经过AHB总线的译码器产生该地址所对应从设备的选择信号,选中从设备;这样就可以对从设备进行读写啦。
或者可以这样想AHB总线上的译码器根据地址产生相应的片选信号,选中对应的设备。
对于硬件的实现我们这是简单地理解以便更好地体会上述编址。
涉及到具体的硬件读写操作,地址的硬件实现会提到很多的译码器、三态门、总线、还有时序等等具体情况具体分析,在此不做详述。
arm内存管理机制ARM是一种广泛应用于嵌入式系统中的芯片,其内存管理机制是保证系统运行稳定的重要组成部分。
本文将介绍ARM内存管理机制的基础知识,包括地址空间、虚拟地址、物理地址和内存映射等内容,并给出一些指导意义的建议。
地址空间是指进程可以访问的地址集合。
ARM使用了一个32位地址空间,共2^32字节(4GB)。
这个地址空间被分成两个部分:用户空间(User Space)和内核空间(Kernel Space)。
用户空间是由应用程序使用的,内核空间是由操作系统使用的。
在ARM系统中,虚拟地址和物理地址是两个不同的地址空间。
虚拟地址是由应用程序使用的地址。
它是一个32位地址,它与物理地址是不同的,应用程序只能访问虚拟地址,并且不能直接访问物理地址。
应用程序访问虚拟地址时,操作系统将虚拟地址转换为物理地址,然后进行访问。
这个转换由ARM芯片的内存管理单元(MMU)完成。
物理地址是处理器处理的实际地址。
它表示访问硬件的实际位置。
每个ARM芯片都有一个物理地址空间,但它的大小和内容依赖于所用的芯片,那么关于内存地址的运用应该注意哪些方面呢?在ARM中,内存是通过内存映射的方式访问的。
内存映射是由操作系统控制的,它将虚拟地址映射到物理地址。
内存映射的目的是将不同的外设设备和物理内存映射到同一地址空间。
这样,应用程序可以使用相同的地址来访问不同的设备和内存。
在编写嵌入式系统时,必须小心使用内存映射。
错误的内存映射可能会导致系统崩溃或数据损坏。
因此,在设计和实现系统时,必须确保正确的内存映射,并尽可能减少内存分配和释放的次数。
总之,ARM内存管理机制中,地址空间、虚拟地址、物理地址和内存映射是重要的概念。
理解这些概念可以帮助开发人员设计和实现更稳定、高效的嵌入式系统。
因此,我们建议开发人员在开发嵌入式系统时,要注意这些概念,并确保正确的内存管理。
ARM(包括ARMv7⼯作模式介绍)寄存器、⼯作模式和指令集(来源:IT165收集)转载于: /uid-30234312-id-5077078.html本章介绍ARM处理器的基础特性,包括寄存器、⼯作模式和指令集的细节。
我们也会涉及⼀些处理器实现细节,包括指令流⽔线和分⽀预测。
ARMv7架构是⼀个32位处理器架构。
它是⼀种load/store架构,意味着数据处理指令操作通⽤寄存器中的值。
只有加载(load)和存储(store)指令访问存储器。
通⽤存储器也是32位的。
本书中,字(word)代表32位,双字(doubleword)代表64位,半字(halfword)代表16位宽。
尽管ARMv7架构是⼀种32位架构,单独的处理器对所有模块和内部连接的实现不⼀定必须都是32位宽。
例如,对于指令获取和数据访问,具有64位或更宽的路径是可能的。
实现ARMv7-A架构的处理器不具有由架构固定的存储器映射。
处理器能访问4GB的虚拟地址空间,存储器和外设都可以在那个空间范围之内⾃由地映射。
我们将会在第9章和第10章中讲述存储器管理,那⾥我们会看到缓存和内存管理单元(MMU)。
4.1 指令集 ⼤多数ARM处理器⽀持超过⼀种指令集: >ARM--- ⼀种32位指令集 >Thumb--- ⼀种16位指令集,具有更好的代码密度(但是相⽐ARM代码,性能有所降低)在程序的控制之下,处理器可以在这两种指令集之间来回切换。
所有的Cortex-A系列处理器实现了Thumb-2技术,它扩展了Thumb指令集。
混合使⽤32位和16位指令,以Thumb指令集的代码密度和接近ARM指令集的性能。
⾃从所有的Cortex-A系列处理器⽀持这⼀扩展,针对它们的软件常被编译成Thumb指令集。
(本⽂作者注:按照⽂章《如何使⽤Thumb-2改善代码密度和性能》所述,Thumb-2代码⼤⼩约为ARM代码的74%,性能则为其98%)4.2 模式 ARM架构有9种处理器模式,在表4-1中所总结。
ARM Cortex M0手册是一份广泛应用于嵌入式系统和物联网设备开发中的重要技术文档。
在本文中,我将对ARM Cortex M0手册进行全面评估,旨在帮助您更深入地理解这一主题。
1. ARM Cortex M0手册概述ARM Cortex M0手册是一份由ARM公司编写的技术文档,主要介绍了Cortex M0内核的架构、指令集、寄存器和编程模型等相关信息。
作为ARM架构中的一部分,Cortex M0处理器以其低功耗、高性能和灵活的特性,被广泛应用于嵌入式系统和物联网设备中。
2. 深度评估2.1 Cortex M0架构Cortex M0采用了精简的指令集架构,具有较低的成本和功耗。
它的3级流水线结构和内置中断控制器使其在实时性要求较高的应用中表现卓越。
2.2 Cortex M0寄存器Cortex M0内置了一组通用寄存器、特殊功能寄存器和控制寄存器,用于存储数据、控制系统状态和执行特定的功能操作。
2.3 Cortex M0编程模型Cortex M0使用了Harvard结构,同时具有较为灵活的内存映射模式和存储器保护机制,为开发者提供了更便捷的编程接口和优化性能。
3. 广度评估3.1 Cortex M0在嵌入式系统中的应用在嵌入式系统领域,Cortex M0常被用于智能传感器、消费电子产品和医疗设备等领域,其高性能和低功耗的特性为设备的精简设计和长时间运行提供了强大的支持。
3.2 Cortex M0在物联网设备中的应用在物联网设备领域,Cortex M0被广泛应用于物联网终端设备和边缘计算设备中,为其实时通信、数据处理和低功耗运行提供了重要的支持。
4. 总结与回顾通过本文对ARM Cortex M0手册的全面评估,相信您已经对这一主题有了更深入的了解。
Cortex M0作为一款应用广泛的嵌入式处理器,其架构、寄存器和编程模型等方面的特性,为嵌入式系统和物联网设备的开发带来了极大的便利和灵活性。
5. 个人观点与理解作为一名嵌入式系统工程师,我个人认为Cortex M0的出现极大地推动了嵌入式系统和物联网设备的发展。
内存管理单元(MMU)和协处理器CP15介绍(转)内存管理单元(MMU)和协处理器CP15介绍内存管理单元(MMU)介绍嵌⼊式系统中,存储系统差别很⼤,可包含多种类型的存储器件,如FLASH,SRAM,SDRAM,ROM等,这些不同类型的存储器件速度和宽度等各不相同;在访问存储单元时,可能采取平板式的地址映射机制对其操作,或需要使⽤虚拟地址对其进⾏读写;系统中,需引⼊存储保护机制,增强系统的安全性。
为适应如此复杂的存储体系要求,ARM处理器中引⼊了存储管理单元来管理存储系统。
⼀内存管理单元(MMU)概述在ARM存储系统中,使⽤MMU实现虚拟地址到实际物理地址的映射。
为何要实现这种映射?⾸先就要从⼀个嵌⼊式系统的基本构成和运⾏⽅式着⼿。
系统上电时,处理器的程序指针从0x0(或者是由0Xffff_0000处⾼端启动)处启动,顺序执⾏程序,在程序指针(PC)启动地址,属于⾮易失性存储器空间范围,如ROM、FLASH等。
然⽽与上百兆的嵌⼊式处理器相⽐,FLASH、ROM等存储器响应速度慢,已成为提⾼系统性能的⼀个瓶颈。
⽽SDRAM具有很⾼的响应速度,为何不使⽤SDRAM来执⾏程序呢?为了提⾼系统整体速度,可以这样设想,利⽤FLASH、ROM对系统进⾏配置,把真正的应⽤程序下载到SDRAM中运⾏,这样就可以提⾼系统的性能。
然⽽这种想法⼜遇到了另外⼀个问题,当ARM处理器响应异常事件时,程序指针将要跳转到⼀个确定的位置,假设发⽣了IRQ中断,PC将指向0x18(如果为⾼端启动,则相应指向0vxffff_0018处),⽽此时0x18处仍为⾮易失性存储器所占据的位置,则程序的执⾏还是有⼀部分要在FLASH或者ROM中来执⾏的。
那么我们可不可以使程序完全都SDRAM中运⾏那?答案是肯定的,这就引⼊了MMU,利⽤MMU,可把SDRAM的地址完全映射到0x0起始的⼀⽚连续地址空间,⽽把原来占据这⽚空间的FLASH或者ROM映射到其它不相冲突的存储空间位置。
NXP LPC ARM 必须知道的知识寄存器和工作模式:7种工作模式:fiq/irq/abt/und/sys/usr/svc。
通过"MSR cpsr_c,#0xdx"切换。
上电时进入svc模式。
svc和usr的区别是:svc可以通过"MSR cpsr_c,#0xdx"自由切换到其它任何模式,但是usr 不可以。
各模式下有自己的堆栈。
要在程序启动后依次进入各个模式分别设置自己的堆栈,最后进入usr模式。
好多个寄存器:r0 - r7 (a1 - a4 / v1 - v4),r15(pc) 在所有模式下都可见。
r8(v5),r9(sb,v6),r10(sl,v7),r11(fp,v8),r12(ip) fiq模式下有一组独立的映射。
r13(sp)/R14(lr) 在usr和sys模式下用同一组映射,其它模式下各有自己的映射。
cpsr在所有模式下可见。
spsr在usr和sys模式下没有映射。
cpsr是一个最特殊的寄存器,结构如下:31 30 29 28 27~8 7 6 5 4 3 2 1 0N Z C V 保留 I F T M4 M3 M2 M1 M0其中,N/Z/C/V分别为负/零/进位/溢出的标志位。
在所有模式下都可以进行读操作。
I/F为中断/快中断禁止位,M4~M0是工作模式控制位,它们在USR模式下都不可操作。
T为Thum/ARM模式位,在所有模式下不可直接操作,否则会天下大乱,预取址错误中断可以捕获这种乱局。
只能用BX指令进行Thum/ARM的状态切换。
总之,USR模式很不方便。
在该模式下只可以通过软中断控制I/F位。
cpsr只能够用MSR/MRS 指令来操作。
各工作模式下的spsr: 在由突发事件引起的模式切换发生时,新模式的spsr自动保存cpsr 的值,以备该模式退出时还原cpsr。
在程序的控制下进入某模式时,cpsr不会自动保存到相应的spsr。
1.内存管理和MMU当ARM 要访问存储器时,MMU 先查找TLB(Translation Lookaside Buffer,旁路转换缓冲)中的虚拟地址表。
如果TLB 中没有虚拟地址的入口,则转换表遍历硬件会从存放在内存的转换表中获得转换和访问器权限。
一旦取到,这些信息将被放到TLB 中,这时访问存储器的TLB 入口就拿到了。
在TLB 中其实包含了以下信息:1)控制决定是否使用高速缓冲2)访问权限信息3)在有cache 的系统中,如果cache 没有命中,那么物理地址作为线性获取(line fetch)硬件的输入地址。
如果命中了cache 那么数据直接从cache 中得到,物理地址被忽略。
ARM 的工作流程可用下图表示:这种机制是纯粹的高速硬件操作,并不需要操作系统来完成。
操作系统只要提供内存转换表就可以了,但是需要符合一定的格式。
ARM9 的MMU 映射表分为两种,一级页表的变换和二级页表变换。
两者的不同之处就是实现的变换地址空间大小不同。
一级页表变换支持1 M 大小的存储空间的映射,而二级可以支持64 kB,4 kB 和1 kB 大小地址空间的映射。
在LINUX 中最终使用了1 M 一级页表和4 kB 的二级页表(即 1M段区和4KB页面)内核中地址转换表建立过程地址转换表建立是和内核的启动一起完成的,页表的建立也可以分为三个阶段:第一阶段是发生在内核解压缩、自引导时,也就内核镜像zimage 的文件头部分。
相关代码从某种意义上来讲不属于内核,它是BSP 代码中的一部分,是需要根据不同的架构来分别实现的。
通过平面映射的方式建立了256M 空间节描述表。
但是,这个映射表是临时的,是为了提高内核解压缩时的速度而实现的。
在解压缩结束之后,进入内核代码之前,MMU 功能就被关闭了,随之的映射表也被废弃不用。
当decompress_kernel 函数实现内核的解压缩之后,那么内核启动的第一阶段工作就完成了。
s3c2440地址空间的分配s3c2440启动过程详解一:地址空间的分配1:s3c2440是32位的,所以可以寻址4GB空间,内存(SDRAM)和端口(特殊寄存器),还有ROM都映射到同一个4G空间里.2:开发板上一般都用SDRAM做内存flash(nor、nand)来当做ROM。
其中nand flash 没有地址线,一次至少要读一页(512B).其他两个有地址线3:norflash不用来运行代码,只用来存储代码,NORflash,SDRAM可以直接运行代码)4:s3c2440总共有8个内存banks6个内存bank可以当作ROM或者SRAM来使用留下的2个bank除了当作ROM 或者SRAM,还可以用SDRAM(各种内存的读写方式不一样)7个bank的起始地址是固定的还有一个灵活的bank的内存地址,并且bank大小也可以改变5:s3c2440支持两种启动模式:NAND和非NAND(这里是nor flash)。
具体采用的方式取决于OM0、OM1两个引脚OM[1:0所决定的启动方式OM[1:0]=00时,处理器从NAND Flash启动OM[1:0]=01时,处理器从16位宽度的ROM启动OM[1:0]=10时,处理器从32位宽度的ROM启动。
OM[1:0]=11时,处理器从Test Mode启动。
当从NAND启动时cpu会自动从NAND flash中读取前4KB的数据放置在片内SRAM里(s3c2440是soc),同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000)。
cpu 是从0x00000000开始执行,也就是NAND flash里的前4KB内容。
因为NAND FLASH 连地址线都没有,不能直接把NAND映射到0x00000000,只好使用片内SRAM做一个载体。
通过这个载体把nandflash中大代码复制到RAM(一般是SDRAM)中去执行当从非NAND flash启动时nor flash被映射到0x00000000地址(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x40000000). 然后cpu从0x00000000开始执行(也就是在Norfalsh中执行)。