(精)嵌入式Linux的Uboot系统启动过程_第1页
(精)嵌入式Linux的Uboot系统启动过程_第2页
(精)嵌入式Linux的Uboot系统启动过程_第3页
(精)嵌入式Linux的Uboot系统启动过程_第4页
(精)嵌入式Linux的Uboot系统启动过程_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式Linux的U-boot系统启动过程本章鉴于Intel企业的pxa270芯片剖析U-Boot的工作体制,介绍了嵌入式Linux交错开发工具ELDKEmbeddedLinuxDevelopmentKit),说明配置安装U-Boot到特定主板、交错编译调试Linux的方法,剖析了U-Boot的构架。目录隐蔽1BootLoad启动方式1.1网络启动方式1.22磁盘启动方式1.33Flash启动方式2U-Boot介绍2.1U-Boot功能介绍2.2U-Boot安装2.3U-Boot命令介绍2.4U-Boot环境变量2.5U-Boot脚本2.6U-Boot独自应用程序2.7位图支持32ELDK工具

2、介绍3.1下载与编译3.2成立开发系统3.3编译安装Linux内核3.4启动嵌入式Linux3.5Flash文件系统3.6根文件系统的设计与编译3.7覆盖层文件系统o3.8调试1)U-Boot的调试2)Linux内核调试3)远程调试应用程序BootLoad启动方式Bootloader的主要功能是指引操作系统启动,开放源代码的BootLoader种类好多,常用的BootLoader的功能说明如表1所示。表1常用BootLoader的功能说明1/59Bootloader名能否终端监督描述x86ARMPowerPCLILO否Linux磁盘指引程序是否否GRUB否GNU的LILO代替程序是否否Load

3、lin否从DOS指引Linux是否否ROLO否从ROM指引Linux而不需要BIOS是否否Etherboot否经过以太网卡启动Linux系统的固件是否否LinuxBIOS否完整代替BUIS的Linux指引程序是否否BLOB否LART等硬件平台的指引程序否是否U-boot是通用指引程序是是是RedBoot是鉴于eCos的指引程序是是是网络启动方式这类方式开发板不需要配置较大的储存介质,跟无盘工作站有点近似。可是使用这类启动方式以前,需要把Bootloader安装到板上的EPROM或许Flash中。Bootloader经过以太网接口远程下载Linux内核映像或许文件系统。第4章介绍的交错开发环境就

4、是以网络启动方式成立的。这类方式关于嵌入式系统开发来说特别重要。使用这类方式也有前提条件,就是目标板有串口、以太网接口或许其余连结方式。串口一般能够作为控制台,同时能够用来下载内核影像和RAMDISK文件系统。串口通信传输速率过低,不适适用来挂接NFS文件系统。所以以太网接口成为通用的互连设施,一般的开发板都能够配置10M以太网接口。关于PDA等手持设施来说,以太网的RJ-45接口显得大了些,而USB接口,特别是USB的迷你接口,尺寸特别小。关于开发的嵌入式系统,能够把USB接口虚构成以太网接口来通信。这类方式在开发主机和开发板两头都需要驱动程序。此外,还要在服务器上配置启动有关网络服务。Bo

5、otloader下载文件一般都使用TFTP网络协议,还能够经过DHCP的方式动向配置IP地点。DHCP/BOOTP服务为Bootloader分派IP地点,配置网络参数,而后才能够支持网络传输功能。假如Bootloader能够直接设置网络参数,就能够不使用DHCP。TFTP服务为Bootloader客户端供给文件下载功能,把内核映像和其余文件放在/tftpboot目录下。这样Bootloader能够经过简单的TFTP协议远程下载内核映像到内存。如图6.1所示。图6.1网络启动表示图大多半指引程序都能够支持网络启动方式。比如:BIOS的PXEPrebootExecutionEnvironment)

6、功能就是网络启动方式;U-Boot也支持网络启动功能。2磁盘启动方式传统的Linux系统运转在台式机或许服务器上,这些计算机一般都使用BIOS指引,而且使用磁盘作为储存介质。假如进入BIOS设置菜单,能够探测办理器、内存、硬盘等设施,能够设置BIOS从软盘、光盘或许某块硬盘启动。也就是说,BIOS并不直接指引操作系统。那么在硬盘的主指引区,还需要一个Bootloader。这个Bootloader能够从磁盘文件系统中把操作系统指引起来。Linux传统上是经过LILOLInuxLOader)指引的,以后又出现了GNU的软件GRUBGRandUnifiedBootloader)。这2种Bootloa

