ARM的启动方式和bootloader解析(上)

来源:互联网 发布:手机魔术软件哪些 编辑:程序博客网 时间:2024/06/10 04:36

作者:vianowu                                  

本期关键词:    NAND flash启动方式  Romboot  uboot

本期扩展关键词:NOR flash启动方式  emmc  cp15  dataflash

平台: AT91SAM9x25

之前玩的开发板是三星公司的s3c2440,但是对于NAND flashNOR flsah的启动方式也是简单的了解了一下,知道他们大致的启动区别。但是这次对于ATMAL公司的SAM9x25的板子做了一下试验,才知道了具体的一个工作原理。以下是对一段时间前认识的总结。

1.NAND flashNOR flash

相信接触过Flash的人都知道了这两个存储器的,那时候老师还告诉我们可以把NAND flash看成电脑的硬盘,把NOR flash看成电脑的内存。虽然在NAND flashNOR flash的功能支持上是对的,但是容易让我们误解NOR flash在开发板就是RAM的作用,看来断章取义不可取啊,真理果真是有时限的,也好理解牛顿的运动定律不是万能的了。

NOR flashNAND flash相比,进行读操作的效率非常高,但是擦除和写操作的效率很低,容量也比较小。前者的块大小范围为64KB ~ 128KB,而后者的块大小范围为8KB ~ 64KB,/写一个NOR flash块需要4s,而擦/写一个NAND flash块需要2ms

NOR flash的接口和RAM完全相同(即命令和数据都是采用统一的IO口),可以随意访问任意地址的数据,支持XIP,即代码可以直接NOR flash 上执行,无需复杂到内存中。而NAND flash的接口仅仅包含几个I/O引脚,需要串行访问。

2.两种Flash启动方式

三星的s3c2440主要有两种启动方式:NAND flash启动和NOR flash 启动方式。其中,采用NAND flash启动,cpu会通过内部的硬件将NAND flash开始的4KB数据复制到称为“stepingstone”的4KB的内部SRAM中(起始地址为0),然后再跳到地址0开始执行。

SAM9x25的以上两种方式,启动过程基本和s3c2440相同。不同的是,SAM9x25在内部的ROM中固化了RomBoot的程序,在选择采用NAND flash启动时,RomBoot会先对硬件环境初始化,把32KSRAM中的最大24K的代码搬运到SDRAM(我们所说的内存)。再启动bootloader对系统进行进一步的初始化。

扩展思维:

1Emmc

Emmc是目前手机运用比较多的的存储设备,Emmc的接口是接cpu的,驱动的实现方式、分区格式化、对cpu接口都和TF卡一样。对于Emmc启动方式,由于将uboot烧录到Emmc比较困难,没有合适对外接口,所以一般采用先启动sd卡再用sd卡里的uboot烧录新的ubootemmc

链接地址:http://baike.baidu.com/view/3509283.htm

2CP15

协处理器CP15总共有c0~c1516个协处理器寄存器,各自具有一定的功能定义。但总的来说,cp15主要跟以下功能有关:
A、获取device idcache type等一些CPU相关信息。
B、MMU操作。包括MMU的使能和禁止,虚拟地址到物理地址的映射机制建立
C、访问权限控制。主要用来实现安全机制和linux的写时复制(copy on write)。
D、设置时钟模式。init.SMMU_SetAsyncBusModeMMU_SetFastBusMode这两个函数

链接地址:http://blog.chinaunix.net/uid-14114479-id-3110951.html

3.AT91SAM9X25启动流程

讲到整块板的启动流程的话,那么我们就从裸板如何烧写bootloader开始说起吧。根据AT91SAM9x25 datasheet第十一章Boot Strategies可知:其引导策略主要用板上的BMS管脚脚来选择的。

如果BMS管脚电平为0,那么选择了缺省参数的启动方式,所有寄存器都处于重置状态,此引导方式多大用于以烧录bootloader程序的NOR Flash 启动。

如果BMS管脚电平为1,那么将采用固化在Rom内部的ROMBoot程序来启动,此引导方式多用于未烧录任何程序或NAND Flash启动方式。

问题一:那么Romboot做了些什么工作呢?

1.基础芯片初始化:XTal或者外部时钟频率检测;

2.尝试从外部非易失存储器检索可用代码;

