uboot源码分析(1)

1.U-Boot系统加载器

U-Boot是一个规模庞大的开源Bootloader软件,最初是由denx(www.denx.de发起。U-Boot的前身是PPCBoot,目前是SourceForge(www.sourceforge.net)的一个项目。

最初的U-Boot仅支持PowerPC架构的系统,称做PPCBoot。从0.3.2官方版本之后开始逐步支持多种架构的处理器,目前可以支持 PowerPC(MPC5xx、MPC8xx、MPC82xx、MPC7xx、MPC74xx)、ARM(ARM7、ARM9、StrongARM、 Xscale)、MIPS(4kc、5kc)、X86等处理器,支持的嵌入式操作系统有Linux、Vx-Works、NetBSD、QNX、 RTEMS、ARTOS、LynxOS等,是PowerPC、ARM9、Xscale、X86等系统通用的Boot方案。

U-Boot支持的处理器和操作系统很多,但是它对PowerPC系列处理器和Linux操作系统支持最好。U-Boot支持的功能也较多,对于嵌入式开发常用的查看、修改内存,从网络下载操作系统镜像等功能都提供了很好的支持。U-Boot的项目更新较快,支持的目标板众多,是学习底层开发很好的示例。

2.ViVi系统加载器

ViVi是韩国的mizi公司专门针对ARM9处理器设计的一款Bootloader。它的特点是操作简便,同时提供了完备的命令体系,目前在三星系列的ARM9处理器上ViVi也比较流行。

与U-Boot相比,由于ViVi支持的处理器单一,ViVi的代码也要小很多。同时,ViVi的软件架构和配置方法采用和Linux内核类似的风格,对于有过配置编译Linux内核经验的读者,ViVi更容易上手。

与其他的Bootloader一样,ViVi有两种工作模式:启动加载模式和下载模式。使用启动加载模式,在目标板上电后,ViVi会从预先配置好的Flash分区读取Linux或者其他系统的镜像并且启动系统;使用下载模式,ViVi向用户提供了一个命令行接口,通过该接口用户可以使用ViVi提供的命令。ViVi主要提供了5个命令如下:

Load:把二进制文件载入Flash或RAM。

Part:操作MTD分区信息。显示、增加、删除、复位、保存MTD分区。

Param:设置参数。

Boot:启动系统。

Flash:管理Flash,如删除Flash的数据。

与Linux内核的组织类似,ViVi的源代码主要包括arch、init、lib、drivers和include等几个目录,共200多个代码文件。各目录的具体功能请参考ViVi相关的信息。

=====================================================================》》》

=====================================================================》》》

=====================================================================》》》

 

基本目录分类:

common目录 是与体系结构无关的文件,包括实现各种命令的C语言源代码文件。

cpu目录          存放与CPU相关的文件,每种CPU需要的代码文件存放在以CPU名称命名的子目录下,arm920t存放了arm920t为内核的 CPU相关的文件。在每个特定的子目录下都包括cpu.c、interrupt.c和start.S这3个文件,这3个文件是CPU初始化以及配置中断的代码。U-Boot自带了很多CPU相关的代码,用户可以在现有CPU支持的基础上修改自己所需要的配置。

通用设备的驱动程序存放在drivers目录下。U-Boot自带了许多设备的驱动,包括显示芯片、网络接口控制器、USB控制器、I2C器件等,对于大多数用户而言已经够用,用户也可以按照自己的需求增加或者修改设备驱动。

fs                    存放支持的文件系统代码,U-Boot目前支持cramfs、ext2、fat、jffs、reiserfs、yaffs等多种常见的文件系统。

net目录         是与网络协议有关的代码,比如BOOTP协议、TFTP协议、RARP协议等。

post               存放与硬件自检有关的代码。

rtc目录          存放与硬件实时时钟相关的代码。

tools目录      存放U-Boot编译过程中用到的一些工具代码。  // 例如:mkimage

==========================================





hao:
start_armboot => bootm.c
向量表在_start开始阶段已经汇编搞定。

其实主要就是个寄存器和内存的基本处理。

===》》》
列出了U-Boot在ARM处理器启动过程中的几个关键点,
从图中看出U-Boot的启动代码分布在start.S、low_level_init.S、 board.c和main.c文件中。

start.S                    是U-Boot整个程序的入口,该文件使用汇编语言编写,不同体系结构的启动代码是不同 的;

low_level_init.S   特定开发板的设置代码

board.c                  包含开发板底层设备驱动

main.c是一个与平台无关的代码,U- Boot应用程序的入口在此文件中


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值