7、der宽泛应用在X86的Linux系统上。你的开发主机可能就使用了此中一种,熟习它们有助于配置多种系统指引功能。2/59LILO软件工程是由WernerAlmesberger创立,特意为指引Linux开发的。此刻LILO的保护者是JohnCoffman,最新版本下载站点:。LILO有详尽的文档,比如LILO套件中附带使用手册和参照手册。别的,还能够在LDP的LILOmini-HOWTO中找到LILO的使用指南。GRUB是GNU计划的主要bootloader。GRUB最先是由ErichBoleyn为GNUMach操作系统撰写的指引程序。以后有GordonMatzigkeit和OkujiYoshi

8、nori接替Erich的工作,持续保护和开发GRUB。GRUB的网站上有对套件使用的说明文件,叫作GRUBmanual。GRUB能够使用TFTP和BOOTP或许DHCP经过网络启动,这类功能关于系统开发过程很实用。除了传统的Linux系统上的指引程序之外,还有其余一些指引程序,也能够支持磁盘指引启动。比如:LoadLin能够从DOS下启动Linux;还有ROLO、LinuxBIOS,U-Boot也支持这类功能。3Flash启动方式大多半嵌入式系统上都使用Flash储存介质。Flash有好多种类,包含NORFlash、NANDFlash和其余半导体盘。此中,NORFlash也就是线性Flash)

9、使用最为广泛。NORFlash能够支持随机接见,所以代码是能够直接在Flash上履行的。Bootloader一般是储存在Flash芯片上的。此外,Linux内核映像和RAMDISK也能够储存在Flash上。往常需要把Flash分区使用,每个区的大小应当是Flash擦除块大小的整数倍。图6.2是Bootloader和内核映像以及文件系统的分区表。图6.2Flash储存表示图Bootloader一般放在Flash的底端或许顶端,这要依据办理器的复位向量设置。要使Bootloader的进口位于办理器上电履行第一条指令的地点。接下来分派参数区,这里能够作为Bootloader的参数保存地区。再下来内核

10、映像区。Bootloader指引Linux内核,就是要从这个地方把内核映像解压到RAM中去,而后跳转到内核映像进口执行。而后是文件系统区。假如使用Ramdisk文件系统,则需要Bootloader把它解压到RAM中。假如使用JFFS2文件系统,将直接挂接为根文件系统。这两种文件系统将在第12章详尽解说。最后还能够分出一些数据区,这要依据实质需要和Flash大小来考虑了。这些分区是开发者定义的,Bootloader一般直接读写对应的偏移地点。到了Linux内核空间,能够配置成MTD设施来接见Flash分区。可是,有的Bootloader也支持分区的功能,比如:Redboot能够创立Flash分区

11、表,而且内核MTD驱动能够解读出redboot的分区表。除了NORFlash,还有NANDFlash、CompactFlash、DiskOnChip等。这些Flash拥有芯片价钱低,储存容量大的特色。可是这些芯片一般经过专用控制器的I/O方式来接见,不可以随机访问,所以指引方式跟NORFlash也不一样。在这些芯片上,需要配置专用的指引程序。往常,这类指引程序开端的一段代码就把整个指引程序复制到RAM中运转,进而实现自举启动,这跟从磁盘上启动有些相像。U-Boot介绍3/59U-Boot功能介绍PC机指引加载程序由BIOS和OSBootLoader往常为GRUB)构成,嵌入式系一致般没有BIO

12、S这样的固件程序,系统的指引加载完整由BootLoader达成。不一样的系统,bootLoader是不一样的。BootLoader有很多开放源代码,但在标准Linux中没有,需要用户从网上下载。BootLoader包含LILO、GRUB、Loadlin、BOLB、U-boot、RedBoot等多种,此中,GRUB是LILO的继任者,用于PC机,Loadlin用于从DOS装载Linux;BLOB来自LARTLuserAttitudeReadjustmentTool)工程,用于指引加载鉴于StorngARMCPU的单个主板计算机;U-bootUniversalloader)是通用的开源指引程序,常

13、用于鉴于ARM、PowerPC、MIPS构架的嵌入式Linux系统的指引,也用于NetBSD和VxWorks等多种操作系统的指引。U-Boot支持的主要功能列出以下:系统指引功能。支持NFS挂载、RAMDISK系统指引压缩或非压缩形式的根文件系统。支持NFS挂载、从Flash中指引压缩或非压缩的Linux内核。拥有强盛的操作系统接口功能,可灵巧设置、传达多个参数给操作系统,支持目标板环境参数的多种储存方式,如Flash、NVRAM、EEPROM。支持CRC32校验,可校验Flash中内核、RAMDISK镜像文件能否完满。支持串口、SDRAM、Flash、以太网、LCD、NVRAM、EEPROM

