uboot启动流程——uboot1.1.6 for smdk6410 with nand

本文详细介绍了S3C6410处理器的uboot启动流程,从ARM启动地址、Stepping Stone到uboot的三个阶段,包括MMU的页表定义和使能,以及在不同阶段的主要任务,如初始化UART、NAND和DRAM,最终进入main_loop。
摘要由CSDN通过智能技术生成

简介

  • 不同平台uboot启动流程不一样,但是基本思想是一致的

  • 从更高的视角去理解,无须拘泥与具体细节(例如寄存器细节,写代码的时候再查手册,写完就可以忘记了)

1)S3C6410 地址布局

​​在这里插入图片描述
在这里插入图片描述

  • ARM 启动地址:0x0000_0000

  • Stepping Stone 起始地址:0x0c00_0000

  • DRAM 起始地址:0x5000_0000

2)S3C6410 自举流程

在这里插入图片描述
在这里插入图片描述

  1. nand前8K地址中保存了uboot的一部分代码

  2. IROM(BL0)读取nand前8K数据到Stepping Stone

  3. ”Stepping Stone 地址“ 映射到 “ARM 启动地址”, BL0跳转到“ARM 启动地址”

  4. 此时开始运行uboot代码

3)uboot第一阶段——cpu/…/start.S & board/…/lowlevel_init.S

  1. 初始化的异常向量表

  2. 设置为SVC32模式——start.S/reset

  3. 初始CPU寄存器——start.S/cpu_init_crit

  4. 关闭wathdog,关闭可屏蔽中断,简单重置可屏蔽中断——lowlevel_init.S/lowlevel_init

  5. 初始化系统时钟——lowlevel_init.S/system_close_init,此后JTAG使能,可以用JLINK调试

  6. 初始化uart——lowlevel_init.S/uart_asm_init,此后可以通过串口调试工具查看输出

  7. 初始化nand——lowlevel_init.S/nand_asm_init

  8. 初始化dram——lowlevel_init.S/mem_ctrl_asm_init

  9. 判断是否需要从nand中copy更多代码,copy函数为——start.S/copy_from_nand

  10. 使能MMU——start.S/enable_mmu

  11. 初始化stack——start.S/stack_setup

  12. 初始化bss——start.S/clear_bss

  13. 完成第一阶段,跳转到start_armboot

3.1)uboot第一阶段细节补充——MMU页表定义

	/* form a first-level section entry */
.macro FL_SECTION_ENTRY base,ap,d,c,b
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值