一、S3C2440存储控制器
假如咱们写过S3C2440的ARM裸机程序都应该知道一般SDRAM的开端地址是0X30000000,可是咱们有没有想过为什么呢?下面我将给咱们做一个扼要的介绍。
而作为32位的CPU,能够运用的地址规模理论上能够到达2的32次方等于4G,除掉上述的1G地址空间,还有一部分是CPU内部寄存器的地址,剩余的地址空间没有运用。
下面咱们来看到S3C2440存储器的地址空间分布图
左面的是表明CPU从NOR FLASH发动时的地址空间图,右边是CPU从NAND FLASH发动时的地址空间图。从图中能够看出SDRAM接在BANK6上面,地址为0X30000000,这就解说了开端最开端的那个问题。问题又来了为什么CPU从NAND和NOR发动时地址空间不同?这是由于NOR是线性结构,跟一般的内存差不多,它接在BANK0上。而NAND则是别的一种结构,S3C2440有专用的NAND控制器和地址线来衔接,它不能接在BANK0上。CPU发动时必定从0地址开端履行程序,而从NAND发动时,0地址没有存储器,那CPU怎么办呢?所以就呈现了一种叫“起步石”(stepping stone)的东东,它是S3C2440内部的一块4K的存储器,当从NAND发动时,0地址线会衔接到起步石上面,一起CPU会经过内部的硬件将NAND FLASH开端的4K数据复制到起步石里边。起步石里边的程序一般规划为对SDRAM进行初始化,然后将NAND里边的部分程序复制到SDARM,然后跳到SDRAM开端履行程序。所以作为U-BOOT移植使其支撑从NAND的发动时,需求对NAND的前4K程序做处理。
下面咱们再来看看S3C440存储控制器一般所接外设的拜访地址和部分寄存器的拜访地址
二、S3C2440MMU
1.MMU的效果
咱们再榜首部分评论的全部都是物理地址,留意不要与这部分要将的虚拟地址给混杂起来。
内存办理单元(Memory ManagerUnit)简称MMU。它担任将虚拟地址转化成物理地址,然后传给上部分介绍的存储办理器进行寻址。
现代的多用户多进程操作系统经过MMU使各个用户进程都有自己的独立的地址空间:地址映射功用功用使的个进程具有“看起来”相同的地址空间,而内存拜访权限的查看能够维护每个进程所用的内存不会被其他进程损坏。
我来打个糟糕的比如。甲同学(进程甲)去一个图书办理员那儿去借名为“内存”的一本书,说他7点钟要用。图书办理员给甲同学一个牌子上面写着哪个层高楼哪个房间有这本书,不过这块牌子只能7点钟去取书,且只能借三个小时(权限),而乙同学相同要借这本书不过是12点,图书馆相同给乙同学一块牌子,不同的时这块牌子只能12点钟去取书也只能借三个小时。结果是甲乙同学都借到了这本书,他们都感觉具有了这本书,在他们具有这本书的期间不会被其他同学打扰。实践上这儿的同学就代表进程,图书办理员代表是内核,牌子代表的是虚拟地址,书代表实践的内存,而MMU完结的作业便是拿到同学的牌子帮同学找到书的进程。
虚拟地址终究要转成物理地址才干读写实践的数据,这经过将虚拟地址空间、物理地址空间划分为一个相同巨细的一块块小空间,然后为着两类小空间树立映射空间,有或许多块虚拟地址映射到同一块物理地址空间,或许有些虚拟地址空间映射详细物理地址空间上去。发动MMU后,CPU对外宣布虚拟地址,然后MMU将虚拟地址转成物理地址再进行拜访。
2.虚拟地址空间到物理空间的转化进程
在ARM CPU中运用页表的方法进行转化。linux内核一般运用两级页表的方法。页表是个什么东东,他就像咱们的书上的目录,有主目录,次目录。当咱们要找一个知识点的时分先找到主目录,然后再找到次目录再找到相应的知识点。每一个进程都会在内存里边创立一个目录,目录的寄存地址保存起来。当需求拜访目录时,就会将目录放到CPU的一个专用寄存器里边,然后MMU读取这个寄存器里边的值就会帮咱们找到咱们要拜访的物理地址。