14、、键盘、USB、PCMCIA、PCI、RTC等设施驱动。支持上电自检功能,如:SDRAM、Flash大小自动检测;SDRAM故障检测;CPU型号检测等。U-Boot有启动加载和下载两种操作模式,启动加载模式将操作系统加载到RAM中运转。下载模式是以某种通信方式从主机Host)下载文件保存到目标机的RAM中,而后被U-Boot写到目标机上的FLASH中。这类模式下还供给一个简单的命令行接口。U-Boot初始化目标板硬件,为嵌入式操作系统供给目标板硬件配置信息,达成嵌入式操作系统装载、指引和运转的固件程序。它能够将系统的软硬件密切连接在一同。Intel鉴于XScale架构的pxa27XARM系列办

15、理器,最高主频可达624MHz,加入了WirelessMMX技术,宽泛应用于PDA、智能手机、PMP等产品的开发中,硬件的详尽说明请参照产品手册。ARM嵌入式系统复位后往常都从地点0 x00000000开始履行,BootLoader就从这里开始。BootLoader分为由汇编语言实现的部分。stage1的功能是硬件设施初始化、准备RAM、将C语言实现部分拷贝RAM、设置好货仓,并跳转到C语言实现部分进口点。stage1中的初始化过程列出如下:1)设置GPIO控制器,以便能控制外头设施。4/592)障蔽全部的中止。BootLoader的履行过程中不用响应任何中止。3)设置CPU时钟频次。4)RA

16、M初始化。设置系统的内存控制器等。5)封闭CPU内部指令数据cache。6)准备stage2的ram空间,拷贝stage2到ram,设置货仓。货仓设置在stage2_end-4的地方,向下增加。、将kernel映像和根文件系统映像从flash上读到RAM中、设置启动参数、进入内核。进入stage2后,程序都是c语言实现的,stage2的第一个函数为main函数。U-Boot安装下载和编译U-Boot源代码,方法以下:#下载$cd/opt/eldk/usr/src$wget$rm-fu-boot$bunzip2|tarxf-$ln-su-boot6/59$cdu-boot#编译$makecany

17、onlands_config#生成配置文件$makeall#编译当目标板没有烧录U-Boot或其余固件时,用户可用带有BDM/JTAG接口的调试或烧录编程器help-aliasforhelpaskenv-getenvironmentvariablesfromstdinautoscr-runscriptfrommemorybase-printorsetaddressoffsetbdinfo-printBoardInfostructureboot-bootdefault,i.e.,runbootcmdbootd-bootdefault,i.e.,runbootcmdbootelf-Bootfrom

18、anELFimageinmemorybootm-bootapplicationimagefrommemorybootp-bootimagevianetworkusingBootP/TFTPprotocolbootstrap-programtheI2CbootstrapEEPROMbootvx-BootvxWorksfromanELFimagecmp-memorycompare7/59coninfo-printconsoledevicesandinformationcp-memorycopycrc32-checksumcalculationdate-get/set/resetdate&timed

19、hcp-invokeDHCPclienttoobtainIP/bootparamsU-Boot环境变量U-Boot环境是保存在永远储存中的一块内存,当U-Boot启动时拷贝到RAM中,储存配置系统的环境变量,并被CRC32校验和保护。一些环境变量对U-Boot来说有特别含义,可用这些环境变量配置U-Boot的行为。表1说了然环境变量的功能。表1U-Boot环境变量的说明环境变量功能说明bootdelay定义复位等候履行bootcmd变量对应命令的时间setenvserverip=setenvipaddr=setenvrootpath/opt/ruiva/xscale/rootfs=setenv