3.如果没有找到可用的程序,将执行供应商提供的SAM-BA监控器(软件)。

    

上面的逻辑图在描述了Romboot基本功能的同时,也同时解释了开发商提供的用户手册的操作步骤了。具体的烧录步骤请查照“SAM9X5用户使用手册v1.3.pdf”。

问题二:那么具体的Romboot检索过程是怎么样的呢?是否可以支持从SD卡启动呢?

    答案是可以的,以下是Romboot的检索过程。其实只是上一幅逻辑图的补充而已。相应的检索顺序是SPI0SD卡,NAND flash SPI1EEPROMSAM-BA。此时的SAM-BA是通过USB接口连接的,相当于U盘里的程序。

   问题三:我们烧写程序进nandflash的时候,一定要用供应商提供的SAM-BA工具吗?或者是说我们自己用自己的程序烧写有什么要注意的呢?

仔细看datasheet可以发现,第11.4.3.1说到我们要注意地方:前面的28个字节必须是中断向量(共七个中断向量,每个指令四个字节),而且第六个向量是PC下载的偏移地址,其实就是我们要下载的程序大小(This size is the internal SRAM size minus the stack size used by the ROM Code at the end of the internal SRAM)。尽管我们可以从datasheet的首页“features”看到了“one 32-Kbyte internal SRAM”这句话,但是11.4.3.1也说了程序要小于24Kbuytes。 SAM-BA软件它知道要往第六个向量写入整个NVMnon-volatile memories)程序的大小(其实就是我们接着要说的bootloader映象的大小)。所以我们用SAM-BA烧写程序也方便些。

问题四:我们用RomBoot烧什么程序?那个程序做什么?

我们烧写的程序就是bootloader。但是有的bootloader为了更好的区分引导程序功能,又将bootloader分为一级bootloader(又叫bootstrap)和二级bootloaderU-boot)。第一阶段的bootstrap主要完成的功能是硬件初始化,加载U-bootRAM,设置堆栈,跳到第二段代码入口。第二阶段的U-boot主要完成的功能是初始化要用的硬件设备,内存映射,从Flash读取内核映像和根文件系统,设置内核启动参数,调用内核。

我们用的第一阶段的启动代码bootstrap(支持nandflash启动的)入口是crt0_gnu.s。(下)部分将开始分析crt0_gnu.s的实现功能。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 魅族手机中间的home键失灵怎么办 魅族手机突然关机开不了机了怎么办 魅蓝3s卡顿怎么办视频 魅蓝3s手机太卡怎么办 红米4x外放破音怎么办 魅族手机刷机后内存变小了怎么办 手机用久了内存越来越小怎么办魅族 贴了车膜左右后视镜反光怎么办 贴手机膜时酒精没了怎么办 魅蓝e外屏幕碎了怎么办 贴的手机膜边缘翘起来着怎么办 手机后面贴的膜都是胶怎么办 车漆外面一层保护膜被划开了怎么办 美团骑手gps信号弱时怎么办 华为荣耀4x充电插口坏了怎么办 华为畅享5s开不了机怎么办 华为梅特10忘记账号密码怎么办 华为荣耀8充电接口坏了怎么办 华为手机锁屏了自动开屏怎么办 支付宝收货地址写错了怎么办 支付宝领海报地址写错了怎么办 手机总是弹出日历已停止运行怎么办 华为mate8忘了锁屏密码怎么办 红米4a打王者卡怎么办 苹果5s软件更新密码忘记了怎么办 华为荣耀P9进水了没有声音怎么办 华为荣耀7原相机不能拍照怎么办 华为手机触屏密码忘记了怎么办 华为荣耀10屏锁密码忘了怎么办 华为手机开机卡在开机界面怎么办 苹果6s国行不能用移动4g怎么办 苹果手机32g内存不够用怎么办 华为荣耀6x忘记了密码怎么办 百度粉色衣服被洗变色了怎么办 粉色衣服放进洗衣机洗变色了怎么办 红米note5a应用锁忘了怎么办 索尼手机死机了怎么办不可拆卸电池 华为手机一直停留在开机画面怎么办 5s用11.4太卡了怎么办 华为荣耀5a手机声音小怎么办 牙签卡在手机插卡针里怎么办