1:构建异常向量表
2:设置工作模式
3:关看门狗,关中断,初始化时钟
4:禁止cache,禁止mmu
5:初始化sdram,为代码搬迁做准备
6:搬迁代码
7:设置栈,清除bss段
8:进入start_armboot
1:使cache数据无效,和上面的4具体什么情况待分析????
2:为gd_t结构体分配空间
3:为bd_t结构体分配空间
4:依次执行这些函数(这些函数在另外sequence_init有说明)
cpu_init, /* 设置中断,快速中断在内存中的起始地址*/
board_init, /* basic board dependent setup */
interrupt_init, /* set up exceptions */
env_init, /* initialize environment */
init_baudrate, /* initialze baudrate settings */
serial_init, /* serial communications setup */
console_init_f, /* stage 1 init of console */
display_banner, /* say that we are here */
#if defined(CONFIG_DISPLAY_CPUINFO)
print_cpuinfo, /* display cpu info (and speed) */
#endif
#if defined(CONFIG_DISPLAY_BOARDINFO)
checkboard, /* display board info */
#endif
dram_init, /* configure available RAM banks */
display_dram_config,
5:初始化norflash
6:初始化lcd,并分配帧缓冲区
7:分配堆空间
8:初始化nandflash
9:重定向环境变量
10:从环境变量里面读取IP地址给bd_t结构体
11:从环境变量里读mac地址给bd_t结构体
12:如果有两块网卡 读取eth1addr给结构体
13:对IIC 声卡 键盘等外设进行初始化
14:初始化跳转表
15:对控制台进行初始化
16:使能中断
17:对网卡搞一些东西
18:从环境变量获取load地址
19:从环境变量获取下载文件名称,这就是为什么下载文件的时候要改名字,因为环境变量里面已经写死了
如果两个不一样,要么改环境变量,要么改文件。
20:eth_initialize(gd->bd) //待仔细看看是干什么的
21:进入main_loop;
22:main_loop里面是一些与平台无关的初始化和判断,根据是否有键按下来进入命令交互或直接根据环境变
量bootcmd的命令来引导内核。一般bootcmd为执行bootm命令。
23:bootm命令执行函数do_bootm,进行一些校验,解压,判断操作系统类型,最后跳转到do_bootm_linux函数
中,对tag进行赋值,然后跳转到linux内核。
文章评论(0条评论)
登录后参与讨论