20、bootargsroot=/dev/nfsrwnfsroot=$(serverip:$(rootpathip=$(ipaddrconsole=ttyS0,115200mem=64M#经过bootm命令传达给内核的启动参数=setenvkernel_addr30000000=setenvnfscmdtftp$(kernel_addruImage。bootm$(kernel_addr#将uImage下载到指定的地点=runnfscmd#运转nfscmd脚本8/59U-Boot脚本U-Boot同意储存命令序列在纯文本文件中,用命令mkimage将该文件变换成脚本映像,该映像可用U-Boot命令aut

21、oscr执行。比如:用户需要在很多目标板上运转下边命令序列,可将该命令序列储存在一个文本文件setenv-commands中,其内容以下:bash$catsetenv-commandssetenvloadaddr00200000echo=U-Bootsettings=setenvu-boot/tftpboot/TQM860L/u-boot.binsetenvu-boot_addr40000000setenvload_u-boottftp$loadaddr$u-bootsetenvinstall_u-bootprotectoff$u-boot_addr+$filesize。era$u-boot_

22、addr+$filesize。cp.setenvupdate_u-bootrunload_u-bootinstall_u-bootecho=LinuxKernelsettings=setenvbootfile/tftpboot/TQM860L/uImagesetenvkernel_addr40040000setenvload_kerneltftp$loadaddr$bootfile。setenvinstall_kernelera$kernel_addr+$filesize。cp.b$loadaddr$kernel_addr$filesizesetenvupdate_kernelrunload_

23、kernelinstall_kernelecho=Ramdisksettings=setenvramdisk/tftpboot/TQM860L/uRamdisksetenvramdisk_addr40100000setenvload_ramdisktftp$loadaddr$ramdisk。setenvinstall_ramdiskera$ramdisk_addr+$filesize。cp.b$loadaddr$ramdisk_addr$filesizesetenvupdate_ramdiskrunload_ramdiskinstall_ramdiskecho=Savenewdefinitio

24、ns=9/59saveenv变换成映像文件的方法列出以下:bash$mkimage-Tscript-Cnone-nDemoScriptFile-dsetenv-commandssetenv.imgImageName:DemoScriptFileCreated:MonJun613:33:142005ImageType:PowerPCLinuxScript(uncompressedDataSize:1147Bytes=1.12kB=0.00MBLoadAddress:0 x00000000EntryPoint:0 x00000000Contents:Image0:1139Bytes=1kB=0MB

25、在目标板上,用户能够像其余映像文件相同使用tftp这样的命令进行装载,而后,使用命令autoscr履行该映像,方法如下:=tftp100000/tftpboot/TQM860L/setenv.imgU-Boot独自应用程序U-Boot同意动向装载或运转单个应用程序,该应用程序能够使用U-Boot资源,如:控制台I/O函数、内存分派或中止服务。编译U-Boot时,单个应用程序与U-Boot一同编译。位图支持经过增添CFG_CMD_BMP选项到CONFIG_COMMAND命令选项,能够在U-Boot中翻开位图支持,这将增添命令bmp到U-Boot配置的命令列表中。命令bmp能够在屏幕上显示图像。图

26、像传递与显示的命令列出以下:=tftp100000/tftpboot/LWMON/denk_startup.bmpTFTPfromserver。ourIPaddressisFilename/tftpboot/LWMON/denk_startup.bmp.Loadaddress:0 x10000010/59Loading:#doneBytestransferred=308278(4b436hex=bmpinfo100000Imagesize:640 x480Bitsperpixel:8Compression:0=bmpdisplay100000很多用户希望在系统启动过程tftp100000/tf

27、tpboot/denx_startup.bmpTFTPfromserver。ourIPaddressisFilename/tftpboot/denx_startup.bmp.Loadaddress:0 x100000Loading:#doneBytestransferred=308278(4b436hex=cp.b10000041F80000$filesizeCopytoFlash.done=setenvsplashimage41F80000=saveenvSavingEnvironmenttoFlash.11/59Un-Protected1sectorsErasingFlash.doneEr

28、ased1sectorsWritingtoFlash.doneProtected1sectors=bmpinfo$splashimageImagesize:640 x480Bitsperpixel:8Compression:0为了实现U-BootSplashScreen特色的支持,Linux内核加入了配置选项CONFIG_FB_PRE_INIT_FB,它同意跳过帧缓冲区framebuffer)的某一部分,并再使用由U-Boot固件成立的帧缓冲区内容。这样,系统启动过程中能够显示一个启动图像,该图像就掩饰了系统启动过程中屏幕输出。2ELDK工具介绍ELDKEmbeddedLinuxDeveelo

29、pmentKit)包含GNU交错开发工具如:编译器、binutils、gdb等)、大批的预编译目标工具、目标系统需要的库、常用工具如:ls、rm)、常用服务器/opt/eldk/build.sh-appc#CPU构架-n2007-01-19#编译结果寄存目录名-p/opt/eldk/build/ppc-2007-01-19#编译前缀,编译目录寄存路径-r/opt/eldk/build/ppc-2007-01-19/results#输出存入目录-w/opt/eldk/build/ppc-2007-01-19/work#工作目录trg4747#编译软件包的开端、结束编号,在文件tpckgs.lst

