Part 1 ARM启动流程
一、 2440 启动
(查看s3c2440A.pdf 文档)
1 启动时的地址布局(s3c2440中搜索关键词mapping查看Nandflash memerry mapping)
(注:左为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)
第一步: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、执行用户输入的命令