redboot的使用

Sam很早之前使用过redboot。后来很快忘记如何使用了。 之后在Intel CE2110以及 CE3100上使用了redboot.结果现在有段时间不用,又忘记了。只好再看一遍。这次能记得住吗?光头葛说:我看(不)行!

Redboot简介:
Redboot是Redhat公司随eCos发布的一个BOOT方案,是一个开源项目。
Redboot支持的处理器构架有ARM,MIPS,MN10300,PowerPC, Renesas SHx,v850,x86等,是一个完善的嵌入式系统Boot Loader。
Redboot是在ECOS的基础上剥离出来的,继承了ECOS的简洁、轻巧、可灵活配置、稳定可靠等
品质优点。它可以使用X-modem或Y-modem协议经由串口下载,也可以经由以太网口通过
BOOTP/DHCP服务获得IP参数,使用TFTP方式下载程序映像文件,常用于调试支持和系统初始化。


RedBoot的基本用法:
1. 进入Redboot 设置界面:
在Intel-CE2110重新启动时,按下Ctrl+C。 则进入Redboot配置模式下。
出现以下提示符,表明进入RedBoot设置界面。
RedBoot>
在此界面下,可以使用RedBoot命令执行操作。

2. 修改RedBoot boot script。此script将被RedBoot在启动时使用。
首先进入RedBoot boot script edit界面。
RedBoot> fconfig
则出现:
>>
在这里输入: RedBoot boot script内容。

若发现fconfig后,出现莫名其妙的错误,可以清空boot script,方法:
RedBoot>fconfig -i



Intel CE2110上,按照kernel和rootfs放置的不同方式,有3种启动方式(与CE3100很类似):
1. kernel和rootfs全部放置在tftp server上。
2. kernel烧入到NOR flash中,rootfs则使用 nfs server中的。
3. kernel和rootfs全部烧入NOR flash中
前2种方式在开发阶段非常有用。可以快速修改kernel和rootfs.



1. kernel和rootfs全部放置在tftp server上:
1.1: copy zImage(kernel)和initrd_media.gz(rootfs)到/tftpboot
1.2:
RedBoot> fconfig
>>load –v –r –m tftp –h 172.16.1.61 –b 0x200000 zImage_olo
>>load –v –r –m tftp –h 172.16.1.61 –b 0x1000000 initrd_media.gz
>>exec –r 0x1000000 –s 0x12B2BDD –l 0x300000 –c “console=ttyS0, 115200 mem=100M@0 root=/dev/ram0 init=/linuxrc” 0x200000
则可以使用了。(但Sam使用这个办法时总有问题。显示乱码。)
现讲解命令如下:
load: 下载数据到目标系统RAM中.
-v: 下载过程显示进度
-r: 下载未处理的数据到RAM
-b: 数据下载到RAM的地址
-m: 方式
-h: host

exec: 执行一个映象文件,如引导Linux内核
-r: 传递给内核的ramdisk_address起始地址
-s: 传递给内核的ramdisk_address长度
-b: 内核映象文件地址
-l: 内核映象文件长度
-c: 传递给内核的命令行

2. kernel烧入到NOR flash中,rootfs则使用 nfs server中的。 (Sam还是有问题)
2.1. kernel burn 到flash。
2.1.1 把新kernel--zImage放到/tftpboot
2.1.2 Ctrl-c 进入redboot模式。
2.1.3烧入:
RedBoot>fis init
RedBoot>load -v -r -m tftp -h 172.16.1.61 -b 0x00200000 zImage_olo
RedBoot>fis unlock -f 0xc0040000 -l 0x00200000
RedBoot>fis create -b 0x00200000 -l 0x00200000 zImage

注解如下:
fis 是RedBoot FIS(Flash Image System)相关命令。
RedBoot>fis init
初始化FIS目录,-f表示将所有的flash空间初始化

RedBoot>load -v -r -m tftp -h 172.16.1.61 -b 0x00200000 zImage_olo
将zImage_olo这个文件从tftp上copy到RAM 0x00200000 处。

