uboot分析之uboot启动过程分析

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。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值