
(精)嵌入式Linux的Uboot系统启动过程.docx
59页嵌入式 Linux 的 U-boot 系统启动过程本章基于 Intel 公司的 pxa270 芯片分析 U-Boot 的工作机制,介绍了嵌入式 Linux 交叉开发工具 ELDK 表 1 常用 BootLoader 的功能说明1/59Bootloader 名是否终端监视描述x86ARMPowerPCLILO否Linux 磁盘引导程序是否否GRUB否GNU的 LILO 替代程序是否否Loadlin否从 DOS引导 Linux是否否ROLO否从 ROM引导 Linux 而不需要 BIOS是否否Etherboot否通过以太网卡启动 Linux 系统的固件是否否LinuxBIOS否完全替代 BUIS 的 Linux 引导程序是否否BLOB否LART等硬件平台的引导程序否是否U-boot是通用引导程序是是是RedBoot是基于 eCos的引导程序是是是网络启动方式这种方式开发板不需要配置较大的存储介质,跟无盘工作站有点类似但是使用这种启动方式之前,需要把 Bootloader 安装到板上的 EPROM或 者 Flash 中 Bootloader 通过以太网接口远程下载 Linux 内核映像或者文件系统第 4 章介绍的交叉开发环境就是以网络启动方式建立的这种 方式对于嵌入式系统开发来说非常重要使用这种方式也有前提条件,就是目标板有串口、以太网接口或者其他连接方式。 串口一般可以作为控制台,同时可以用来下载内核影像和 RAMDISK文件系统串口通信传输速率过低,不适合用来挂接 NFS文件系统所以以太网接口成为通用的互连设备,一般的开发板都可以配置 10M以太网 接口对于 PDA等手持设备来说,以太网的 RJ-45 接口显得大了些,而 USB接口,特别是 USB的迷你接口,尺寸非常小对于开发的嵌入式系 统,可以把 USB接口虚拟成以太网接口来通讯这种方式在开发主机和开发板两端都需要驱动程序另外,还要在服务器上配置启动相关网络服务Bootloader 下载文件一般都使用TFTP网络协议,还可以通过DHCP的方式动态配置 IP 地址DHCP/BOOTP服务为 Bootloader 分配 IP 地址,配置网络参数,然后才能够支持网络传输功能如果Bootloader可以 直接设置网络参数,就可以不使用DHCPTFTP服务为 Bootloader客户端提供文件下载功能,把内核映像和其他文件放在/tftpboot目录下这样 Bootloader可以通过简单的 TFTP协议远程下载内核映像到内存如图6.1 所示图 6.1 网络启动示意图大部分引导程序都能够支持网络启动方式。 例如:BIOS的 PXE LILO 有详细的 文档,例如 LILO 套件中附带使用手册和参考手册此外,还可以在LDP的"LILO mini-HOWTO" 中找到 LILO 的使用指南GRUB是 GNU计划的主要 bootloader GRUB最初是由 Erich Boleyn 为 GNU Mach操作系统撰写的引导程序后来有 GordonMatzigkeit 和 Okuji Yoshinori 接替 Erich 的工作,继续维护和开发 GRUB GRUB的网站 上 有对套件使用的说明文件,叫作《 GRUBmanual 》GRUB能够使用 TFTP和 BOOTP或者DHCP通过网络启动,这种功能对于系统开发过程很有用除了传统的 Linux 系统上的引导程序以外,还有其他一些引导程序,也可以支持磁盘引导启动例如: LoadLin 可以从 DOS下启动 Linux ;还有 ROLO、LinuxBIOS ,U-Boot 也支持这种功能3. Flash 启动方式大多数嵌入式系统上都使用 Flash 存储介质 Flash 有很多类型,包括 NOR Flash、NAND Flash 和其他半导体盘其中, NORFlash< 也就是线性 Flash )使用最为普遍。 NOR Flash 可以支持随机访问,所以代码是可以直接在 Flash 上执行的 Bootloader 一般是存储在 Flash 芯片上的另外,Linux 内核映像 和 RAMDISK也可以存储在 Flash 上通常需要把 Flash 分区使用,每个区的大小应该是 Flash 擦除块大小的整数倍图 6.2 是 Bootloader 和内核映像以及文件系统的分区表图 6.2 Flash 存储示意图Bootloader 一般放在 Flash 的底端或者顶端,这要根据处理器的复位向量设置要使 Bootloader 的入口位于处理器上电执 行第一条指令的位置接下来分配参数区,这里可以作为 Bootloader 的参数保存区域再下来内核映像区 Bootloader 引导 Linux 内核,就是要从这个地方把内核映像解压到RAM中去,然后跳转到内核映像入口执行然后是文件系统区如果使用Ramdisk 文件系统,则需要 Bootloader 把它解压到 RAM中如果使用 JFFS2文件系统,将直接挂接为根文件系统这两种文件系统将在第12 章详细讲解最后还可以分出一些数据区,这要根据实际需要和Flash 大小来考虑了。 这些分区是开发者定义的,Bootloader 一般直接读写对应的偏移地址到了Linux 内核空间,可以配置成MTD设备来访问Flash 分区但是,有的Bootloader 也支持分区的功能,例如:Redboot 可以创建 Flash 分区表,并且内核MTD驱动可以解读出 redboot 的分区表除了 NOR Flash,还有 NAND Flash、Compact Flash 、DiskOnChip 等这些 Flash 具有芯片价格低,存储容量大的特点但是这些芯片一般通过专用控制器的I/O 方式来访问,不能随机访问,因此引导方式跟NOR Flash 也不同在这些芯片上,需要配置专用的引导程序通常,这种引导程序起始的一段代码就把整个引导程序复制到RAM中运行,从而实现自举启动,这跟从磁盘上启动有些相似U-Boot 介绍3/59U-Boot 功能介绍PC机引导加载程序由 BIOS 和 OS BootLoader< 通常为 GRUB)组成,嵌入式系统一般没有 BIOS这样的固件程序,系统的引导加载完全由 BootLoader 完成不同的系 统, boot Loader 是不同的 Boot Loader 有许多开放源代码,但在标准 Linux 中没有,需要用户从网上下载。 BootLoader 包括 LILO、 GRUB、Loadlin 、BOLB、U-boot 、RedBoot 等多种,其中, GRUB是 LILO 的继任者,用于 PC机,Loadlin 用于从 DOS装载 Linux ; BLOB来自 LART
