赞
踩
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 一切正常。 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。