记录最近调试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来验证;