ARM裸机开发(四):bootloader的设计

来源:互联网 发布:挂办公室的油画 知乎 编辑:程序博客网 时间:2024/04/29 18:03

Part 1  ARM启动流程

一、 2440 启动

(查看s3c2440A.pdf 文档)

1   启动时的地址布局(s3c2440中搜索关键词mapping查看Nandflash memerry mapping)

image

(注:左为NorFlash启动,右为从NandFlash启动)

1.1 处理器上电后,从0地址启动。

NandFlash启动:

1.2 NandFlash不能直接参与ARM处理器的统一编址,BootSRAM(stepipng stone)为片内RAM

第一步:启动时, 处理器会把Nand flash 前4K的内容复制到BoottSRAM中,再运行BootSAM中的代码。

第二步:被复制的前4k代码除了要做初始化工作外,还需要将Nand flash中剩下的那部分BootLoader复制到内存中,4K运行完后,处理器接着执行内存中的代码。

 

二、6410启动方式

(手册S3C6410X.pdf)

搜索booting

1、 6410支持NOR Flash(已经不用)、OneNAND(兼备NAND Flash和NOR特性) 、 MODEM、IROM(包括Nand Flash以及SD卡启动方式等)中启动。

2、地址布局

3、NAND Flash启动步骤(IROM启动中的一种)

第一步:将IROM映射到镜像中

第二步:处理器从IROM中取指令(硬件厂商固化在的初始化软件BL0)

第三步:BL0将bootloaer中的前8k(BL1)复制到Stepping Stone中

第四步:前8k拷贝剩下的bootloader拷贝到SDRAM(内存)中,继续运行内存中的代码。

 

三、210 启动方式

1、地址布局

S5PV210UMREV.pdf中搜索关键词MEMORY MAP进行查看

2、NANDFLASH启动流程

(参考S5PV210_iROM_Application.pdf)

image

 

第一步:IROM中的BL0将NandFlash中的BL1(16K)拷贝到IRAM中。

第二步:由BL1将BL2拷贝到IRAM中

第三步:若BL2超出80K,则剩余部分有BL1拷贝到SRAM内存中。

 

Part3    Uboot工作流程

(以s3c2440为例)

分析方法:

第一步:找程序入口

1、首先找到顶层目录的Makefile

2、找到相应开发板的配置选项(如smdk2440_comfig)

3、根据配置项中的开发板名称,在board中找到其目录,找到相关的文件

4、打开其链接器脚本u-boot.LDS,找到程序的入口程序文件。

第二步:第一阶段代码分析(BL1)

start.S,汇编部分

(原则:只关系做了什么不关系怎么做的)

完成的工作:

1、设置中断向量表

2、设置处理器为SVC模式

3、刷新I/D CACHE

4、关闭MMU和CACHE

(lowlevel中)

5、初始化系统时钟、串口、简单初始化Nand Flash

6、内存初始化

(返回)

7、复制Nand Flash中的bootloader到内存中

8、设置堆栈(为C编程做准备)

9、清除bss段

 

(注:利用好反汇编分析代码的方法)

第三步:第二阶段代码分析(在内存中运行的代码

   原则:注重硬件初始化部分,而弱化软件初始化部分

1、初始化串口

2、LCD初始化

3、网卡初始化

4、初始化LED

5、执行用户输入的命令

0 0