精嵌入式Linux的Uboot系统启动过程Word文档下载推荐.docx
- 文档编号:22770406
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:65
- 大小:55.80KB
精嵌入式Linux的Uboot系统启动过程Word文档下载推荐.docx
《精嵌入式Linux的Uboot系统启动过程Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《精嵌入式Linux的Uboot系统启动过程Word文档下载推荐.docx(65页珍藏版)》请在冰豆网上搜索。
是否终端监视
描
述
x86
ARM
PowerPC
LILO
否
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可以直接设置网络参数,就可以不使用DHCP。
TFTP服务为Bootloader客户端提供文件下载功能,把内核映像和其他文件放在/tftpboot目录下。
这样Bootloader可以通过简单的TFTP协议远程下载内核映像到内存。
如图6.1所示。
图6.1网络启动示意图
大部分引导程序都能够支持网络启动方式。
例如:
BIOS的PXE(PrebootExecutionEnvironment)功能就是网络启动方式;
U-Boot也支持网络启动功能。
2.磁盘启动方式
传统的Linux系统运行在台式机或者服务器上,这些计算机一般都使用BIOS引导,并且使用磁盘作为存储介质。
如果进入BIOS设置菜单,可以探测处理器、内存、硬盘等设备,可以设置BIOS从软盘、光盘或者某块硬盘启动。
也就是说,BIOS并不直接引导操作系统。
那么在硬盘的主引导区,还需要一个Bootloader。
这个Bootloader可以从磁盘文件系统中把操作系统引导起来。
Linux传统上是通过LILO(LInuxLOader)引导的,后来又出现了GNU的软件GRUB(GRandUnifiedBootloader)。
这2种Bootloader广泛应用在X86的Linux系统上。
你的开发主机可能就使用了其中一种,熟悉它们有助于配置多种系统引导功能。
LILO软件工程是由WernerAlmesberger创建,专门为引导Linux开发的。
现在LILO的维护者是JohnCoffman,最新版本下载站点:
http:
//lilo.go.dyndns.org。
LILO有详细的文档,例如LILO套件中附带使用手册和参考手册。
此外,还可以在LDP的"
LILOmini-HOWTO"
中找到LILO的使用指南。
GRUB是GNU计划的主要bootloader。
GRUB最初是由ErichBoleyn为GNUMach操作系统撰写的引导程序。
后来有GordonMatzigkeit和OkujiYoshinori接替Erich的工作,继续维护和开发GRUB。
GRUB的网站http:
//www.gnu.org/software/grub/上有对套件使用的说明文件,叫作《GRUBmanual》。
GRUB能够使用TFTP和BOOTP或者DHCP通过网络启动,这种功能对于系统开发过程很有用。
除了传统的Linux系统上的引导程序以外,还有其他一些引导程序,也可以支持磁盘引导启动。
LoadLin可以从DOS下启动Linux;
还有ROLO、LinuxBIOS,U-Boot也支持这种功能。
3.Flash启动方式
大多数嵌入式系统上都使用Flash存储介质。
Flash有很多类型,包括NORFlash、NANDFlash和其他半导体盘。
其中,NORFlash(也就是线性Flash)使用最为普遍。
NORFlash可以支持随机访问,所以代码是可以直接在Flash上执行的。
Bootloader一般是存储在Flash芯片上的。
另外,Linux内核映像和RAMDISK也可以存储在Flash上。
通常需要把Flash分区使用,每个区的大小应该是Flash擦除块大小的整数倍。
图6.2是Bootloader和内核映像以及文件系统的分区表。
图6.2Flash存储示意图
Bootloader一般放在Flash的底端或者顶端,这要根据处理器的复位向量设置。
要使Bootloader的入口位于处理器上电执行第一条指令的位置。
接下来分配参数区,这里可以作为Bootloader的参数保存区域。
再下来内核映像区。
Bootloader引导Linux内核,就是要从这个地方把内核映像解压到RAM中去,然后跳转到内核映像入口执行。
然后是文件系统区。
如果使用Ramdisk文件系统,则需要Bootloader把它解压到RAM中。
如果使用JFFS2文件系统,将直接挂接为根文件系统。
这两种文件系统将在第12章详细讲解。
最后还可以分出一些数据区,这要根据实际需要和Flash大小来考虑了。
这些分区是开发者定义的,Bootloader一般直接读写对应的偏移地址。
到了Linux内核空间,可以配置成MTD设备来访问Flash分区。
但是,有的Bootloader也支持分区的功能,例如:
Redboot可以创建Flash分区表,并且内核MTD驱动可以解析出redboot的分区表。
除了NORFlash,还有NANDFlash、CompactFlash、DiskOnChip等。
这些Flash具有芯片价格低,存储容量大的特点。
但是这些芯片一般通过专用控制器的I/O方式来访问,不能随机访问,因此引导方式跟NORFlash也不同。
在这些芯片上,需要配置专用的引导程序。
通常,这种引导程序起始的一段代码就把整个引导程序复制到RAM中运行,从而实现自举启动,这跟从磁盘上启动有些相似。
U-Boot介绍
U-Boot功能介绍
PC机引导加载程序由BIOS和OSBootLoader(通常为GRUB)组成,嵌入式系统一般没有BIOS这样的固件程序,系统的引导加载完全由BootLoader完成。
不同的系统,bootLoader是不同的。
BootLoader有许多开放源代码,但在标准Linux中没有,需要用户从网上下载。
BootLoader包括LILO、GRUB、Loadlin、BOLB、U-boot、RedBoot等多种,其中,GRUB是LILO的继任者,用于PC机,Loadlin用于从DOS装载Linux;
BLOB来自LART(LuserAttitudeReadjustmentTool)项目,用于引导加载基于StorngARMCPU的单个主板计算机;
U-boot(Universalloader)是通用的开源引导程序,常用于基于ARM、PowerPC、MIPS构架的嵌入式Linux系统的引导,也用于NetBSD和VxWorks等多种操作系统的引导。
U-Boot支持的主要功能列出如下:
系统引导功能。
支持NFS挂载、RAMDISK系统引导压缩或非压缩形式的根文件系统。
支持NFS挂载、从Flash中引导压缩或非压缩的Linux内核。
具有强大的操作系统接口功能,可灵活设置、传递多个参数给操作系统,支持目标板环境参数的多种存储方式,如Flash、NVRAM、EEPROM。
支持CRC32校验,可校验Flash中内核、RAMDISK镜像文件是否完好。
支持串口、SDRAM、Flash、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等设备驱动。
支持上电自检功能,如:
SDRAM、Flash大小自动检测;
SDRAM故障检测;
CPU型号检测等。
U-Boot有"
启动加载"
和"
下载"
两种操作模式,启动加载模式将操作系统加载到RAM中运行。
下载模式是以某种通信方式从主机(Host)下载文件保存到目标机的RAM中,然后被U-Boot写到目标机上的FLASH中。
这种模式下还提供一个简单的命令行接口。
U-Boot初始化目标板硬件,为嵌入式操作系统提供目标板硬件配置信息,完成嵌入式操作系统装载、引导和运行的固件程序。
它能够将系统的软硬件紧密衔接在一起。
Intel基于XScale架构的pxa27XARM系列处理器,最高主频可达624MHz,加入了WirelessMMX技术,广泛应用于PDA、智能手机、PMP等产品的开发中,硬件的详细说明请参考产品手册。
ARM嵌入式系统复位后通常都从地址0x00000000开始执行,BootLoader就从这里开始。
BootLoader分为由汇编语言实现的部分(称为stage1)和用C语言实现部分(称为stage2)。
stage1的功能是硬件设备初始化、准备RAM、将C语言实现部分拷贝RAM、设置好堆栈,并跳转到C语言实现部分入口点。
stage1中的初始化过程列出如下:
(1)设置GPIO控制器,以便能控制外围设备。
(2)屏蔽所有的中断。
BootLoader的执行过程中不必响应任何中断。
(3)设置CPU时钟频率。
(4)RAM初始化。
设置系统的内存控制器等。
(5)关闭CPU内部指令/数据cache。
(6)准备stage2的ram空间,拷贝stage2到ram,设置堆栈。
堆栈设置在stage2_end-4的地方,向下增长。
(7)跳转到stage2的入口点即main函数开始执行stage2的代码。
跳转方法是使用了trampoline程序来包装了main函数,trampoline.S程序如下:
.text
.globl_trampoline
_trampoline:
blmain
/*ifmaineverreturnswejustcallitagain*/
b_trampoline
从这段代码可以看出,当从main函数中返回时,则再进入main函数。
以防止程序异常中断。
执行完stage1后系统内存布局如图1所示。
图1执行完stage1后系统内存布局图
stage2的功能是初始化硬件、检测系统内存映射(memorymap)、将kernel映像和根文件系统映像从flash上读到RAM中、设置启动参数、进入内核。
进入stage2后,程序都是c语言实现的,stage2的第一个函数为main函数。
U-Boot安装
下载和编译U-Boot源代码,方法如下:
#下载
$cd/opt/eldk/usr/src
$wgetftp:
//ftp.denx.de/pub/u-boot/u-boot-1.3.2.tar.bz2
$rm-fu-boot
$bunzip2<
u-boot-1.3.2.tar.bz2|tarxf-
$ln-su-boot-1.3.2u-boot
$cdu-boot
#编译
$makecanyonlands_config#生成配置文件
$makeall#编译
当目标板没有烧录U-Boot或其他固件时,用户可用带有BDM/JTAG接口的调试或烧录编程器(如:
BDI2000)将U-Boot烧录到目标板的Flash中,如果目标板已有一个可运行的U-Boot,可不用烧录编程器,而直接通过U-Boot的命令将U-Boot映像文件下载到Flash中。
U-Boot映像文件是特殊格式的文件,它包括创建时间、操作系统、压缩类型、映像文件类型、映像文件名和CRC32校验和等信息。
可由ELDK工具命令mkimage创建。
U-Boot命令介绍
在缺省配置下,U-Boot以交互模式运行,它在UART1端口的串行控制台上提供了简单的命令行操作,用户可用命令help查看可用的U-Boot命令,部分命令列出如下:
=>
help
'
-aliasfor'
help'
askenv-getenvironmentvariablesfromstdin
autoscr-runscriptfrommemory
base-printorsetaddressoffset
bdinfo-printBoardInfostructure
boot-bootdefault,i.e.,run'
bootcmd'
bootd-bootdefault,i.e.,run'
bootelf-BootfromanELFimageinmemory
bootm-bootapplicationimagefrommemory
bootp-bootimagevianetworkusingBootP/TFTPprotocol
bootstrap-programtheI2CbootstrapEEPROM
bootvx-BootvxWorksfromanELFimage
cmp-memorycompare
coninfo-printconsoledevicesandinformation
cp-memorycopy
crc32-checksumcalculation
date-get/set/resetdate&
time
dhcp-invokeDHCPclienttoobtainIP/bootparams
U-Boot环境变量
U-Boot环境是保存在永久存储中的一块内存,当U-Boot启动时拷贝到RAM中,存储配置系统的环境变量,并被CRC32校验和保护。
一些环境变量对U-Boot来说有特殊含义,可用这些环境变量配置U-Boot的行为。
表1说明了环境变量的功能。
表1U-Boot环境变量的说明
环境变量
功能说明
bootdelay
定义复位等待执行bootcmd变量对应命令的时间(以秒为单位)。
baudrate
定义串口控制台的波特率。
netmask
定义以太网接口的掩码。
ethaddr
定义以太网接口的MAC地址。
bootfile
用TFTP装载的映像的名字。
bootargs
定义传递给Linux内核的启动参数。
bootcmd
定义自动启动时执行的几条命令。
serverip
定义tftp服务器端的IP地址。
ipaddr
定义本地的IP地址。
autoload
如果设置为no,命令rarpb、bootp或dhcp将仅从BOOTP/DHCP服务器执行配置查找,而不使用TFTP装载任何映像。
autostart
如果设置为yes,使用命令rarpb、bootp、dhcp、tftp、disk或docb装载的映像将被命令bootm自动启动。
loadaddr
命令tftp或loads等的缺省装载地址。
U-Boot的环境变量都有缺省值,用户可以修改用于改变U-Boot的行为,环境变量存储于EEPROMakFlash这样的永久存储区。
环境变量用U-Boot命令setenv设置,一些设置样例列出如下:
setenvserverip192.168.1.151
setenvipaddr192.168.1.152
setenvrootpath"
/opt/ruiva/xscale/rootfs"
setenvbootargs"
root=/dev/nfsrwnfsroot=\$(serverip):
\$(rootpath)ip=\$(ipaddr)"
console=ttyS0,115200mem=64M#通过bootm命令传递给内核的启动参数
setenvkernel_addr30000000
setenvnfscmd"
tftp\$(kernel_addr)uImage;
bootm\$(kernel_addr)"
#将uImage下载到指定的地址
runnfscmd#运行nfscmd脚本
U-Boot脚本
U-Boot允许存储命令序列在纯文本文件中,用命令mkimage将该文件转换成脚本映像,该映像可用U-Boot命令autoscr执行。
用户需要在许多目标板上运行下面命令序列,可将该命令序列存储在一个文本文件setenv-commands中,其内容如下:
bash$catsetenv-commands
setenvloadaddr00200000
echo=====U-Bootsettings=====
setenvu-boot/tftpboot/TQM860L/u-boot.bin
setenvu-boot_addr40000000
setenvload_u-boot'
tftp${loadaddr}${u-boot}'
setenvinstall_u-boot'
protectoff${u-boot_addr}+${filesize};
era${u-boot_addr}+${filesize};
cp.setenvupdate_u-bootrunload_u-bootinstall_u-boot
echo=====LinuxKernelsettings=====
setenvbootfile/tftpboot/TQM860L/uImage
setenvkernel_addr40040000
setenvload_kernel'
tftp${loadaddr}${bootfile};
setenvinstall_kernel'
era${kernel_addr}+${filesize};
cp.b${loadaddr}${kernel_addr}${filesize}'
setenvupdate_kernelrunload_kernelinstall_kernel
echo=====Ramdisksettings=====
setenvramdisk/tftpboot/TQM860L/uRamdisk
setenvramdisk_addr40100000
setenvload_ramdisk'
tftp${loadaddr}${ramdisk};
setenvinstall_ramdisk'
era${ramdisk_addr}+${filesize};
cp.b${loadaddr}${ramdisk_addr}${filesize}'
setenvupdate_ramdiskrunload_ramdiskinstall_ramdisk
echo=====Savenewdefinitions=====
saveenv
转换成映像文件的方法列出如下:
bash$mkimage-Tscript-Cnone-n'
DemoScriptFile'
-dsetenv-commandssetenv.img
ImageName:
DemoScriptFile
Created:
MonJun613:
33:
142005
ImageType:
PowerPCLinuxScript(uncompressed)
DataSize:
1147Bytes=1.12kB=0.00MB
LoadAddress:
0x00000000
EntryPoint:
Contents:
Image0:
1139Bytes=1kB=0MB
在目标板上,用户可以像其他映像文件一样使用tftp这样的命令进行装载,然后,使用命令autoscr执行该映像,方法如下:
tftp100000/tftpboot/TQM860L/setenv.img
U-Boot单独应用程序
U-Boot允许动态装载或运行单个应用程序,该应用程序可以使用U-Boot资源,如:
控制台I/O函数、内存分配或中断服务。
编译U-Boot时,单个应用程序与U-Boot一起编译。
位图支持
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 Linux Uboot 系统启动 过程