1.拿到uboot的源码之后,一般需要经过四个步骤:
(1)解压缩
(2)打补丁:patch -p? < ..补丁文件
解释:?用数字替代,表示忽略掉前几级目录。
(3)配置:因为uboot可以支持很多种芯片,需要将其配置为支持特定的芯片
解释:这一步一般就是执行make config,config是特定的一个配置文件。
(4)编译
2.在uboot下,如果想查看有哪些可用的命令,可以输入?或者输入help,然后回车即可。
若想查看某个命令的具体用法,那么输入“? 命令”即可。
3.设置uboot的bootdelay
set bootdelay 5
saveenv
reset
4.uboot的功能是为了启动内核,uboot需要从flash读取内核到内存,然后启动内核。
uboot在启动内核之前需要完成的初始化工作一般包括关闭看门狗,初始化时钟,初始化SDRAM等。
uboot在拥有基本的功能的同时还拥有网络驱动,usb驱动,烧写flash,串口驱动等等一些辅助的功能。
uboot可以理解为一个单片机程序。
5.分析uboot的组织结构,最简单的方法就是分析makefile。
make 100ask24x0_config的时候就相当于是执行makefile文件里面目标为100ask24x0_config的这条指令。
配置时执行的操作是新建了一些链接文件等。
脚本文件中:>表示新建一个文件,>>表示追加内容到一个文件。
6.生成的uboot里面,如果要查看文件存放的先后顺序,就需要去看uboot的链接文件。
链接文件中的*,一般表示所有文件的意思,比如*(.text)就表示所有文件的代码段。
7.uboot 要完成的功能:
硬件相关初始化:
关闭看门狗、初始化时钟、初始化SDRAM(设置栈、让SP指向内存中某个位置)
软件相关初始化:
从flash读出内核、启动内核
8.uboot阅读第一个文件:cpu/arm920t/start.s
uboot第一阶段:
跳转到reset第一件事情就是将CPU设置为svc32模式、关看门狗、关中断、判断SDRAM是否被初始化(判断代码的位置是否在SDRAM)、关flash、关MMU、初始化存储控制器、设置栈、初始化时钟、把uboot代码读取到RAM中、清除bss段(初始化值为0的值,比如未初始化的全局变量)、调用start_armboot。
_bss_start = .;//.表示当前地址。
判断SDRAM是否被初始化扩充说明:如果是上电运行,代码从nand flash拷贝过来,_start的地址为0,如果是用仿真器下载到SDRAM,那么_start的地址为链接地址(对应于SDRAM中的一个地址)。
判断是否从nor flash启动的方法:如果从nor flash启动,那么0地址的数据不可写(必须遵守一定的时序),如果从nand flash启动,前4KB的内容已经拷贝到SRAM中,0地址是可以写的。
uboot第二阶段:
第二阶段从start_armboot开始:
nor flash以及nand flash的初始化、环境变量(如果flash上有设置好的环境变量,那么就使用flash上设置的,否则使用默认的环境变量)、进入main_loop函数、s=getenv("bootcmd")、run_command(s,0)。
怎么读取flash中的内核以及怎么启动?
答:bootcmd环境变量中有详细的方法。读取内核:nand read.jffs2 0x30007FC0 kernel;启动内核:bootm 0x30007FC0。