天天看点

uboot 引导kernel杂谈

记录最近调试uboot的心得,供后续总结!

总结:uboot 主要作用是用来引导kernel启动,传递参数给kernel。大致分为2个阶段:

第一阶段: 主要是start.S 汇编阶段,主要完成如下设定:

#1,设定cpu 中断向量表

#2,设定cpu速度,时钟以及终端

#3,初始化SDRAM(内存)

#4,将uboot第二阶段的代码从flash拷贝到sdram;

如何从flash拷贝呢?答案告诉你,由cpu 通过控制spi 控制器,设定从flash中读取数据的起始地址,最后自己

将这部分code 重定向到sdram。

#5 ,设置堆栈

第二阶段:c语言阶段,入口函数为:start_armboot,主要任务如下:

#1 初始化flash,设置系统内存

#2 初始化网络设备,显示设备

#3 将kernel,根文件系统镜像映射到RAM中(do_bootm_linux 函数来引导内核)

#4 设置kernel启动的参数

等kernel启动ok,uboot将控制权交给kernel;

ps,调试中遇到的问题

1,console没有任何打印?

检查console波特率是否设定ok,如设定ok。再检查uboot.bin的第二阶段代码是否从flash中读取到sdram;

sdram是否有初始化正确等!

2,start.S阶段的调试,通常是通过点led来验证;