RedBoot>fis unlock -f 0xc0040000 -l 0x00200000
解除flash空间的锁定,-f flash_address,-l length

RedBoot>fis create -b 0x00200000 -l 0x00200000 zImage
在FIS(Flash Image System)目录中创建一个映象,将当前RAM中的数据写入FLASH存储器中。因此,在使用该命令之前,映象文件数据必须已经保存在RAM中。
-b:待写入flash数据的存放地址(RAM地址)
-l:长度
zImage:创建映象的名称
Sam想,为什么没有用 -f(flash地址),是因为上一句指令指定了unlock的flash.所以缺省放在那了。

2.2 准备rootfs在nfs中:


进入redboot config
RedBoot>fconfig
>>fis load zImage
>>exec -c "console=ttyS0,115200 mem=100M@0 root=/dev/nfs nfsroot=172.16.1.61:/home/sam/Intel, nolock ip=dhcp" 0x200000


3. kernel和rootfs全部烧入NOR flash中(重点)
3.1把Kernel(zImage)和rootfs(busybox_media.jffs2)放到/tftpboot中。

3.2ctrl-c进入redboot模式。
3.3烧入:
RedBoot〉fis init
RedBoot〉load -v -r -m tftp -h 172.16.1.61 -b 0x00200000 zImage_olo
RedBoot〉load -v -r -m tftp -h 172.16.1.61 -b 0x01000000 busybox_media.jffs2
RedBoot〉fis unlock -f 0xc0040000 -l 0x00200000
RedBoot〉fis create -b 0x00200000 -l 0x00200000 zImage
RedBoot〉fis create -f 0xc0240000 -l 0x01d80000 -n root
RedBoot〉fis unlock -f 0xc0240000 -l 0x01d80000
RedBoot〉fis erase -f 0xc0240000 -l 0x01d80000
RedBoot〉fis write -f 0xc0240000 -l xxxxxx -b 0x01000000


注意:xxxxxx是rootfs的长度,需要经过计算得到
也就是在load -v -r -m tftp -h 172.16.1.61 -b 0x01000000 busybox_media.jffs2之后,
看到其输出:Raw file loaded 0x01000000-0x01e5ffff
则长度为:0x01e5ffff-0x01000000+1=0xE60000
RedBoot〉fis write -f 0xc0240000 -l 0xE60000 -b 0x01000000


讲解如下:
RedBoot〉fis init
RedBoot〉load -v -r -m tftp -h 172.16.1.61 -b 0x00200000 zImage_olo
RedBoot〉load -v -r -m tftp -h 172.16.1.61 -b 0x01000000 busybox_media.jffs2

初始化FIS目录。并把zImage_olo和rootfs分别放到RAM 0x200000和0x1000000位置。

fis unlock -f 0xc0040000 -l 0x00200000
解除flash空间的锁定

RedBoot〉fis create -b 0x00200000 -l 0x00200000 zImage
RedBoot〉fis create -f 0xc0240000 -l 0x01d80000 -n root

将RAM中0x00200000处的东西(zImage)放到Flash xC0040000处. 并创建名为zImage的分区。
在Flash起始地址0xc0240000 创建为root分区。

RedBoot〉fis unlock -f 0xc0240000 -l 0x01d80000
RedBoot〉fis erase -f 0xc0240000 -l 0x01d80000
RedBoot〉fis write -f 0xc0240000 -l xxxxxx -b 0x01000000

把root分区所在flash解压缩。
把root分区所在Flash Erase.
把RAM 0x01000000的东西(rootfs)放到0xc0240000的FLASH中。

至此:把kernel和rootfs放到flash各自区域中了。


3.4进入redboot config
RedBoot〉fconfig
>>fis load zImage
>> exec -c "console=ttyS0,115200 mem=100M@0 rootfstype=jffs2 rootflags=noatime root=/dev/mtdblock2 rw" 0x200000

一切正常。

你可能感兴趣的:(bootloader技术,flash,linux内核,server,image,system,redhat)