uboot 跑起来 至少需要哪些初始化
1 stack
2 interrupt
3 DRAM
4 SP
5 GP
6 cache
7 timer
8 MMU
体系结构有关,可以打开也可以不打开。一般uboot代码很少,为了简化设计,都是不使用mmu,如果不能绕开mmu的,通过最简单的逻辑地址==物理地址映射方式就可以了。
链接 的时候会指定代码段,数据段的逻辑地址, 这个要和实际运行时候的逻辑地址一致,每个体系结构都会指定cpu上电后的第一个指令的地址,这个很关键。
所以这里MMU一般是关闭的。
9 watchdog
功能实现:Watchdog的硬件逻辑有一个超时记录功能,要求用户每隔一定的时间对其进行一定的操作,就像狗一样,要给他喂食,如果watchdog在一定的时间没收到,watchdog就认为系统出现故障,立即重启系统。
uboot只是初始化硬件资源和系统资源,完全用不到watchdog的机制,而且用watchdog的话,还要写专门的程序为其服务,也就是喂食,这多麻烦啊,所以干脆关掉。
但是也有可以打开watchdog,设置喂狗间隔是多少S(这里可以设置40S, 一般boot代码都不会跑太长时间).以此来判断uboot是否跑飞。
10 BSS
uboot执行第一阶段为什么不移动bss段到SDRAM?
bss段里面存放的是无初始值的全局变量、初始值为0的变量。也就是后面要初始化的变量,所以uboot的第一阶段不移动bss段。只需要知道bss段的地址、大小就可以了(因为内容是已知的——0)。
为什么在进入第二阶段要clear bss呢?
程序烧到存储器中后,对应的BSS那段内存中的内容就是未知的,所以我们必须的人为的把它清零。

浙公网安备 33010602011771号