30、与cpckgs.lst中在ELDK工具编译成功或下载有ELDK工具可履行代码后,可独自编译不一样平台的源文件或软件包,方法以下:bash$exportCROSS_COMPILE=ppc_8xx-#编译器前缀,构成不一样构架编译器bash$CROSS_COMPILEgcc-ohello_worldhello_world.c#编译源文件bash$CROSS_COMPILErpm-iv.src.rpm#解压缩并安装源代码bash$CROSS_COMPILErpmbuild-ba.spec#编译源代码包成立开发系统开发时,主机需要与目标板交互,如:调试程序,控制目标板,下载程序映像到目标板,目标板的调

31、试信息需要反回到主机等。为了与目标板交互,主机一定成立开发环境,如:成立串行终端,配置TFTP服务器、DHCP服务器和NFS服务器。1)配置串行终端开发者在开发时需要接见目标板的串行终端端口,经过在主机上的终端对目标板进行控制台操作。往常,开发者将目标板的串行终端端口绑定在主机的一个串行端口,实现控制台的功能,开发者还需要在主机上使用一个终端仿真程序,如:cu或kermit。命令cu是软件包UUCP的一部分,UUCP可用作串行终端,还拥有简单的文件传输功能,可用于映像文件的下载。依靠于目标板的波特率,需要改写UUCP的配置文件,典型的配置列出以下:13/59?配置文件/etc/uucp/sys

32、的内容列出以下:#/dev/ttyS0at115200bps:systemS0115200portserial0_115200timeany配置文件/etc/uucp/port的内容列出以下:#/dev/ttyS0at115200bps:portserial0_115200typedirectdevice/dev/ttyS0speed115200hardflowfalse接着,用户可用下边命令连结到串行线:$cuS0115200$.#断开连结命令kermit代表了整个串行线和网络连结通信软件簇,文件/.kermrc履行kermit的初始化,经过适合的初始化命令可用来定制kermit的行为,U-

33、Boot介绍使用下边的设置:$cat/.kermrc:setline/dev/ttyS0#串行端口setspeed115200#波特率14/59setcarrier-watchoffsethandshakenonesetflow-controlnonerobustsetfiletypebinsetfilenamelitsetrecpack1000setsendpack1000setwindow5命令kermit连结串行线的方法以下:$kermitc2)配置TFTP服务器使用U-Boot装载Linux内核或应用程序的最快捷方式是经过Ethernet传达,U-Boot实现了TFTP协议,经过U-B

34、oot的tftpboot命令下载文件到目标板中,主机应确信安装了TFTP后台程序/usr/sbin/in.tftpd。3)配置BOOTTP/DHCP服务器BOOTP/DHCP服务器用于自动传达配置信息到目标机,目标机仅需要知道它自己的Ethernet硬件MAC地点,主机应安装DHCP包,配置DHCP服务器,一个配置样例列出以下:subnetnetmaskoptionrouters。optionsubnet-mask。optiondomain-name。optiondomain-name-servers。hosttrgthardwareethernet00:30:BF:01:02:D0。#目标板

35、MAC地点fixed-address。#目标板固定IP地点optionroot-path/opt/eldk-4.2/ppc_4xx。15/59optionhost-namecanyonlands。#目标板的主机名next-server。filename/tftpboot/canyonlands/uImage。用上边的配置,DHCP服务器将回答来自目标板的恳求,给出下边的信息:目标板位于子网,子网掩码为。目标板的主机名为Canyonlands,IP地点为。IP地点为的主机给目标板供给启动映像bootimage),当目标板根文件系统经过NFS挂接在主机上,它还供给NFS服务器功能。主机供给文件/t

36、ftpboot/canyonlands/uImage作为目标板的启动映像。目标板能够挂接目录/opt/eldk-4.2/ppc_4xx在NFS服务作为根文件系统。上述语句含义为裸露目录/opt/eldk-4.2/ppc_4xx,在子网上的全部主机都能够读写操作该目录。编译安装Linux内核ELDK源代码包含了Linux内核,用户能够编译安装内核,方法以下:bash$cd/opt/eldk/usr/src/linux-2.6-denxbash$makemrproperbash$makeARCH=powerpcCROSS_COMPILE=ppc_4xx-canyonlands_defconfig#

