linux 系统启动 第一课

linux系统从上电到系统运行起来(一)

预备知识

1、常见存储器
存储器根据掉电时数据是否丢失分为RAM-RandomAccessMemory(随机存取存储器)和ROM-ReadOnlyMemory(只读存储器)两大类
RAM掉电数据就会丢失,但是访问的速度较快,常见比如计算机的内存
ROM掉电数据不丢失

RAM又可分为SRAM-Static RAM和DRAM-DynamicRAM
SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲
DRAM分为EDORAM、SDRAM、DDR RAM、RDRAM等,DRAM访问的速度慢于SRAM,但是价格便宜很多,计算机内存就是DRAM
而通常所说的SDRAM 是DRAM 的一种,它是同步动态存储器,利用一个单一的系统时钟同步所有的地址数据和控制信号。使用SDRAM不但能提高系统表现,还能简化设计、提供高速的数据传输。在嵌入式系统中经常使用。
Flash也是一种非易失型存储器,它擦写方便,访问速度快,已大大取代了传统的EPROM的地位。由于它具有和ROM一样掉电不会丢失的特性,因 此很多人称其为Flash ROM。FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦出可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据,U盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储bootloader以及操作系统或者程序代码或者直接当硬盘使(U盘)。
目前来说主流的flash分为NorFlash和NandFlash两种。NOR Flash的读取和我们常见的SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。NAND Flash没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还作上了一块小的NOR Flash来运行启动代码。
NAND是高数据存储密度的理想解决方案,NOR一般只用来存储少量的代码;NOR主要应用在代码存储介质中。NOR的特点是应用简单、无需专门的接口电路、传输效率高,它是属于芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在(NOR型)flash闪存内运行,不必再把代码读到系统RAM中。在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。NOR flash占据了容量为1~16MB闪存市场的大部分。NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口。
Nor Flash有自己的地址线和数据线,可以采用类似于memory的随机访问方式,在Nor Flash上可以直接运行程序,所以Nor Flash可以直接用来做boot,采用Nor Flash启动的时候会把地址映射到0x00上。
Nand Flash是IO设备,数据、地址、控制线都是共用的,需要软件区控制读取时序,所以不能像Nor Flash、内存一样随机访问,不能EIP(片上运行),因此不能直接作为boot。

Nand Flash:适合大容量数据存储,类似硬盘;
Nor Flash:适合小容量的程序或数据存储,类似小硬盘;
SDRAM:主要用于程序执行时的程序存储、执行或计算,类似内存,主要应用于嵌入式系统中。
SRAM :主要应用于计算机缓存;
DRAM :主要应用于计算机内存;

2、ARM启动
不论是arm的何种处理器,其都是从0x0000 0000地址处开始执行程序的!

启动流程

本文主要针对2440进行分析,不同的处理器的方式并不一定相同,但是大致的流程都相似
首先看下芯片手册上芯片支持的几种确定方式(一般都是由硬件决定启动方式,具体参照各个芯片的手册!)
2440支持的启动方式如下:
在这里插入图片描述
可见,支持2种模式。NandFlash和非NandFlash(这里是norflash,几乎所有的嵌入式设备都支持的启动方式! )

地址布局如下:
在这里插入图片描述
从图中可以看出左边是norflash启动的地址布局,右边是nandflash启动的地址布局。
回顾上述关于存储器的知识,可以看出如果启动模式是选择从norflash启动的话,直接通过存储控制器将外部norflash的地址映射到0地址处,即可完成启动。如果是从nandflash启动的话,由于nandflash是无法运行程序的,因此处理器内部集成了4k的片内ram,也称为BootSRAM(又叫做stepping stone垫脚石),设备启动后,发现是nandflash的启动模式,首先硬件会自动把nandflash的前4K数据copy到片内ram,然后在运行boot代码。(nandflash的首页是不会有坏块的!)

处理器启动后,就这样一步步的跳转到boot!

附:由于各个soc设计上的不同,不同的处理器启动方式不完全相同!由于2440年代较早,启动模式较单一,读者在做开发时,仔细研读芯片手册为主要手段!虽然设备一般都支持从nandflash启动,但nand的坏块率较高,从可靠性上考虑,尽管norflash价格较贵,一般的嵌入式的设备都会选择从norflash来做启动。
设备跳转到uboot之后的事情,下次在分享

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章