嵌入式学习-uboot-lesson3-6410uboot启动流程分析

来源:互联网 发布:数据库原理精品课程 编辑:程序博客网 时间:2024/05/28 17:06

主要分为:
一.6410启动方式
二.6410地址布局
三.6410启动流程
四.uboot分析


一.6410启动方式

根据下图可以看到支持的启动方式有:
1.SROM(NORFLASH)
2.oneNAND 一种特殊的NANDFlash(既具有norflash特性也具有nandFlash的特性)
3.MODEN
4.IROM(intern rom)下分为SD和NANDFlash启动

通过配置引脚,从而选择不同的启动方式

这里写图片描述


二.6410地址布局

这里写图片描述

从上图可以看到6410的iROM 和 Stepping Stone的地址,6410的内存是从0x50000000开始的

众所周知,启动的时候都是从0地址开始的,但是看上面的图,MIRRORED REGION 镜像区域,也就是,如果选择irom启动方式,则启动的时候,则将irom地址空间里面的内容映射到0地址去,根据不同的选择,镜像区域映射不同的设备。


三.6410启动流程

在S3C6410_Internal_ROM_Booting.pdf中,
这里写图片描述

上电之后,整个启动流程分为三个部分:
第一部分:irom被映射到0地址处,然后运行iROM里面的数据,
irom里面存放着芯片厂商相关的程序(包括把设备device里面的BL1拷贝到垫脚石中)和信息,称之为BL0,即bootloader0
第二部分:把bootloader放到垫脚石去运行,称为BL1
第三部分:若bootloader大于8KB,则BL1会把大于8KB部分的bootloader(BL2)放入内存中


四.uboot分析

uboot的主要分为 第一阶段程序 和 第二阶段程序 ,第一阶段程序主要是采用汇编指令编写的,第二阶段程序主要是采用C编写的

1.程序入口

通过查Makefile看相对应的开发板的硬件平台,
如下:
这里写图片描述
smdk6410代表了相关文件存放的目录的名字,

2.然后进入/uboot/board/samsung/smdk6410目录

如下:
这里写图片描述

3.然后打开链接器脚本 uboot.lds查看来观察:

这里写图片描述
在代码段最前的是 cpu/s3c64xx/start.o这个目标文件,也就是cpu/s3c64xx/目录下start.s这个文件会最先运行
在链接器脚本中上方有ENTRY(_start) 这句话,代表_start为整个程序的入口
也就是在start.s中 _start是最先被运行的

4.打开start.s

这里写图片描述

5.第1阶段程序分析

5.1设置中断向量表

在start.s开始的位置,看其描述部分可知其功能是中断向量表
这里写图片描述
然后查看代码
这里写图片描述
可以知道,第一步是跳转到reset部分去,然后转到reset部分,可以看到其第一部分为 set the CPU to SVC32 模式
这里写图片描述

5.2 设置处理器为SVC模式

继续往下查看
这里写图片描述

5.3刷新IDcache

继续查看
这里写图片描述

5.4关闭MMU和cache

这里写图片描述

5.5外设基地址的初始化

这里写图片描述
继续查看,下一步是ONENAND的初始化,但是6410并没有选择onenand,因此跳过
继续往下查看
这里写图片描述
上图说明要跳转到lowlevel_init去
这里写图片描述
打开smdk6410目录里面的lowlevel_init.s
这里写图片描述

5.6点亮led

这里写图片描述

5.7关闭看门狗

5.8关闭所有中断

5.9初始化时钟

5.10初始化串口

这里写图片描述

5.11nand flash简单的初始化

这里写图片描述

5.12初始化内存

然后返回start.s继续往下查看
这里写图片描述
6410是从NAND falsh启动的
copy_from_nand 把bootloader复制到内存中去

5.13 复制nand flash中的bootloader到内存中

这里写图片描述
没有用MMU,因此不用
这里写图片描述

5.14设置堆栈

这里写图片描述

5.15清除bss段

然后ldr pc, _start_armboot代表绝对跳转到_start_armboot地方去

6.第2阶段程序分析

start_armboot 在/lib_arm/board.c中
打开board.c
这里写图片描述
可以看到init_sequence这个指针,并且指针循环进行调用,跳转到指针处
这里写图片描述
可以看到,进行了一系列的初始化,而关于硬件方面的初始化时串口的初始化

6.1串口初始化

这里写图片描述

6.2lcd初始化

这里写图片描述

6.3网卡初始化

6.4led初始化

最后进入循环 main_loop 其主要作用是,在控制台上对用户输入的命令进行解析
这里写图片描述

关于start.S更详细的分析,请参考:

uboot start.s分析

菜鸟一枚,如有错误,多多指教。。。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 战士10穿不进去怎么办 脚上皮肤干燥起皮怎么办 脚趾头冻了很痒怎么办 大脚趾里面有脓怎么办 大脚趾肉肿了怎么办 大脚趾边上肿了怎么办 大母脚趾关节疼怎么办 大脚趾有点歪了怎么办 大脚趾扭伤肿了怎么办 大脚趾外翻怎么办 知乎 颈椎带着胳膊疼怎么办 胳膊酸困无力是怎么办 腰疼引起的腿麻怎么办 手臂到手指麻痛怎么办 拔完智齿特别疼怎么办 躺着胃烧的难受怎么办 喝酒胃烧的难受怎么办 舌头破了特别疼怎么办 舌头又厚又大怎么办 牙齿咬到舌头了怎么办 舌头起了好多泡怎么办 舌头尖起泡很痛怎么办 舌头上起泡怎么办很疼 月经来了二十多天还不干净怎么办 三岁宝宝缺锌怎么办 无舌苔,舌头很红怎么办 嘴唇上肿了一块怎么办 下嘴唇突然肿了怎么办 上嘴唇突然肿厚怎么办 舌尖上火了好疼怎么办 舌头针扎似的疼怎么办 手麻了怎么办小妙招 月子生气奶少了怎么办 颈椎会引起脸麻怎么办 脑梗引起的手麻怎么办 着凉引起的腰疼怎么办 受凉引起的腰疼怎么办 着凉了腰疼厉害怎么办 腰疼压迫神经腿麻木怎么办 运动后小腿变粗怎么办 跑步后小腿变粗怎么办