Intel CE2110上Redboot的使用
Sam很早之前使用過(guò)redboot。后來(lái)很快忘記如何使用了。 之后在Intel CE2110以及 CE3100上使用了redboot.結(jié)果現(xiàn)在有段時(shí)間不用,又忘記了。只好再看一遍。這次能記得住嗎?光頭葛說(shuō):我看(不)行! Redboot簡(jiǎn)介: Redboot是Redhat公司隨eCos發(fā)布的一個(gè)BOOT方案,是一個(gè)開(kāi)源項(xiàng)目。 Redboot支持的處理器構(gòu)架有ARM,MIPS,MN10300,PowerPC, Renesas SHx,v850,x86等,是一個(gè)完善的嵌入式系統(tǒng)Boot Loader。 Redboot是在ECOS的基礎(chǔ)上剝離出來(lái)的,繼承了ECOS的簡(jiǎn)潔、輕巧、可靈活配置、穩(wěn)定可靠等 品質(zhì)優(yōu)點(diǎn)。它可以使用X-modem或Y-modem協(xié)議經(jīng)由串口下載,也可以經(jīng)由以太網(wǎng)口通過(guò) BOOTP/DHCP服務(wù)獲得IP參數(shù),使用TFTP方式下載程序映像文件,常用于調(diào)試支持和系統(tǒng)初始化。 RedBoot的基本用法: 1. 進(jìn)入Redboot 設(shè)置界面: 在Intel-CE2110重新啟動(dòng)時(shí),按下Ctrl+C。 則進(jìn)入Redboot配置模式下。 出現(xiàn)以下提示符,表明進(jìn)入RedBoot設(shè)置界面。 RedBoot> 在此界面下,可以使用RedBoot命令執(zhí)行操作。 2. 修改RedBoot boot script。此script將被RedBoot在啟動(dòng)時(shí)使用。 首先進(jìn)入RedBoot boot script edit界面。 RedBoot> fconfig 則出現(xiàn): >> 在這里輸入: RedBoot boot script內(nèi)容。 若發(fā)現(xiàn)fconfig后,出現(xiàn)莫名其妙的錯(cuò)誤,可以清空boot script,方法: RedBoot>fconfig -i Intel CE2110上,按照kernel和rootfs放置的不同方式,有3種啟動(dòng)方式(與CE3100很類(lèi)似): 1. kernel和rootfs全部放置在tftp server上。 2. kernel燒入到NOR flash中,rootfs則使用 nfs server中的。 3. kernel和rootfs全部燒入NOR flash中。 前2種方式在開(kāi)發(fā)階段非常有用??梢钥焖傩薷膋ernel和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使用這個(gè)辦法時(shí)總有問(wèn)題。顯示亂碼。) 現(xiàn)講解命令如下: load: 下載數(shù)據(jù)到目標(biāo)系統(tǒng)RAM中. -v: 下載過(guò)程顯示進(jìn)度 -r: 下載未處理的數(shù)據(jù)到RAM -b: 數(shù)據(jù)下載到RAM的地址 -m: 方式 -h: host exec: 執(zhí)行一個(gè)映象文件,如引導(dǎo)Linux內(nèi)核 -r: 傳遞給內(nèi)核的ramdisk_address起始地址 -s: 傳遞給內(nèi)核的ramdisk_address長(zhǎng)度 -b: 內(nèi)核映象文件地址 -l: 內(nèi)核映象文件長(zhǎng)度 -c: 傳遞給內(nèi)核的命令行 2. kernel燒入到NOR flash中,rootfs則使用 nfs server中的。 (Sam還是有問(wèn)題) 2.1. kernel burn 到flash。 2.1.1 把新kernel--zImage放到/tftpboot 2.1.2 Ctrl-c 進(jìn)入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)相關(guān)命令。 RedBoot>fis init 初始化FIS目錄,-f表示將所有的flash空間初始化 RedBoot>load -v -r -m tftp -h 172.16.1.61 -b 0x00200000 zImage_olo 將zImage_olo這個(gè)文件從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)目錄中創(chuàng)建一個(gè)映象,將當(dāng)前RAM中的數(shù)據(jù)寫(xiě)入FLASH存儲(chǔ)器中。因此,在使用該命令之前,映象文件數(shù)據(jù)必須已經(jīng)保存在RAM中。 -b:待寫(xiě)入flash數(shù)據(jù)的存放地址(RAM地址) -l:長(zhǎng)度 zImage:創(chuàng)建映象的名稱(chēng) Sam想,為什么沒(méi)有用 -f(flash地址),是因?yàn)樯弦痪渲噶钪付藆nlock的flash.所以缺省放在那了。 2.2 準(zhǔn)備rootfs在nfs中: 進(jìn)入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中(重點(diǎn)) 3.1把Kernel(zImage)和rootfs(busybox_media.jffs2)放到/tftpboot中。 3.2ctrl-c進(jìn)入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的長(zhǎng)度,需要經(jīng)過(guò)計(jì)算得到 也就是在load -v -r -m tftp -h 172.16.1.61 -b 0x01000000 busybox_media.jffs2之后, 看到其輸出:Raw file loaded 0x01000000-0x01e5ffff 則長(zhǎng)度為: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處. 并創(chuàng)建名為zImage的分區(qū)。 在Flash起始地址0xc0240000 創(chuàng)建為root分區(qū)。 RedBoot〉fis unlock -f 0xc0240000 -l 0x01d80000 RedBoot〉fis erase -f 0xc0240000 -l 0x01d80000 RedBoot〉fis write -f 0xc0240000 -l xxxxxx -b 0x01000000 把root分區(qū)所在flash解壓縮。 把root分區(qū)所在Flash Erase. 把RAM 0x01000000的東西(rootfs)放到0xc0240000的FLASH中。 至此:把kernel和rootfs放到flash各自區(qū)域中了。 3.4進(jìn)入redboot config RedBoot〉fconfig >>fis load zImage >> exec -c "console=ttyS0,115200 mem=100M@0 rootfstype=jffs2 rootflags=noatime root=/dev/mtdblock2 rw" 0x200000 一切正常。 |
|