37、用户设施目标板的配置bash$makeARCH=powerpcCROSS_COMPILE=ppc_4xx-INSTALL_MOD_PATH=/opt/eldk-4.2/ppc_4xxmodules_install16/59bash$cparch/powerpc/boot/uImage/tftpboot/uImage启动嵌入式Linux1)启动内核当Linux内核和扁平设施树块FlattenedDeviceTreeBlob,FDTblob)下载到目标板的系统内存bootmFC000000FC1E00002)编译blobLinux内核运转时,希望知道它运转的硬件信息,这些硬件信息按开放固件规范以设

38、施树的形式描绘,因为象U-Boot这样的BootLoader没有实现开放固件APIOpenFirmwareAPI),硬件信息将以扁平设施树的二进制形式传达给内核,这类二进制形式称为FDTblob或简称blob。在设施树信息文件/tftpboot/canyon编译完后,可使用命令tftp将blob传输到目标机的内存中,接着,系统启动bootm将blob中的硬件信息传达给内核。U-Boot还供给命令fdt改正blob。3)传达内核参数用户能够传达附带信息如:根设施或网络配置)给内核。U-Boot经过环境变量bootargs实现该功能。该变量的内容作为启动参数或命令行参数)自动传达给内核,这样,能够

39、让同一个内核映像有更多的配置,比如:仅改变变量bootargs的内容,就能够让同一个内核映像与initrd内存盘setenvbootargsroot=/dev/ramrw=bootm200000400000600000假定NFS服务器地点为,输出目录/opt/eldk-4.2/ppc_4xx作为目标板的根文件系统,目标板的地址为,目标板主机名为canyonlands,子网掩码为。现由在NFS上的根文件系统启动相同内核,则启动命令列出以下:=setenvbootargsroot=/dev/nfsrwnfsroot=:/opt/eldk-4.2/ppc_4xx=bootm200000-600000

40、17/59内核启动后,可用下边命令查察启动的命令行:$cat/proc/cmdline用户还可用U-Boot环境变量寄存全部需要的配置参数,方法以下:=setenvipaddr=setenvserverip=setenvnetmask=setenvhostnamecanyonlands=setenvrootpath/opt/eldk-4.2/ppc_4xx=saveenv用户可用这些变量建立传达到内核的启动参数,方法以下:=setenvnfsargsroot=/dev/nfsrwnfsroot=$serverip:$rootpath下边能够定义bootargs环境变量,并一步步建立启动参数:=

41、setenvramargssetenvbootargsroot=/dev/ramrw=setenvnfsargssetenvbootargsroot=/dev/nfsrwnfsroot=$serverip:$rootpath=setenvaddipsetenvbootargs$bootargsip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:=setenvram_rootrunramargsaddip。bootm$kernel_addr$ramdisk_addr$fdt_addr=setenvnfs_rootrunnfsargsaddip。b

42、ootm$kernel_addr-$fdt_addr上边定义了ram_root和nfs_root两个变量,分别用于从ramdisk映像的根文件系统和NFS上的根文件系统启动。变量经过run命令履行。setenvramdisk_addrFC200000=18/59=setenvram_ws100000=protoffFC200000FC3FFFFFUn-Protected16sectors=eraFC200000FC3FFFFF.doneErased16sectors=tftp100000/tftpboot/canyonlands/uRamdisk=imi100000CheckingImagea

43、t00100000.=cp.b$ram_ws$ramdisk_addr$filesizeCopytoFlash.done=imi$ramdisk_addr=saveenvSavingEnvironmenttoFlash.为了告诉Linux内核使用ramdisk映像作为根文件系统,用户一定改正传达给内核的命令行参数,ramdisk映像地点作为命令bootm的第二个参数,第一个参数为内核映像的内存地点,第三个参数是FDTblob的内存地点。Flash文件系统1)MTD19/59全部可用的Flash文件系统都鉴于内存技术设施MemoryTechnologyDevices,MTD)层,所以,用户配置内

44、核时一定翻开flash文件系统支持,配置结果以下:CONFIG_MTD=yCONFIG_MTD_PARTITIONS=yCONFIG_MTD_CHAR=yCONFIG_MTD_BLOCK=yCONFIG_MTD_CFI=yCONFIG_MTD_GEN_PROBE=yCONFIG_MTD_CFI_AMDSTD=yCONFIG_MTD_ROM=yCONFIG_MTD_canyonlands=y目标板flash设施的分区设计由MTD映照例程/dev/mtd3-bash-3.2#-bash-3.2#head-1/dev/mtd3ThuJan101:04:51CET1970-bash-3.2#-bash

