微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Bootloader初识

          计算机系统从开机上电到操作系统启动需要一个引导过程,由BIOS来完成。同样,linux系统启动也离不开引导程序,负责引导的程序叫做Bootloader。Bootloader是小段程序,但是通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。

          根据体系结构,Bootloader分很多种类,比如,X86平台的LILO和GRUB;ARM处理器的armboot,vivi,常用的标准的是U-Boot;M68K平台的Redboot。由于ARM处理器应用广,所以谈到Bootloader,一般会提及U-Boot,用得比较多。

        Bootloader的启动方式:网络,flash,sd卡等。重点谈论下flash,分为nand flash,nor flash。nand flash可读可写,一般容量较大,有点像硬盘,价格贵。nor flash不可写,是rom,比如常用的spi rom,容量可以较小,价格便宜。

        nor flash可以支持随机访问,所以代码是可以直接在Flash上执行的。nand flash以I/O 方式来访问(有专制的控制器),不能随机访问,因此引导方式跟nor Flash也不同。通常,这种引导程序起始的一段代码就把整个引导程序复制到RAM 中运行。

       U-Boot是开源的,可以从网站上下载源代码

 

      源码的目录结构:    

board    平台依赖  存放电路板相关的目录文件,每一套板子对应一个目录

cpu         平台依赖    放cpu相关的目录文件,每一款cpu对应一个目录,例如:arm920t、 xscale、i386等目录cpu相关文件,其中的子目录都是以u-boot所支持cpu为名,比如有子目录arm926ejs、mips、mpc8260和nios等,每个特定的子目录中都包括cpu.c和interrupt.c和start.S。其中cpu.c初始化cpu、设置指令cache和数据cache等;interrupt.c设置系统的各种终端和异常,比如快速中断,开关中断、时钟中断、软件中断、预取中止和未定义指令等;start.S是u-boot启动时执行的第一个文件,它主要是设置系统堆栈和工作方式,为进入C程序奠定基础

common     通用          通用的多功能函数实现,如环境,命令,控制台相关的函数实现。

include        通用         头文件和开发板配置文件,所有开发板的配置文件都在configs目录下  

lib_generic    通用         通用库函数的实现

net                 通用         存放网络协议的程序

Drivers     通用     通用设备驱动程序,比如各种网卡、支持CFI的flash、串口和USB总线等

Dtt         通用    数字温度测量器或者传感器的驱动

Examples    通用    一些独立运行的应用程序的例子

Fs          通用    支持文件系统的文件,u-boot现在支持cramfs、fat、fdos、jffs2、yaffs和registerfs

lib_arm     平台依赖    存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数,如软件浮点

Lib_ppc   平台依赖  存放对PowerPC体系结构通用的文件,主要用于实现PowerPC平台通用的函数,与PowerPC体系结构相关的代码。 
Lib_i386  平台依赖  存放对X86体系结构通用的文件,主要用于实现X86平台通用的函数,与X86体系结构相关的代码

Post      通用  上电自检。

Rtc       通用  实时时钟驱动。

Tools      通用  创建S-Record格式文件和U-BOOT images的工具

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