我说你看-DarkEyes

生活就像一条鞭子,不停地抽打我,要我前进,却又不肯告诉我寻找什么?! 百无聊奈,随意的涂鸦.写者无心,看客也就自便了,偶有所感,会心一笑即可:)

用户操作
[即时聊天] [发私信] [加为好友]
DarkEyesID:freedarkeyes
43834次访问,排名2564好友0人,关注者0
freedarkeyes的文章
原创 46 篇
翻译 0 篇
转载 34 篇
评论 37 篇
DarkEyes的公告
人生走过的路!懵懂的人生!记录我心中的浮躁....... 人生中有很多东西是会忘记的,所以需要用文字记录下来。 写着卿以自慰的BLOG就如在黑暗的屋子里一个人躺在床上意淫自己心目中的女孩,满足了心理上的欲望,现实却依如昨日。 SL888258@163.COM MSN:SL888158@hotmail.com QQ:59725724
最近评论
sap99:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
kolcity:感谢,我遇到相同问题,按上述方法已解决
mm:多谢提醒,原来是迅雷占用了80端口
laokang:下面是我的邮箱,如果有新的进展或发现,麻烦你把解决办法发到我的邮箱里吧,非常感谢!
kangzhiwei1314@126.com
laokang:我试了一下,在我的电脑上不好用,在我的电脑上"允许父项的继承审核项目传播到该对象和所有子对象"这个选项是灰色的,不可用的.这个选项下面那个也是灰色的,不可用,这应该怎么半呢?
文章分类
收藏
    相册
    一些连接
    LINUX基础操作
    中国IC卡水表网
    中国IC卡水表网
    啸月孤狼
    啸月狼
    绿城晨风
    虫子的BLOG
    郑州英才网
    雷老大的BLOG
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 启动redboot后,向目标机烧写一个linux内核的全过程收藏

    新一篇: asp.net中DateTime使用 | 旧一篇: 在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)

    以下是06年初刚开始搞嵌入式开发时候花了一天时间整理的。很多时候,人生的选择就是就像一条弯曲的隧道。当你没有进隧道时,前面的路弯弯曲曲但总有希望。当你走过隧道的时候,一些都成历史。大学毕业的时候,曾立志要做一个高级程序员。而且也成为本系(计算机系)260多人中,最早签约从事软件开发职业的人。且签约的软件公司也是一个纯技术上市公司控股的公司。几个软件主管均是硕士和博士。可最后的结果却又最先放弃软件行业。 闲来无事,翻腾自己的电脑,发现了下面的文档,发出来共享吧。

    命令说明

    对一个没有内核和根文件系统的板子是不可以运转的,当通过一种方式下载了RedBoot引导程序以后,我们可以通过下面的方式下载内核和根文件系统。

    在本系统中,我们对内核和根文件系统的下载是通过tftp服务完成的。

    整个Flash空间是16M ,它的地址范围:0x50000000 – 0x50fe0000 ,共有128块,每一块的大小是128K 0x50000000 – 0x50080000范围放的是RedBoot引导程序和各种配置,0x50080000 – 0x50200000范围放的是Linux内核zImage0x50200000 – 0x50380000范围放的是根文件系统ramdisk0x50380000 – 0x50f60000范围放的是jffs2文件格式。剩余0x50f60000---0x50fe0000范围的512K空间放日志系统.

       

    以下过程为启动redboot后,向目标机烧写一个linux内核的全过程

     

    先对flash进行初始化

    RedBoot> fis init

    About to initialize [format] FLASH image system - continue (y/n)? y

    *** Initialize FLASH Image System

    ... Unlock from 0x50060000-0x50080000: .

    ... Erase from 0x50060000-0x50080000: .

    ... Program from 0x07fe0000-0x08000000 at 0x50060000: .

    ... Lock from 0x50060000-0x50080000: .

    对剩余的FLASH空间解除锁定

    RedBoot> fis unlock -f 0x50080000 -l 0xf60000

    ... Unlock from 0x50080000-0x50fe0000: .........................................

    ................................................................................

    ..然后擦除

    RedBoot> fis erase -f 0x50080000 -l 0xf60000

    ... Erase from 0x50080000-0x50fe0000: ..........................................

    ................................................................................

    .显示FLASH分区信息

    RedBoot> fis list

    Name              FLASH addr  Mem addr    Length      Entry point

    RedBoot           0x50000000  0x50000000  0x00060000  0x00000000

    FIS directory     0x50060000  0x50060000  0x0001F000  0x00000000

    RedBoot config    0x5007F000  0x5007F000  0x00001000  0x00000000

    下面两步把内核zImage.H5500传送到目标板上,然后将其烧到flash0x50080000地址中

    RedBoot> load zImage.H5500 -b 0x2000000 -r -m tftp -h 192.168.9.190

    Raw file loaded 0x02000000-0x0211e52b, assumed entry at 0x02000000

    将其烧到flash0x50080000地址中, zImage分配的空间为0x180000K

    RedBoot> load zImage.H5500 -b 0x2000000 -r -m tftp -h 192.168.9.190

    Raw file loaded 0x02000000-0x0211e52b, assumed entry at 0x02000000

    RedBoot> fis create -b 0x2000000 -l 0x180000 -f 0x50080000 zImage

    ... Erase from 0x50080000-0x50200000: ............

    ... Program from 0x02000000-0x02180000 at 0x50080000: ............

    ... Unlock from 0x50060000-0x50080000: .

    ... Erase from 0x50060000-0x50080000: .

    ... Program from 0x07fe0000-0x08000000 at 0x50060000: .

    ... Lock from 0x50060000-0x50080000:

    ramdisk.gz.H5500传送到目标板上,然后将其烧到flash0x50020000地址中

    RedBoot> load ramdisk.gz.H5500 -b 0x800000 -r -m tftp -h 192.168.9.190

    Raw file loaded 0x00800000-0x0098a8df, assumed entry at 0x00800000

    RedBoot> fis create -b 0x800000 -l 0x180000 -f 0x50200000 ramdisk

    ... Erase from 0x50200000-0x50380000: ............

    ... Program from 0x00800000-0x00980000 at 0x50200000: ............

    ... Unlock from 0x50060000-0x50080000: .

    ... Erase from 0x50060000-0x50080000: .

    ... Program from 0x07fe0000-0x08000000 at 0x50060000: .

    ... Lock from 0x50060000-0x50080000: .

    jffs2.rescue.img传送到目标板上,然后将其烧到flash0x50380000地址中

    RedBoot> load jffs2.rescue.img -b 0x800000 -r -m tftp -h 192.168.9.190

    Raw file loaded 0x00800000-0x00898c6b, assumed entry at 0x00800000

    RedBoot> fis create -b 0x800000 -l 0xbe0000 -f 0x50380000 jffs2

    ... Erase from 0x50380000-0x50f60000: ..........................................

    .....................................................

    ... Program from 0x00800000-0x013e0000 at 0x50380000: ..........................

    .....................................................................

    ... Unlock from 0x50060000-0x50080000: .

    ... Erase from 0x50060000-0x50080000: .

    ... Program from 0x07fe0000-0x08000000 at 0x50060000: .

    ... Lock from 0x50060000-0x50080000: .

    RedBoot> fis list

    Name              FLASH addr  Mem addr    Length      Entry point

    RedBoot           0x50000000  0x50000000  0x00060000  0x00000000

    FIS directory     0x50060000  0x50060000  0x0001F000  0x00000000

    RedBoot config    0x5007F000  0x5007F000  0x00001000  0x00000000

    zImage            0x50080000  0x50080000  0x00180000  0x02000000

    ramdisk           0x50200000  0x50200000  0x00200000  0x00800000

    jffs2             0x50380000  0x50380000  0x00be0000  0x00200000

     

    fconfig,此命令是配置脚本命令

    RedBoot> fconfig

    Run script at boot: true

    Boot script:

    Enter script, terminate with empty line

     

    >> fis unlock -f 0x50380000 -l 0xbe0000

    >> fis load -b 0x2000000 zImage

    >> fis load -b 0x800000 ramdisk

    >> exec 0x2000000

    >> 

    Boot script timeout (1000ms resolution): 3

    Use BOOTP for network configuration: true

    Default server IP address: 192.168.0.43

    Console baud rate: 115200

    GDB connection port: 9000

    Force console for special debug messages: false

    Network debug at boot time: false

    Default network device: npe_eth0

    Network hardware address [MAC] for npe_eth0: 0x00:0x0F:0x0E:0x01:0x02:0x03

    Update RedBoot non-volatile configuration - continue (y/n)? (出现此提示时,请输入y)

    ... Unlock from 0x50060000-0x50080000: .

    ... Erase from 0x50060000-0x50080000: .

    ... Program from 0x07fe0000-0x08000000 at 0x50060000: .

    ... Lock from 0x50060000-0x50080000: .

    显示FLASH被擦除但位被使用的空间

    RedBoot> fis free

      0x50F60000 .. 0x50FDFFFF

    到这里整个烧写过程结束。

     

    RedBoot可以在多种不同配置下运行,但一般都是从目标平台的闪存引导区或引导ROM启动。RedBoot设计为系统上电启动,能提供完整的处理器初始化和设备设置,使设计人员能够迅速开始与系统通信。

     

    出现 RedBoot>

    后,就表明redboot已经准备好,用户可以开始输入命令。

    RedBoot命令的基本格式是:

    命令 [-选项1] [-选项2 参数值] 操作符

     

    命令格式中的选项1和选项2代表可以加到某些命令中的可选参数,用于指示一些特定动作或附加信息,在选项2中还包括一个数值。操作符定义了某些特殊命令所需的附加信息。命令也可以缩写成最短的无歧义字符串,如dumpdumdud都是dump命令的有效写法。

     

    RedBootload命令下载应用软件映像,映像可以用TFTP协议、X/Y调制解调器协议或直接从目标硬件下载。

    RedBoot常用的几条命令

    首先是闪存映像系统(fis)命令,当硬件平台上配有闪存时,RedBoot提供fis命令作为基本文件系统,这些命令主要用来管理文件系统映像。

     

    另一个有用的命令是基于闪存的配置和控制命令fconfig。用fconfig命令查询的输出信息,配置命令可以设置RedBoot启动顺序。启动配置包括是否在初始化期间运行引导脚本、是否用BOOTP协议获取IP地址等等。

     

    RedBoot支持引导脚本,因此允许用户在上电过程完成后执行所需命令。在产品测试阶段采用RedBoot装载应用软件映像时引导脚本很有好处,用户还可以设置超时参数,在引导脚本执行前按下Ctrl+C中断执行。引导脚本可用fconfig命令进行设置。

     

    RedBoot命令介绍:

    引用一个别名,如为joe的别名为This is Joe

    RedBoot> alias joe "This is Joe"

    设置IP,如改变SERVER IP192.168.1.104

    RedBoot> ip_address -h 192.168.1.104 

    IP: 192.168.1.31, Default server: 192.168.1.104, DNS server IP: 192.168.1.101

    Load命令:从宿主机下载程序到目标机详细用法在flash烧写过程中举例

    Version : 显示RedBoot的版本,使用平台,内存和FLASH空间大小等等信息。

    RedBoot > version

     

    RedBoot(tm) bootstrap and debug environment [ROM]

    Red Hat certified release, version 2.02 - built 21:47:00, Jun 19 2006

     

    Platform: IXDP425 Development Platform (IXP42X 400MHz) BE

    Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.

     

    RAM: 0x00000000-0x08000000, [0x00029808-0x07fc1000] available

    FLASH: 0x50000000 - 0x50fe0000, 127 blocks of 0x00020000 bytes each.

     

    mfill 用指定的方式向向存储器中写数据。

    Mfill  {-b location} {-l length} {-p value} [-1 | -2| -4]

    -b : 存储器中,被写入数据的起始地址。

    -l :被写入数据的长度。

    -p :被写入数据的内容。

     

    RedBoot> x -b 00400000 -l 0x40

    00061A80: FF FF FF FF FF FC FF FF  BF FF EF FF EF FF DF FF  |................|

    00061A90: FF EF FF FF FF BF FF FD  FE FF F7 FF FF FF 5F FF  |.............._.|

    00061AA0: FF 5F FF DF FF FF FF 6F  FC FF BB FF BF FF D7 FF  |._.....o........|

    00061AB0: FF FF FF FB FF F7 FF FF  AF FF BE FF 7F FF FE FF  |................|

    RedBoot> mfill -b 0x00400000 -l 0x40 -p 0x98765423

    RedBoot> x -b 0x00400000 -l 0x40

    00400000: 98 76 54 23 98 76 54 23  98 76 54 23 98 76 54 23  |.vT#.vT#.vT#.vT#|

    00400010: 98 76 54 23 98 76 54 23  98 76 54 23 98 76 54 23  |.vT#.vT#.vT#.vT#|

    00400020: 98 76 54 23 98 76 54 23  98 76 54 23 98 76 54 23  |.vT#.vT#.vT#.vT#|

    00400030: 98 76 54 23 98 76 54 23  98 76 54 23 98 76 54 23  |.vT#.vT#.vT#.vT#|

     

     

    Flash Image SystemFIS

     

    如果在一个板子上有Flash存储器,RedBoot能够把image引导到Flash中。运行的对象,包括一些数据还有一些简单的文件也能够存放到Flash中。fis 这个命令能够被使用运行Flash中的内容。

    fis init [-f]  :初始化(FIS),当RedBoot第一次在器件上安装的时候这个命令被运行。

    -f Flash的所有的块全部被檫除。

     

    RedBoot> fis init –f

    About to initialize [format] flash image system - are you sure (y/n)?n

     

    fis [-c] [-d] list  :列出FIS 中一般的文件,一些能够以RedBoot的名字运行,另外一些能够被使用者执行。

                    -c imageckecksum代替Mem Addr

                    -d imagedatalenggth代替length

     

    RedBoot> fis list

    Name             flash addr Mem addr    Length       Entry point

    RedBoot           0x50000000  0x50000000 0x00060000  0x00000000

    FIS directory    0x50060000  0x50060000 0x0001F000  0x00000000

    RedBoot config   0x5007F000  0x5007F000 0x00001000  0x00000000

     

    RedBoot> fis list -c

    Name             flash addr Checksum    Length       Entry point

    RedBoot           0x50000000  0x00000000  0x00060000  0x00000000

    FIS directory    0x50060000  0x00000000  0x0001F000  0x00000000

    RedBoot config   0x5007F000  0x00000000  0x00001000  0x00000000

     

    fis free  显示Flash中还有那些地址空间没有被使用,使用这个命令可以知道另外一些image下载的位置。

     

    RedBoot> fis free

    0x50080000 .. 0x50FDFFFF

     

    fis create –b <mem_base> -l<length> [-f<flash_addr>] [-e<entry_point>] [-r<ram_addr>] [-s<data_lentf>] [-n] <name> : FIS 目录中创造一个imageimage中的数据在拷贝之前必须存在在RAM存储器中。(首先,使用load命令把image下载到RAM中,然后运用fis create命令把他写入Flash中。)

     

            name :文件的名字,显示在FIS 目录中。

            -b :在RAM中的一个位置,为了得到image,这是一个必须的参数。

            -l image的长度。如果image已经存在,那么它的长度被推断根据先前image被创造的时间。特殊的情况下,它可能和原来的初始化的数据是一样的。

    -f imageFlash中的位置。一般情况下,位置被确定根据现在的image所在的位置,如果在Flash还没有image的存在,那么剩余的块是足够的被使用。

    -e :执行登陆的地址。如果image的开始地址不知道或者是不需要被考虑,-e被使用。

    -r :当image通过fis load命令下载在RAM 中的位置。但是在这里要求这个image是给定的。

    -s :被写入Flash数据的真实的长度,如果不能出现,那么image的长度是假定的,-s-l给出的数据要短一些,

    -n :仅仅更新FIS的目录,没有数据被拷贝从RAMFlash中,这个特点能够被使用登陆FIS,如果它已经坏掉。

     

    RedBoot >  fis create RedBoot -f 0x50000000 -b 0x07000000 -l 0x60000

    An image named 'RedBoot' exists - continue (y/n)? n

    RedBoot> fis unlock -f 0x50080000 -l 0x20000

    ... Unlock from 0x50080000-0x500a0000: .

    RedBoot> fis erase -f 0x50080000 -l 0x20000

    ... Erase from 0x50080000-0x500a0000: .

    RedBoot> fis create fuck -b 0x05000000 -l 0x20000

    ... Erase from 0x50080000-0x500a0000: .

    ... Program from 0x05000000-0x05020000 at 0x50080000: .

    ... Unlock from 0x50060000-0x50080000: .

    ... Erase from 0x50060000-0x50080000: .

    ... Program from 0x07fe0000-0x08000000 at 0x50060000: .

    ... Lock from 0x50060000-0x50080000: .

    RedBoot> fis list

    Name              FLASH addr  Mem addr    Length      Entry point

    RedBoot           0x50000000  0x50000000  0x00060000  0x00000000

    FIS directory     0x50060000  0x50060000  0x0001F000  0x00000000

    RedBoot config    0x5007F000  0x5007F000  0x00001000  0x00000000

    fuck              0x50080000  0x05000000  0x00020000  0xFFFFFFFF

     

    fis load [-b <memory load address>] [-c] [-d] name : 拷贝一个imageFlashRAM。一旦被下载,它可能运用go命令执行。如果加上-b参数,image被拷贝从FlashRAM 的指定的位置,如果不加上-b参数,image被拷贝从Flashimage被创造的地址。

    -name :一个显示在FIS 目录中的文件名。

    -b :存储器中,被写入数据的开始地址。

    -c :下载到存储器之后计算并打印image数据的校验和。

    -d :当拷贝imageFlashRAM 时减压缩它。

     

    RedBoot> fis load RedBoot

    RedBoot> go

    执行linux kernel

    RedBoot> exec

    fis delete name 移出一个imageFIS 中,Flash一部分空间将要被檫除,而且移出映像的名字从Flash的目录中。

     

    RedBoot> fis delete fuck

    Delete image 'fuck' - continue (y/n)? y

    ... Erase from 0x50080000-0x500a0000: .

    ... Unlock from 0x50060000-0x50080000: .

    ... Erase from 0x50060000-0x50080000: .

    ... Program from 0x07fe0000-0x08000000 at 0x50060000: .

    ... Lock from 0x50060000-0x50080000: .

     

    fis lock –f <flash_addr> -l <length> :  写保护一部分Flash扇区,预防意外的重写image。为了对Flash进行一些更改,一个匹配的开启命令必须是有的,

     

    RedBoot> fis lock -f 0x50090000 -l 0x20000

    ... Lock from 0x50080000-0x500b0000: ..

     

    fis unlock –f <flash_addr> -l <length> : 开启一部分Flash扇区,允许这部分扇区被更新,这部分区域一定是被写保护过的。