




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、BootLoader,第5章,本章结构,5-1 BootLoader 的概念,Boot Loader 就是在操作系统内核运行之前运行的一段小程序 目的:为最终调用操作系统内核准备好正确的环境 初始化硬件设备 建立内存空间的映射图 特点: Boot Loader 是严重地依赖于硬件而实现的 因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念来,以指导用户特定的 Boot Loader 设计与实现。,5-1-1BootLoader操作模式,大多数 Boot Loader 都包含两种不同的操作模式: 启动
2、加载(Boot loading)模式:这种模式也称为自主(Autonomous)模式。也即 Boot Loader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。这种模式是 Boot Loader 的正常工作模式,因此在嵌入式产品发布的时侯,Boot Loader 显然必须工作在这种模式下 下载(Downloading)模式:在这种模式下,目标机上的 Boot Loader 将通过串口连接或网络连接等通信手段从主机(Host)下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被 Boot Loader 保存到目标机的 RAM 中
3、,然后再被 Boot Loader 写到目标机上的FLASH 类固态存储设备中。Boot Loader 的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用 Boot Loader 的这种工作模式。工作于这种模式下的 Boot Loader 通常都会向它的终端用户提供一个简单的命令行接口。,5-1-1BootLoader的位置,系统启动代码包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。 引导加载程序是系统加电后运行的第一段软件代码。 回忆一下 PC 的体系结构,PC 机中的引导加载程序由 BIOS(其本质就是一
4、段固件程序)和位于硬盘 MBR 中的 OS Boot Loader(比如,LILO 和 GRUB 等)一起组成 BIOS 在完成硬件检测和资源分配后,将硬盘 MBR 中的 Boot Loader 读到系统的 RAM 中,然后将控制权交给 OS Boot Loader。 Boot Loader 的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。,5-1-1BootLoader的位置,而在嵌入式系统中,通常并没有像 BIOS 那样的固件程序(注,有的嵌入式 CPU 也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由 Boot L
5、oader 来完成。 比如在一个基于 ARM的嵌入式系统中,系统在上电或复位时通常都从地址 0 x00000000 处开始执行,而在这个地址处安排的通常就是系统的 Boot Loader 程序。 嵌入式Linux系统从软件的角度看通常可以分为4个层次: 引导加载程序。 Linux 内核。 根文件系统。 用户应用程序。,5-1-2嵌入式Linux系统典型分区结构,每种不同的 CPU 体系结构都有不同的 Boot Loader。有些 Boot Loader 也支持多种体系结构的 CPU,比如 U-Boot 就同时支持 ARM 体系结构和MIPS 体系结构。 除了依赖于 CPU 的体系结构外,Boo
6、t Loader 实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU 而构建的,要想让运行在一块板子上的 Boot Loader 程序也能运行在另一块板子上,通常也都需要修改 Boot Loader 的源程序。 系统加电或复位后,所有的 CPU 通常都从某个由 CPU 制造商预先安排的地址上取指令。比如,基于 ARM 的 CPU 在复位时通常都从地址 0 x00000000 取它的第一条指令。而基于 CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM 或 FLASH 等)被映射到这个预先安排的地址上。因
7、此在系统加电后,CPU 将首先执行 Boot Loader 程序。,5-1-2BootLoader的两个阶段,BootLoader第一阶段的功能 硬件设备初始化。 为加载Bootloader的第二阶段代码准备RAM空间。 - 复制Bootloader的第二阶段代码到RAM空间中。 设置好栈。 跳转到第二阶段代码的C入口点。,5-1-2BootLoader的两个阶段,BootLoader第二阶段的功能 初始化本阶段要使用到的硬件设备。 检测系统内存映射(memory map)。 将内核映象和根文件系统映象从Flash上读到RAM空间中。 为内核设置启动参数。 调用内核。,5-1-2BootLoa
8、der与内核的交互,Bootloader与内核的交互是单向的,Bootloader将各类参数传给内核。由于它们不能同时运行,传递办法只有一个:Bootloader将参数放在某个约定的地方之后,再启动内核,内核启动后从这个地方获得参数。 标记列表 标记列表以标记ATAG_CORE开始,以标记ATAG_NONE结束。 标记的数据结构为tag,它由一个tag_header结构和一个联合(union)组成。,struct tag_header u32 size; u32 tag; ; struct tag struct tag_header hdr; union struct tag_corecore
9、; 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标志列表,设置内存标记 设置标记ATAG_NONE,params -hd
10、r.tag = ATAG_MEM; params -hdr.size = tag_size(tag_mem32); params -u.mem.start = 0 x30000000; params -u.mem.size = 0 x40000000 params = tag.next(params);,params-hdr.tag = ATAG_NONE; params-hdr.size = 0;,5-1-3常用BootLoader介绍,5-2 -1U-Boot工程简介,U-Boot,全称为Universal Boot Loader,即通用Bootloader,是遵循GPL条款的开放代码项目
11、。 “通用”有两层含义: 可以引导多种操作系统 支持多种架构的CPU。 它支持如下操作系统:Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS等 支持如下架构的CPU:PowerPC、MIPS、x86、ARM、NIOS、XScale等。 获取U-Boot源码 ,5-2-2U-Boot源码结构,U-Boot-1.1.6根目录下共有26个子目录,可以分为4类。 (1)平台相关的或开发板相关的。 (2)通用的函数。 (3)通用的设备驱动程序。 (4)U-Boot工具、示例程序、文档。 配置生成U-boot make _config make all U-Boot.
12、bin:二进制可执行文件,它就是可以直接烧入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 bootm,tftpboot loadAddress bootfilename,nfs 1oadAddresshost ip addr:bootfilename,5-2-3U-Boo
13、t的常用命令,Nand 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 n
14、ame”删除名字为name的环境变量 “saveenv”将更改后的所有环境变量写入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命令使用实例,制作内核镜像文件 烧写内核镜像文件uIma
15、ge,arm-linux-objcopy o binary R .note R .comment S vmlinux linux.bin gzip -9 linux.bin mkimage A arm O linux T kernel C gzip a 0 x30008000 e 0 x30008000 n “Linux Kernel Image” d linux.bin.gz uImage,tftp 0 x30000000 uImage 或 nfs 0 x30000000 01:/work/nfs_root/uImage nand erase 0 x0 0 x00200
16、000 nand write.jffs2 0 x30000000 0 x0 $(filesize),5-2-3U-Boot命令使用实例,烧写yaffs文件系统镜像 烧写jffs2文件系统镜像,tftp 0 x30000000 yaffs.img 或 nfs 0 x30000000 01:/ work/nfs_root/yaffs.img nand erase 0 xA00000 0 x3600000 nand write.yaffs 0 x30000000 0 xA00000 $(filesize),tftp 0 x30000000 jffs2.img 或 nfs 0 x30000000 192.168.1.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国内公路运输合同协议书
- 合同保理合同与信用证
- 国际工程法律合同管理
- 铁路房产买卖合同
- 技术软件服务合同
- 个体餐饮承包合同
- 合同管理整改措施
- 原材料购销合同书
- 产品独家代理合同
- 修建房屋如何签合同协议
- GB/T 6170-20001型六角螺母
- GB/T 32788.6-2016预浸料性能试验方法第6部分:单位面积质量的测定
- 地球概论第四章
- 食品防护、食品欺诈、过敏原管理培训测试题附答案
- 长输管道施工技术(完整版)
- (人工智能导论)课件
- 游艇理论训练考试题库600题(单选、判断题)
- 竞争性谈判二次报价单
- 危大工程巡视检查记录
- 不同时滞可燃物含水率预测模型精度的研究
- 本科大学生劳动教育理论与实践教程第二章 教学课件
评论
0/150
提交评论