第5章 BootLoader配置与移植_第1页
第5章 BootLoader配置与移植_第2页
第5章 BootLoader配置与移植_第3页
第5章 BootLoader配置与移植_第4页
第5章 BootLoader配置与移植_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 BootLoaderBootLoader第5章本章结构本章结构BootLoader简介简介 BootLoaderU-Boot分析分析BootLoader的概念的概念常用常用BootLoader介绍介绍BootLoader的结构和启动过程的结构和启动过程5-1 BootLoader 的概念的概念Boot Loader 就是在操作系统内核运行之前运行的一就是在操作系统内核运行之前运行的一段小程序段小程序目的目的:为最终调用操作系统内核准备好正确的环境为最终调用操作系统内核准备好正确的环境初始化硬件设备初始化硬件设备建立内存空间的映射图建立内存空间的映射图特点特点: Boot Loader 是严重

2、地依赖于硬件而实现的是严重地依赖于硬件而实现的因此,在嵌入式世界里建立一个通用的因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对几乎是不可能的。尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念来,以指导用户特定的归纳出一些通用的概念来,以指导用户特定的 Boot Loader 设计与实现。设计与实现。5-1-1BootLoader操作模式操作模式大多数 Boot Loader 都包含两种不同的操作模式:启动加载(启动加载(Boot loading)模式:)模式:这种模式也称为自主(Autonomous)模式。也即 Boo

3、t Loader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。这种模式是 Boot Loader 的正常工作模式,因此在嵌入式产品发布的时侯,Boot Loader 显然必须工作在这种模式下 下载(下载(Downloading)模式:)模式:在这种模式下,目标机上的 Boot Loader 将通过串口连接或网络连接等通信手段从主机(Host)下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被 Boot Loader 保存到目标机的 RAM 中,然后再被 Boot Loader 写到目标机上的FLASH 类固态存储设备中。Bo

4、ot Loader 的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用 Boot Loader 的这种工作模式。工作于这种模式下的 Boot Loader 通常都会向它的终端用户提供一个简单的命令行接口。 5-1-1BootLoader的位置的位置系统启动代码包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。引导加载程序是系统加电后运行的第一段软件代码。回忆一下 PC 的体系结构,PC 机中的引导加载程序由 BIOS(其本质就是一段固件程序)和位于硬盘 MBR 中的 OS Boot Loader(比如,LILO

5、和 GRUB 等)一起组成BIOS 在完成硬件检测和资源分配后,将硬盘 MBR 中的 Boot Loader 读到系统的 RAM 中,然后将控制权交给 OS Boot Loader。Boot Loader 的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。 5-1-1BootLoader的位置的位置而在嵌入式系统中,通常并没有像 BIOS 那样的固件程序(注,有的嵌入式 CPU 也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由 Boot Loader 来完成。比如在一个基于 ARM的嵌入式系统中,系统在上电或复位时通常都从

6、地址 0 x00000000 处开始执行,而在这个地址处安排的通常就是系统的 Boot Loader 程序。 嵌入式Linux系统从软件的角度看通常可以分为4个层次:引导加载程序。Linux 内核。根文件系统。用户应用程序。5-1-2嵌入式嵌入式Linux系统典型分区结构系统典型分区结构每种不同的 CPU 体系结构都有不同的 Boot Loader。有些 Boot Loader 也支持多种体系结构的 CPU,比如 U-Boot 就同时支持 ARM 体系结构和MIPS 体系结构。除了依赖于 CPU 的体系结构外,Boot Loader 实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两

7、块不同的嵌入式板而言,即使它们是基于同一种 CPU 而构建的,要想让运行在一块板子上的 Boot Loader 程序也能运行在另一块板子上,通常也都需要修改 Boot Loader 的源程序。 系统加电或复位后,所有的 CPU 通常都从某个由 CPU 制造商预先安排的地址上取指令。比如,基于 ARM 的 CPU 在复位时通常都从地址 0 x00000000 取它的第一条指令。而基于 CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM 或 FLASH 等)被映射到这个预先安排的地址上。因此在系统加电后,CPU 将首先执行 Boot Loader 程序。 5-1-2

8、BootLoader的两个阶段的两个阶段 BootLoader第一阶段的功能硬件设备初始化。为加载Bootloader的第二阶段代码准备RAM空间。 -复制Bootloader的第二阶段代码到RAM空间中。设置好栈。跳转到第二阶段代码的C入口点。5-1-2BootLoader的两个阶段的两个阶段 BootLoader第二阶段的功能初始化本阶段要使用到的硬件设备。检测系统内存映射(memory map)。将内核映象和根文件系统映象从Flash上读到RAM空间中。为内核设置启动参数。调用内核。5-1-2BootLoader与内核的交互与内核的交互 Bootloader与内核的交互是单向的,与内核的

