u-boot的其中过程
来源:互联网 发布:号码追逐软件 编辑:程序博客网 时间:2024/05/18 20:52
U-Boot启动过程可以分成两个阶段(stage)
下面是u-boot启动过程的流程图其中左右两部分分别是启动过程的两个阶段
第一阶段(stage 1):
依赖于CPU体系结构的代码(如设备初始化代码等),一般用汇编语言来实现。主要进行以下方面的设置:设置ARM进入SVC模式、禁止IRQ和FIQ、关闭看门狗、屏蔽所有中断。设置时钟(FCLK,HCLK,PCLK)、清空I/D cache、清空TLB、禁止MMU和cache、配置内存控制器、为搬运代码做准备、搬移uboot映像到RAM中(使用copy_loop实现)、分配堆栈、清空bss段(使用clbss_l实现)。
(1)具体设置与代码实现:
ü
CPSR 寄存器(和保存它的 SPSR 寄存器)中的位分配如下:
31 30 29 28 --- 7 6 - 4 3 2 1 0
N Z C V I F M4 M3 M2 M1 M0
0 0 0 0 0 User26 模式
0 0 0 0 1 FIQ26 模式
0 0 0 1 0 IRQ26 模式
0 0 0 1 1 SVC26 模式
1 0 0 0 0 User 模式
1 0 0 0 1 FIQ 模式
1 0 0 1 0 IRQ 模式
1 1 1 0 0 1 1 SVC 模式
1 0 1 1 1 ABT 模式
1 1 0 1 1 UND 模式
要设置成SVC模式,则要将先关中断即将6位IRQ(中断),7位(快速中断)置位;
关闭看门狗、屏蔽所有中断
#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)
# if defined(CONFIG_S3C2410)
# endif
对于S3C2440和S3C2410的WTCON寄存器的[0]控制允许或禁止看门狗定时器的复位输出功能,设置为“0”禁止复位功能。通过设置INTMSK,INTSUBMSK的所有中断位即可屏蔽所有中断。
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
cpu_init_crit:
@初始化CACHES
MCR与MRC是对ARM处理器的协处理器进行操作的指令;
Invalidate ICache and DCache|SBZ|MCR p15,0,Rd,c7,c7,0
MCR p15,0,r0,c8,c7,0的操作原型如下:
Invalidate TLB(s)|SBZ|MCR p15,0,Rd,c8,c7,0
在ARM920T Technical Reference Manual(Rev 1)说明文档中,可以查到如下的信息:
注:对于第一阶段时钟初始化等在这儿不作讲解。
第二阶段(stage 2)通常用C语言来实现。
首先以start_armboot()函数为入口点,主要进行如下操作:
- u-boot的其中过程
- u-boot的配置过程
- u-boot的启动过程
- U-Boot的启动过程
- U-boot 编译学习--- U-boot 的编译链接过程
- U-Boot的启动过程源码分析
- U-Boot启动内核的过程
- U-Boot的配置、编译、连接过程
- U-Boot的配置、编译、连接过程
- U-Boot启动内核的过程
- U-Boot 1.1.6的编译过程
- U-boot的启动过程分析
- U-Boot的配置、编译、连接过程
- U-Boot启动内核的过程
- U-Boot的配置过程分析
- U-Boot的编译过程分析
- U-Boot的配置、编译、连接过程
- U-BOOT启动kernel的过程
- http 协议
- Android NDK 打印log
- ios UIScrollView 循环滑动
- vector和bitset使用例子
- 游标真的很乱
- u-boot的其中过程
- IO
- VMWare的几点使用技巧
- 今日小总结(触发器的应用与游标的创建)
- Android开发之handler(一)
- 汇编调用C语言 实现简单加法计算
- 游标的那些事(小例题)
- Android应用开发中的风格和主题(style,themes)
- C++读取配置文件