1. resetlinux
中断向量表函数
2. 进入resetoop
(1) 设置svc32 模式内存
(2) flash I/D cachesflash
(3)disable MMU 和 cacheit
(4)2440 没有onenand 编译
(5)bl lowlevel_init 变量
接 (5)软件
1.初始化时钟配置
2. 初始化UART,串口
3.nandflash 简单初始化
4. 判断当前uboot 是否运行在内存中,若是不是则进行内存初始化
返回 (5)后面
跳过宏定义
从NandFlash 中拷贝bootloader到内存中
设置堆栈,为C语言作准备
清除BSS段
uboot 配置编译:
make smdk2440 config
make
arm-linux-objdump -D -S uboot.bin 30000000
./dnw uboot.bin 30000000
souceinsight 高亮 shift + F8
第二部分从startarmboot开始
作两件事情:
1.硬件初始化
2.软件初始化,初始化一些环境变量
(1)初始化串口
(2)LCD 初始化
(3)初始化 网卡
(4)初始化LED
(5)main loop 最后执行用户输入命令
1.经过uboot 下面的 Makefile 找到对应的芯片的配置
2. 在 board/samsung/xxx 找到 连接器脚本 u-boot.lds
能够看到代码段的入口文件 Start.o --》 Strat.S
3. Start.S 文件在 cpu/xxxx 里面
4. 分析第一阶段(BL1)的bootloader 代码
5.有一个中断向量表,向量表最前面是 reset
6. 分析 reset 的内容
(1) svc
(2) I/D cache
(3) 关闭 MMU
(4)外侧基地址初始化 (6410独有)
(5)OneNand
(6) bl lowlevel_init (lowlevel_init.S 单独文件)
board/samsung/xxx
点亮LED,
disable watchdog 关闭全部中断 (为何2440 没有作呢?2440 在 时钟初始化函数里面作了)
返回
(7) copy from nand
(8)堆栈初始化
(9)清除bss段
进入第二阶段 BL2
210 分析过程
svc
跳转到 xxx
关闭L1
disable MMU 和cache
low level init
检查 reset状态
IO引脚初始化(恢复IO引脚为默认值)
disable watchdog
SRam SRom 初始化
时钟初始化 内存初始化
串口初始化
取消存储保护区
简单初始化NandFlash
disable ADB
返回
设置堆栈
判断当前是否在内存运行
判断从哪一种flash启动的
进入 board_init_f_nand 函数
跳转 到内存里执行 BL2
BL2 在链接器脚本里面, u-boot.lds
arch/arm/cpu/armv7