45、-3.2#date/dev/mtd3上述命令中,第一次写是正确的,第二次写将获得一个错误,因为flash内存一定先擦除,再进行写操作。用户可使用Linux命令eraseall擦除整个MTD分区,再进行写操作,方法以下:-bash-3.2#flash_eraseall/dev/mtd3-bash-3.2#-bash-3.2#date/dev/mtd3-bash-3.2#-bash-3.2#head-1/dev/mtd3ThuJan101:04:51CET19702)JFFS221/59JFFSJournallingFlashFileSystem)是嵌入式设施flash上最适合的文件系统,JFFS

46、2为嵌入式系统闪存的使用而设计,它是一个日记构造的文件系统,这意味着它对掉电、系统崩溃或其余不测封闭等系统异样拥有有效保护举措,如:仅丢掉正在写的数据,重启动后,不需要任何的文件系统检查。配置内核时,需要翻开JFFS配置选项,配置结果列出以下:CONFIG_JFFS_FS=yCONFIG_JFFS_FS_VERBOSE=0对flash的直接读写或擦除操作一般使用MTD层的字符设施接口/dev/mtd*,文件系统操作procon/proctypeproc(rwdevptson/dev/ptstypedevpts(rw/dev/mtdblock2on/mnttypejffs(rwdf/查察磁盘使用

47、状况Filesystem1k-blocksUsedAvailableUse%Mountedon/dev/mtdblock23584035840%/mnt能够用工具mkfs.jffs2创立JFFS2文件系统映像,下边的样例给flash分区创立了3MB的JFFS2映像文件image.jffs2,并移入目录/tmp/flashtools/中的数据,而后,擦除分区/dev/mtd4,并将映像image.jffs2拷贝到分区mtd4中。最后,挂接分区mtd4。这些操作的命令列出以下:mkfs.jffs2-pad=3145728-eraseblock=262144-root=/tmp/flashtools

48、/-outputimage.jffs2eraseall/dev/mtd422/59Erased3072Kibyte0-100%complete.ddif=image.jffs2of=/dev/mtd4bs=256k12+0recordsin12+0recordsoutmount-tjffs2/dev/mtdblock4/mntdf/mntFilesystem1k-blocksUsedAvailableUse%Mountedon/dev/mtdblock43072248858481%/mnt3)CramFS用户有时希望文件系统是仅读的,可压缩仅读文件系统erase23/59-55.46%(-50

49、10byteseraseall-51.94%(-8863bytesmkfs.jffs-58.76%(-4383byteslock-59.68%(-4215bytesunlockEverything:24kilobytes$ls-l-rw-r-r-1wdusers24576Nov1023:44因为CramFs映像是压缩的,所以,输入的目录数据为64kB,而映像文件为24kB大小。写CramFs映像到flash分区的方法列出以下:cp/dev/mtd3mount-tcramfs/dev/mtdblock3/mntmount/dev/rooton/typenfs(rw,v2,rsize=4096,w

50、size=4096,hard,udp,nolock,addr=procon/proctypeproc(rwdevptson/dev/ptstypedevpts(rw/dev/mtdblock3on/mnttypecramfs(rwls-l/mnttotal54-rwxr-xr-x1wdusers8704Jan916:32erase-rwxr-xr-x1wdusers9034Jan101:00eraseall-rwxr-xr-x1wdusers7459Jan101:00lock-rwxr-xr-x1wdusers17063Jan101:00mkfs.jffs根文件系统的设计与编译嵌入式系统的根文

51、件系统RootFileSystem)设计包含寄存的内容、文件系统种类、在哪里寄存文件系统和怎样启动它。24/59根文件系统往常寄存在目标板的闪存flashmemory)中或CF、SD、MMC卡等中,能够使用像ELDK这样的Linux公布版本创立根文件系统的内容。下边使用来自ELDK的SELFSimpleEmbeddedLinuxFramework)映像创立根文件系统。在ELDK软件包中,各样平台构架的SELF映像文件在目录/opt/eldk/images/下,文件名为ramdisk_image.gz,是个压缩的ramdisk映像。由SELF创立根文件系统tar包的方法列出以下:/解压缩ramd

52、isk映像bash$gzip-d-c-v/opt/eldk/ppc_8xx/images/ramdisk_image.gz/tmp/ramdisk_image/opt/eldk/ppc_8xx/images/ramdisk_image.gz:61.4%/下边的操作需要root权限/挂接ramdisk映像bash#mount-oloop/tmp/ramdisk_image/mnt/tmp/创立tar包,为了防止需要root权限,这里不包含在tar包中的设施device)文件bash#cd/mnt/tmpbash#tar-zc-exclude=dev/*-f*需要时,为CramFs创立一个独自的t

53、ar包,用来包含设施条目bash#tar-zcfdev/bash#cd/tmp/卸载ramdisk映像bash#umount/mnt/tmp数$ROOTFS_DEVICES=rootfs_devices.tab#设施描绘表文件$ROOTFS_IMAGE=ramdisk.img#产生的文件系统映像$genext2fs-U-d$ROOTFS_DIR-D$ROOTFS_DEVICES-b$ROOTFS_SIZE-r$ROOTFS_FREE-i$ROOTFS_INODES$ROOTFS_IMAGE压缩文件系统映像,方法以下:26/59$gzip-v9ramdisk.imgrootfs.img:55.6

54、%-replacedwith创立U-Boot使用的根文件系统映像uRamdisk,方法以下:$mkimage-Tramdisk-Cgzip-nTestRamdiskImage-duRamdiskImageName:TestRamdiskImageCreated:SunJun1216:58:062005ImageType:PowerPCLinuxRAMDiskImage(gzipcompressedDataSize:1618547Bytes=1580.61kB=1.54MBLoadAddress:0 x00000000EntryPoint:0 x00000000Wenowhavearootfil

55、esystemimageuRamdiskthatcanbeusedwithU-Boot.era40400000407FFFFF.done28/59Erased35sectors下载JFFS2映像=tftp100000/tftpboot/TQM860L/jffs2.imgUsingFECETHERNETdeviceTFTPfromserver。ourIPaddressisFilename/tftpboot/TQM860L/jffs2.img.Loadaddress:0 x100000Loading:#doneBytestransferred=2033888(1f08e0hex拷贝映像到flash

56、CopytoFlash.done成立使用flash分区6作为根设施的启动参数=setenvmtd_argssetenvbootargsroot=/dev/mtdblock6rwrootfstype=jffs2=printenvaddipaddip=setenvbootargs$bootargsip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$=setenvflash_mtdrunmtd_argsaddip。bootm$kernel_addr=runflash_mtdUsingFECETHERNETdeviceTFTPfromserver。o

57、urIPaddressisFilename/tftpboot/TQM860L/uImage.Loadaddress:0 x200000Loading:#29/59doneBytestransferred=719233(af981hex#Bootingimageat40040000.3)根文件系统在cramfs文件系统上cramfs是压缩的仅读文件系统,作为根文件系统的长处是:文件系统是压缩的,可有效利用闪存空间;同意迅速启动,因为仅装载使用的文件,且仅解压缩。弊端是:仅能代替整个映像文件而非单个文件;需要附带的储存空间给可写的永远数据;工具mkcramfs不支持设施表。创立鉴于cramfs的根

58、文件系统的方法列出以下:经过解开tar包创立目标板根文件系统的内容,方法以下:$mkdirrootfs$cdrootfs$tarzxf创立需要的设施文件,这里经过解开仅含有设施文件条目的tar包来实现,方法列出以下:cdrootfstar-zxf很多工具需要一些储存地方,这里供给了一个小的可写文件系统。暂时文件系统tmpfs是一个选择,为了创立tmpfs文件系统,需要将下边的行加入到脚本/etc/rc.sh中:挂接tmpfs,是因为根文件系统仅读/bin/mount-ttmpfs-osize=2Mtmpfs/tmpfs一些工具需要对某些设施节点有写权限,如:改变属主和权限,可动向创立设施节点,

59、如:/dev/log。这些设施文件需要放在一个可写的文件系统中,仅读的根文件系统用符号链接指向可读设施到新的地点即在可读写文件系统中的地点),对应符号链接地点部排列出以下:dev/ptyp0/tmpfs/dev/ptyp0dev/ttyp0/tmpfs/dev/ttyp0dev/ptyp1/tmpfs/dev/ptyp1dev/ttyp1/tmpfs/dev/ttyp1dev/ptyp2/tmpfs/dev/ptyp2dev/ttyp2/tmpfs/dev/ttyp2为了搁置相应的目录与设施文件在tmpfs文件系统,搁置下边的代码在/etc/rc.sh脚本中:30/59mkdir-p/tmpf

60、s/tmp/tmpfs/dev/tmpfs/var/lib/dhcp/tmpfs/var/lock/tmpfs/var/runwhilereadnameminordomknod/tmpfs/dev/ptyp$namec2$minormknod/tmpfs/dev/ttyp$namec3$minordonein.ftpd-46.02%(-16280bytesin.telnetd-45.31%(-74444bytesxinetdEverything:1864kilobytesSuperblock:76bytesCRC:c166be6dwarning:gidstruncatedto8bits.(Th

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论