同一个文件中不同阶段用1,2,3,4表示
一个阶段中有其他小阶段,加小数点表示分阶段
若这个阶段是跳到其他文件去了,那继续用1,2
首先启动
start.S(在arch/arm/cpu/arm920t/start.S)
{
1--定义中断向量处理程序标号/地址
2--定义各种内存布置地址标号
3--真正开始代码阶段
{
3.1--设置CPU模式为SVC管理模式
3.2--关闭开门狗
3.3--屏蔽全部中断
3.4--设置各种分频比(FCLK,HCLK,PCLK)
3.5--跳转到cpu_init_crit。(代码在start.S下面)
{
3.5.1--关闭数据/指令cache
3.5.2--关闭MMU cache
3.5.3--跳转到lowlevel_init。(/board/tq2440/lowlevel_init.S)
{
1--初始化刷新时序
2--跳转回去
}
3.5.4--跳转回去
}
3.6--设置RAM堆栈指针(call_board_init_f)。
3.7--跳转到board_init_f(arch/arm/lib/board.c)
{
1--设置gd地址
2--调用init_sequence函数初始化。(在本文件中)
{
这些函数一般不用修改,参数在预定义里有
arch_cpu_init
time_init
env_init
init_baudrate
console_init
}
3--设置ram相关参数,程序地址,ram地址,TLB空间等
4--取得用户栈地址,全局数据结构体地址,代码重定向地址
5--跳转回去
}
3.8--保存来自board_init_f的三个关键参数,用户栈地址,全局数据结构体地址,代码重定向地址
3.9--设置堆栈,检查是否重定位完成,没完成就正式搬家,完成就跳过。
3.10--跳转到board_init_r进入第二阶段。结束。(arch/arm/lib/board.c)
}
}