精嵌入式Linux的Uboot系统启动过程Word文档下载推荐.docx

上传人:b****7 文档编号:22770406 上传时间:2023-02-05 格式:DOCX 页数:65 大小:55.80KB
下载 相关 举报
精嵌入式Linux的Uboot系统启动过程Word文档下载推荐.docx_第1页
第1页 / 共65页
精嵌入式Linux的Uboot系统启动过程Word文档下载推荐.docx_第2页
第2页 / 共65页
精嵌入式Linux的Uboot系统启动过程Word文档下载推荐.docx_第3页
第3页 / 共65页
精嵌入式Linux的Uboot系统启动过程Word文档下载推荐.docx_第4页
第4页 / 共65页
精嵌入式Linux的Uboot系统启动过程Word文档下载推荐.docx_第5页
第5页 / 共65页
点击查看更多>>
下载资源
资源描述

精嵌入式Linux的Uboot系统启动过程Word文档下载推荐.docx

《精嵌入式Linux的Uboot系统启动过程Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《精嵌入式Linux的Uboot系统启动过程Word文档下载推荐.docx(65页珍藏版)》请在冰豆网上搜索。

精嵌入式Linux的Uboot系统启动过程Word文档下载推荐.docx

是否终端监视

描 

 

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一起编译。

位图支持

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1