9、交互是单向的,Bootloader将各类将各类参数传给内核。由于它们不能同时运行,传递办法只有参数传给内核。由于它们不能同时运行,传递办法只有一个:一个:Bootloader将参数放在某个约定的地方之后,再将参数放在某个约定的地方之后,再启动内核,内核启动后从这个地方获得参数。启动内核,内核启动后从这个地方获得参数。 标记列表标记列表以标记ATAG_CORE开始,以标记ATAG_NONE结束。 标记的数据结构为tag,它由一个tag_header结构和一个联合(union)组成。 struct tag_header u32 size;u32 tag;struct tag struct tag_

10、header hdr;union struct tag_corecore;struct tag_mem32mem;5-1-2标志列表标志列表设置标记设置标记ATAG_CORE params = (struct tag *) 0 x30000100;params -hdr.tag = ATAG_CORE;params -hdr.size = tag_size(tag_core);params-u.core.flags = 0;params-u.core.pagesize = 0;params-u.core.rootdev = 0;params = tag_next(params);5-1-2标志

11、列表标志列表设置内存标记设置内存标记设置标记设置标记ATAG_NONE params -hdr.tag = ATAG_MEM;params -hdr.size = tag_size(tag_mem32);params -u.mem.start = 0 x30000000;params -u.mem.size = 0 x40000000params = tag.next(params);params-hdr.tag = ATAG_NONE;params-hdr.size = 0;5-1-3常用常用BootLoader介绍介绍BootLoaderMonitor描述描述x86ARMPowerPCLI

12、LO否Linux磁盘引导程序是否否GRUB否GNU的LILO替代程序是否否Loadlin否从DOS引导Linux是否否ROLO否从ROM引导Linux而不需要BIOS是否否Etherboot否通过以太网启动Linux系统的固件是否否LinuxBIOS否完全替代BUIS的Linux引导程序是否否BLOB否LART等硬件平台的引导程序否是否U-boot是通用引导程序是是是RedBoot是基于eCos的引导程序是是是5-2 -1U-Boot工程简介工程简介U-Boot,全称为Universal Boot Loader,即通用Bootloader,是遵循GPL条款的开放代码项目。“通用”有两层含义:可

13、以引导多种操作系统支持多种架构的CPU。它支持如下操作系统:Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等支持如下架构的CPU:PowerPC、MIPS、x86、ARM、NIOS、XScale等。获取U-Boot源码http:/ 5-2-2U-Boot源码结构源码结构U-Boot-1.1.6根目录下共有26个子目录,可以分为4类。(1)平台相关的或开发板相关的。(2)通用的函数。(3)通用的设备驱动程序。(4)U-Boot工具、示例程序、文档。配置生成U-bootmake _configmake allU-Boot.bin:二进制可执行文件,它就是可以

14、直接烧入ROM、NOR Flash的文件。U-Boot:ELF格式的可执行文件。U-Boot.srec:Motorola S-Record格式的可执行文件。5-2-2U-Boot源码结构源码结构5-2-3U-Boot的常用命令的常用命令帮助命令help下载命令tftpboot命令使用TFTP协议从服务器下载文件nfs命令使用NFS协议下载文件help 命令名,命令名, 比如:比如: help bootmtftpboot loadAddress bootfilenamenfs 1oadAddresshost ip addr:bootfilename5-2-3U-Boot的常用命令的常用命令Nan

15、d Flash操作命令环境变量命令“nand info” 查看NAND Flash信息“nand erase clean off size”擦除NAND Flash“nand read.jffs2 addr off size”“nand write.yaffs addr off size”“nand read.yaffs addr off size”“nand write.yaffs addr off size”“printenv”命令打印全部环境变量“setenv name value”设置名字为 name的环境变量的值为value。“setenv name”删除名字为name的环境变量“s

16、aveenv”将更改后的所有环境变量写入Nand Flash中5-2-3U-Boot的常用命令的常用命令启动命令“bootm addrarg” 命令启动存放在地址adds处的U-Boot格式的映象文件“go addrarg” 启动存放在地址addr处的二进制文件“nbootloadAddr dev offset” 命令将NAND Flash设备dev上偏移地址off处的映象文件复制到内存loadAddr处,然后,如果环境变量autostart的值为“yes”,就启动这个映象5-2-3U-Boot命令使用实例命令使用实例制作内核镜像文件烧写内核镜像文件uImagearm-linux-objcop

17、y o binary R .note R .comment S vmlinux linux.bingzip -9 linux.binmkimage A arm O linux T kernel C gzip a 0 x30008000 e 0 x30008000 n “Linux Kernel Image” d linux.bin.gz uImagetftp 0 x30000000 uImage 或 nfs 0 x30000000 01:/work/nfs_root/uImagenand erase 0 x0 0 x00200000nand write.jffs2 0 x

18、30000000 0 x0 $(filesize)5-2-3U-Boot命令使用实例命令使用实例烧写yaffs文件系统镜像烧写jffs2文件系统镜像tftp 0 x30000000 yaffs.img 或 nfs 0 x30000000 01:/ work/nfs_root/yaffs.imgnand erase 0 xA00000 0 x3600000nand write.yaffs 0 x30000000 0 xA00000 $(filesize)tftp 0 x30000000 jffs2.img 或 nfs 0 x30000000 01:/ work/nfs_root/jffs2.imgnand erase 0 x200000 0 x800000nand

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论