启动redboot后向目标机烧写一个linux内核的全过程.docx
《启动redboot后向目标机烧写一个linux内核的全过程.docx》由会员分享,可在线阅读,更多相关《启动redboot后向目标机烧写一个linux内核的全过程.docx(14页珍藏版)》请在冰豆网上搜索。
启动redboot后向目标机烧写一个linux内核的全过程
启动redboot后向目标机烧写一个linux内核的全过程
命令说明
对一个没有内核和根文件系统的板子是不可以运转的,当通过一种方式下载了RedBoot引导程序以后,我们可以通过下面的方式下载内核和根文件系统。
在本系统中,我们对内核和根文件系统的下载是通过tftp服务完成的。
整个Flash空间是16M,它的地址范围:
0x50000000–0x50fe0000,共有128块,每一块的大小是128K。
0x50000000–0x50080000范围放的是RedBoot引导程序和各种配置,0x50080000–0x50200000范围放的是Linux内核zImage,0x50200000–0x50380000范围放的是根文件系统ramdisk,0x50380000–0x50f60000范围放的是jffs2文件格式。
剩余0x50f60000---0x50fe0000范围的512K空间放日志系统.
以下过程为启动redboot后,向目标机烧写一个linux内核的全过程
先对flash进行初始化
RedBoot>fisinit
Abouttoinitialize[format]FLASHimagesystem-continue(y/n)?
y
***InitializeFLASHImageSystem
...Unlockfrom0x50060000-0x50080000:
.
...Erasefrom0x50060000-0x50080000:
.
...Programfrom0x07fe0000-0x08000000at0x50060000:
.
...Lockfrom0x50060000-0x50080000:
.
对剩余的FLASH空间解除锁定
RedBoot>fisunlock-f0x50080000-l0xf60000
...Unlockfrom0x50080000-0x50fe0000:
.........................................
................................................................................
..然后擦除
RedBoot>fiserase-f0x50080000-l0xf60000
...Erasefrom0x50080000-0x50fe0000:
..........................................
................................................................................
.显示FLASH分区信息
RedBoot>fislist
NameFLASHaddrMemaddrLengthEntrypoint
RedBoot0x500000000x500000000x000600000x00000000
FISdirectory0x500600000x500600000x0001F0000x00000000
RedBootconfig0x5007F0000x5007F0000x000010000x00000000
下面两步把内核zImage.H5500传送到目标板上,然后将其烧到flash的0x50080000地址中
RedBoot>loadzImage.H5500-b0x2000000-r-mtftp-h192.168.9.190
Rawfileloaded0x02000000-0x0211e52b,assumedentryat0x02000000
将其烧到flash的0x50080000地址中,zImage分配的空间为0x180000K
RedBoot>loadzImage.H5500-b0x2000000-r-mtftp-h192.168.9.190
Rawfileloaded0x02000000-0x0211e52b,assumedentryat0x02000000
RedBoot>fiscreate-b0x2000000-l0x180000-f0x50080000zImage
...Erasefrom0x50080000-0x50200000:
............
...Programfrom0x02000000-0x02180000at0x50080000:
............
...Unlockfrom0x50060000-0x50080000:
.
...Erasefrom0x50060000-0x50080000:
.
...Programfrom0x07fe0000-0x08000000at0x50060000:
.
...Lockfrom0x50060000-0x50080000:
将ramdisk.gz.H5500传送到目标板上,然后将其烧到flash的0x50020000地址中
RedBoot>loadramdisk.gz.H5500-b0x800000-r-mtftp-h192.168.9.190
Rawfileloaded0x00800000-0x0098a8df,assumedentryat0x00800000
RedBoot>fiscreate-b0x800000-l0x180000-f0x50200000ramdisk
...Erasefrom0x50200000-0x50380000:
............
...Programfrom0x00800000-0x00980000at0x50200000:
............
...Unlockfrom0x50060000-0x50080000:
.
...Erasefrom0x50060000-0x50080000:
.
...Programfrom0x07fe0000-0x08000000at0x50060000:
.
...Lockfrom0x50060000-0x50080000:
.
将jffs2.rescue.img传送到目标板上,然后将其烧到flash的0x50380000地址中
RedBoot>loadjffs2.rescue.img-b0x800000-r-mtftp-h192.168.9.190
Rawfileloaded0x00800000-0x00898c6b,assumedentryat0x00800000
RedBoot>fiscreate-b0x800000-l0xbe0000-f0x50380000jffs2
...Erasefrom0x50380000-0x50f60000:
..........................................
.....................................................
...Programfrom0x00800000-0x013e0000at0x50380000:
..........................
.....................................................................
...Unlockfrom0x50060000-0x50080000:
.
...Erasefrom0x50060000-0x50080000:
.
...Programfrom0x07fe0000-0x08000000at0x50060000:
.
...Lockfrom0x50060000-0x50080000:
.
RedBoot>fislist
NameFLASHaddrMemaddrLengthEntrypoint
RedBoot0x500000000x500000000x000600000x00000000
FISdirectory0x500600000x500600000x0001F0000x00000000
RedBootconfig0x5007F0000x5007F0000x000010000x00000000
zImage0x500800000x500800000x001800000x02000000
ramdisk0x502000000x502000000x002000000x00800000
jffs20x503800000x503800000x00be00000x00200000
fconfig,此命令是配置脚本命令
RedBoot>fconfig
Runscriptatboot:
true
Bootscript:
Enterscript,terminatewithemptyline
>>fisunlock-f0x50380000-l0xbe0000
>>fisload-b0x2000000zImage
>>fisload-b0x800000ramdisk
>>exec0x2000000
>>
Bootscripttimeout(1000msresolution):
3
UseBOOTPfornetworkconfiguration:
true
DefaultserverIPaddress:
192.168.0.43
Consolebaudrate:
115200
GDBconnectionport:
9000
Forceconsoleforspecialdebugmessages:
false
Networkdebugatboottime:
false
Defaultnetworkdevice:
npe_eth0
Networkhardwareaddress[MAC]fornpe_eth0:
0x00:
0x0F:
0x0E:
0x01:
0x02:
0x03
UpdateRedBootnon-volatileconfiguration-continue(y/n)?
(出现此提示时,请输入y)
...Unlockfrom0x50060000-0x50080000:
.
...Erasefrom0x50060000-0x50080000:
.
...Programfrom0x07fe0000-0x08000000at0x50060000:
.
...Lockfrom0x50060000-0x50080000:
.
显示FLASH被擦除但位被使用的空间
RedBoot>fisfree
0x50F60000..0x50FDFFFF
到这里整个烧写过程结束。
RedBoot可以在多种不同配置下运行,但一般都是从目标平台的闪存引导区或引导ROM启动。
RedBoot设计为系统上电启动,能提供完整的处理器初始化和设备设置,使设计人员能够迅速开始与系统通信。
出现RedBoot>
后,就表明redboot已经准备好,用户可以开始输入命令。
RedBoot命令的基本格式是:
命令[-选项1][-选项2参数值]操作符
命令格式中的选项1和选项2代表可以加到某些命令中的可选参数,用于指示一些特定动作或附加信息,在选项2中还包括一个数值。
操作符定义了某些特殊命令所需的附加信息。
命令也可以缩写成最短的无歧义字符串,如dump、dum、du和d都是dump命令的有效写法。
RedBoot用load命令下载应用软件映像,映像可以用TFTP协议、X/Y调制解调器协议或直接从目标硬件下载。
RedBoot常用的几条命令:
首先是闪存映像系统(fis)命令,当硬件平台上配有闪存时,RedBoot提供fis命令作为基本文件系统,这些命令主要用来管理文件系统映像。
另一个有用的命令是基于闪存的配置和控制命令fconfig。
用fconfig命令查询的输出信息,配置命令可以设置RedBoot启动顺序。
启动配置包括是否在初始化期间运行引导脚本、是否用BOOTP协议获取IP地址等等。
RedBoot支持引导脚本,因此允许用户在上电过程完成后执行所需命令。
在产品测试阶段采用RedBoot装载应用软件映像时引导脚本很有好处,用户还可以设置超时参数,在引导脚本执行前按下Ctrl+C中断执行。
引导脚本可用fconfig命令进行设置。
RedBoot命令介绍:
引用一个别名,如为joe的别名为ThisisJoe
RedBoot>aliasjoe"ThisisJoe"
设置IP,如改变SERVERIP为192.168.1.104
RedBoot>ip_address-h192.168.1.104IP:
192.168.1.31,Defaultserver:
192.168.1.104,DNSserverIP:
192.168.1.101
Load命令:
从宿主机下载程序到目标机详细用法在flash烧写过程中举例
Version:
显示RedBoot的版本,使用平台,内存和FLASH空间大小等等信息。
RedBoot>version
RedBoot(tm)bootstrapanddebugenvironment[ROM]
RedHatcertifiedrelease,version2.02-built21:
47:
00,Jun192006
Platform:
IXDP425DevelopmentPlatform(IXP42X400MHz)BE
Copyright(C)2000,2001,2002,2003,2004RedHat,Inc.
RAM:
0x00000000-0x08000000,[0x00029808-0x07fc1000]available
FLASH:
0x50000000-0x50fe0000,127blocksof0x00020000byteseach.
mfill:
用指定的方式向向存储器中写数据。
Mfill{-blocation}{-llength}{-pvalue}[-1|-2|-4]
-b:
存储器中,被写入数据的起始地址。
-l:
被写入数据的长度。
-p:
被写入数据的内容。
RedBoot>x-b00400000-l0x40
00061A80:
FFFFFFFFFFFCFFFFBFFFEFFFEFFFDFFF|................|
00061A90:
FFEFFFFFFFBFFFFDFEFFF7FFFFFF5FFF|.............._.|
00061AA0:
FF5FFFDFFFFFFF6FFCFFBBFFBFFFD7FF|._.....o........|
00061AB0:
FFFFFFFBFFF7FFFFAFFFBEFF7FFFFEFF|................|
RedBoot>mfill-b0x00400000-l0x40-p0x98765423
RedBoot>x-b0x00400000-l0x40
00400000:
98765423987654239876542398765423|.vT#.vT#.vT#.vT#|
00400010:
98765423987654239876542398765423|.vT#.vT#.vT#.vT#|
00400020:
98765423987654239876542398765423|.vT#.vT#.vT#.vT#|
00400030:
98765423987654239876542398765423|.vT#.vT#.vT#.vT#|
FlashImageSystem(FIS)
如果在一个板子上有Flash存储器,RedBoot能够把image引导到Flash中。
运行的对象,包括一些数据还有一些简单的文件也能够存放到Flash中。
fis这个命令能够被使用运行Flash中的内容。
fisinit[-f]:
初始化(FIS),当RedBoot第一次在器件上安装的时候这个命令被运行。
-f:
Flash的所有的块全部被檫除。
RedBoot>fisinit–f
Abouttoinitialize[format]flashimagesystem-areyousure(y/n)?
n
fis[-c][-d]list:
列出FIS中一般的文件,一些能够以RedBoot的名字运行,另外一些能够被使用者执行。
-c:
image的ckecksum代替MemAddr。
-d:
image的datalenggth代替length。
RedBoot>fislist
NameflashaddrMemaddrLengthEntrypoint
RedBoot0x500000000x500000000x000600000x00000000
FISdirectory0x500600000x500600000x0001F0000x00000000
RedBootconfig0x5007F0000x5007F0000x000010000x00000000
RedBoot>fislist-c
NameflashaddrChecksumLengthEntrypoint
RedBoot0x500000000x000000000x000600000x00000000
FISdirectory0x500600000x000000000x0001F0000x00000000
RedBootconfig0x5007F0000x000000000x000010000x00000000
fisfree:
显示Flash中还有那些地址空间没有被使用,使用这个命令可以知道另外一些image下载的位置。
RedBoot>fisfree
0x50080000..0x50FDFFFF
fiscreate–b-l[-f][-e][-r][-s][-n]:
在FIS目录中创造一个image,image中的数据在拷贝之前必须存在在RAM存储器中。
(首先,使用load命令把image下载到RAM中,然后运用fiscreate命令把他写入Flash中。
)
name:
文件的名字,显示在FIS目录中。
-b:
在RAM中的一个位置,为了得到image,这是一个必须的参数。
-l:
image的长度。
如果image已经存在,那么它的长度被推断根据先前image被创造的时间。
特殊的情况下,它可能和原来的初始化的数据是一样的。
-f:
image在Flash中的位置。
一般情况下,位置被确定根据现在的image所在的位置,如果在Flash还没有image的存在,那么剩余的块是足够的被使用。
-e:
执行登陆的地址。
如果image的开始地址不知道或者是不需要被考虑,-e被使用。
-r:
当image通过fisload命令下载在RAM中的位置。
但是在这里要求这个image是给定的。
-s:
被写入Flash数据的真实的长度,如果不能出现,那么image的长度是假定的,-s比-l给出的数据要短一些,
-n:
仅仅更新FIS的目录,没有数据被拷贝从RAM到Flash中,这个特点能够被使用登陆FIS,如果它已经坏掉。
RedBoot>fiscreateRedBoot-f0x50000000-b0x07000000-l0x60000
Animagenamed'RedBoot'exists-continue(y/n)?
n
RedBoot>fisunlock-f0x50080000-l0x20000
...Unlockfrom0x50080000-0x500a0000:
.
RedBoot>fiserase-f0x50080000-l0x20000
...Erasefrom0x50080000-0x500a0000:
.
RedBoot>fiscreatefuck-b0x05000000-l0x20000
...Erasefrom0x50080000-0x500a0000:
.
...Programfrom0x05000000-0x05020000at0x50080000:
.
...Unlockfrom0x50060000-0x50080000:
.
...Erasefrom0x50060000-0x50080000:
.
...Programfrom0x07fe0000-0x08000000at0x50060000:
.
...Lockfrom0x50060000-0x50080000:
.
RedBoot>fislist
NameFLASHaddrMemaddrLengthEntrypoint
RedBoot0x500000000x500000000x000600000x00000000
FISdirectory0x500600000x500600000x0001F0000x00000000
RedBootconfig0x5007F0000x5007F0000x000010000x00000000
fuck0x500800000x050000000x000200000xFFFFFFFF
fisload[-b][-c][-d]name:
拷贝一个image从Flash到RAM。
一旦被下载,它可能运用go命令执行。
如果加上-b参数,image被拷贝从Flash到RAM的指定的位置,如果不加上-b参数,image被拷贝从Flash到image被创造的地址。
-name:
一个显示在FIS目录中的文件名。
-b:
存储器中,被写入数据的开始地址