嵌入式LinuxU-boot系统启动过程
本章基于Intelpost和put请求有啥区别公司的pxa270芯片分析U-Boot的工作机制,介绍了嵌入式Linux交叉开发工具ELDKEmbedded Linux Development Kit),说明配置安装U-Boot到特定主板、交叉编译调试Linux的方法,分析了U-Boot的构架。
目录
[隐藏]
1 BootLoad启动方式
o 1.1 网络启动方式
o 1.2 2.磁盘启动方式
o 1.3 3.Flash启动方式
2 U-Boot介绍
o 2.1 U-Boot功能介绍
o 2.2 U-Boot安装
o 2.3 U-Boot命令介绍
o 2.4 U-Boot环境变量
o 2.5 U-Boot脚本
o 2.6 U-Boot单独应用程序
o 2.7 位图支持
3 2 ELDK工具介绍
o 3.1 下载与编译
o 3.2 建立开发系统
o 3.3 编译安装Linux内核
o 3.4 启动嵌入式Linux
o 3.5 Flas件系统
o 3.6 根文件系统的设计与编译
o 3.7 覆盖层文件系统
o 3.8 调试
3.8.1 (1)U-Boot的调试
3.8.2 (2)Linux内核调试
3.8.3 (3)远程调试应用程序
BootLoad启动方式
Bootloader的主要功能是引导操作系统启动,开放源代码的BootLoader种类很多,常用的BootLoader的功能说明如表1 示。
1 常用BootLoader的功能说明
Bootloader
是否终端监视
   
x86
ARM
PowerPC
LILO
Linux磁盘引导程序
linux操作系统镜像
GRUB
GNULILO替代程序
Loadlin
DOS引导Linux
ROLO
ROM引导Linux而不需要BIOS
Etherboot
通过以太网卡启动Linux系统的固件
LinuxBIOS
完全替代BUISLinux引导程序
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可以 直接设置网络参数,就可以不使用DHCP
TFTP服务为Bootloader客户端提供文件下载功能,把内核映像和其他文件放在/tftpboot目录下。这样 Bootloader可以通过简单的TFTP协议远程下载内核映像到内存。如图6.1所示。
6.1 网络启动示意图
大部分引导程序都能够支持网络启动方式。例如:BIOSPXEPreboot Execution Environment)功能就是网络启动方式;U-Boot也支持网络启动功能。
2.磁盘启动方式
传统的Linux系统运行在台式机或者服务器上,这些计算机一般都使用BIOS程序设计语言三个阶段引导,并且使用磁盘作为存储介质。如果进入BIOS设置菜单,可以探 测处理器、内存、硬盘等设备,可以设置BIOS从软盘、光盘或者某块硬盘启动。也就是说,BIOS并不直接引导操作系统。那么在硬盘的主引导区,还需要一 Bootloader。这个Bootloader可以从磁盘文件系统中
把操作系统引导起来。
Linux传统上是通过LILOLInux LOader)引导的,后来又出现了GNU的软件GRUBGRand Unified Bootloader)。这2Bootloader广泛应用在X86Linux系统上。你的开发主机可能就使用了其中一种,熟悉它们有助于配置多种系 统引导功能。
LILO软件工程是由Werner Almesberger创建,专门为引导Linux开发的。现在LILO的维护者是John Coffman,最新版本下载站点:。LILO有详细的 文档,例如LILO套件中附带使用手册和参考手册。此外,还可以在LDP的"LILO mini-HOWTO"中到LILO的使用指南。
GRUBGNU计划的主要bootloaderGRUB最初是由Erich BoleynGNU Mach操作系统撰写的引导程序。后来有Gordon MatzigkeitOkuji Yoshinori接替Erich的工作,继续维护和开发GRUBGRUB的网站/software/grub/上 有对套件使用的说明文件,叫作《GRUB manual》。GRUB能够使用TFTPBOOTP或者DHCP通过网络启动,这种功能对于系统开发过程很有用。
除了传统的Linux系统上的引导程序以外,还有其他一些引导程序,也可以支持磁盘引导启动。例如:LoadLin可以从DOS下启动 Linux表达式abc10isalpha;还有ROLOLinuxBIOSU-Boot也支持这种功能。
3Flash启动方式
大多数嵌入式系统上都使用Flash存储介质。Flash有很多类型,包括NOR FlashNAND Flash和其他半导体盘。其中,NOR Flash(也就是线性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 FlashCompact FlashDiskOnChip等。这些Flash具有芯片价格低,存储容量大的特点。但是这些芯片一般通过专用控制器的I/O方式来访问,不能随机访 问,因此引导方式跟NOR Flash也不同。在这些芯片上,需要配置专用的引导程序。
通常,这种引导程序起始的一段代码就把整个引导程序复制到RAM中运行,从而实现自举启动,这 跟从磁盘上启动有些相似。
U-Boot介绍
U-Boot功能介绍
PC机引导加载程序由BIOSOS BootLoader(通常为GRUB)组成,嵌入式系统一般没有BIOS这样的固件程序,系统的引导加载完全由BootLoader完成。不同的系 统,boot Loader是不同的。Boot Loader有许多开放源代码,但在标准Linux中没有,需要用户从网上下载。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。