NFS ROOT 启动内核的配置(RedBoot)

来源:互联网 发布:phpget 多个数据 编辑:程序博客网 时间:2024/05/21 19:24

 

NFS ROOT 启动内核的配置(RedBoot)

do2jiangdo2jiang@gmail.com

蒋冬冬,版权所有 转载加注

在一般的嵌入式系统开发中经常需要烧写内核文件和文件系统映像,为了保护和节省片子的烧写次数,为了方便我们开发的过程节省浪费在烧写上的时间,更多的是方便我们的开发不至于把系统上的文件搞的乱七八糟其实,其实当我们的内核变大,板子Flash无法容纳内核和文件系统的时候,NFSROOT是个好的解决方案。

因此想试试使用NFS ROOT

 

1.      确认HOST机器的NFS服务已经配置完好!具体配置不在此处进行说明,请参考专门介绍的文档。但是,配置完毕后,一定要进行挂载确认。我选择两种确认方法:

A.     HOST机器上自己挂:mount –t nfs 192.168.118.159:/work/ep9302/nfsroot /mnt/nfs

B.     在烧写了flash的开发板上试挂: mount –t nfs –o nolock 192.168.118.159:/work/ep9302/nfsroot /mnt/nfs

C.     B操作最棘手的问题是出现这个错误:

warning: mount version older than kernel
NFS:mount program didn't pass remote address
mount:Mounting 192.168.118.159:/work/ep9302/nfsroot on /mnt/nfs failed:Invalid argument

解决方法:

mount -t nfs -o nolock,ro,nfsvers=2 192.168.118.159:/ work/ep9302/nfsroot /mnt/nfs

 

2.      必需開啟下面Kernel Config

n        Networking Options

(*)TCP/IP networking

(*)IP: kernel level autoconfiguration

(*)IP: DHCP support

(*)IP: Bootp support

(*)IP: Rarp support

 

n        File systems

l      Network File Systems

(*)NFS file system support

(*)Root file system on NFS

 

3.      开启TFTP服务器,通目录下放置vmlinux文件

Host机器上设置NFS文件夹,方法如下:

mount –o loop ramdisk /work/ep9302/nfsroot

 

4.      启动开发板,Ctrl+C进入Bootloader(在此以RedBoot为例)

因为,RedBoot的例子在网上很少,Uboot的例子很容易找到!感谢您理解!

RedBoot> load -m tftp -h 192.168.118.157 -b 0x80000 vmlinux

RedBoot> exec -c "console=ttyAM0,57600 root=/dev/nfsroot nfsroot=192.168.118.159:/work/ep9302/nfsroot ip=192.168.118.160:192.168.118.159:192.168.118.3:255.255.255.0  init=0x1000000"(注意:上述字串之间是没有任何回车符号的,在此仅为word中的显示)

 

5.      Looking up port of RPC 100003/2 on 192.168.118.159

Looking up port of RPC 100005/1 on 192.168.118.159

在现实上述两句之后可能稍微得等上两分钟,请耐心,心急吃不了热豆腐!

6.      你幸运的话,到此,你的NFSROOT配置完毕!

7.      如果你不幸运,出现下述错误依旧的话,很大的原因在上述设置的粗心,请仔细检查!Thank you Read My Documentation

ERRORVFS: Cannot open root device "nfs" or 00:ff

Please append a correct "root=" boot option
Kernel panic: VFS: Unable to mount root fs on 00:ff

 

关于RedBoot的两句参数的意思,第一句相当简单,tftp加载内核文件。

第二句具体参数的意思请查看linux2.x.x/Documentation/nfsroot.txt

 

到此,可能有人会问,为什么使用vmlinux,不用zImage呢?

这个时候你有必要知道linux的几种内核映像:

整体系统包括两个部分

1. redboot, 属于Ecos(V2.0)的一部分

2. linux kernel + rootfs 映象 (.gz)

  每次对内核编译会产生三个有用的文件

²       kersrc/vmlinux 是个未经压缩的ELF文档, 能够通过tftp load启动, loader 地址为 RAM_BASE + 0x00100000, kersrc/arch/xxx/vmlinux.lds决定

²       kersrc/arch/xxx/boot/compress/vmlinux 一个经过压缩的ELF文档, 能够通过tftp load启动, loader 地址为 RAM_BASE + 0x00500000, kersrc/arch/xxx/boot/compress/Makefile 决定  

²       kersrc/arch/xxx/boot/zImage 是个从 kersrc/arch/xxx/boot/compress/vmlinux OBJCOPY的来得BIN文档, 用于写入flash

注意:

kernel + rootfs (kersrc/vmlinux) 小于 5M , tftp load fis load 均无问题;

kernel + rootfs (kersrc/vmlinux) 大于 5M 时,kersrc/vmlinux load -m tftp 能够正常启动

kersrc/arch/xxx/boot/compress/vmlinux load -m tftp 无反应

主要显示信息如下:

Redboot infomation (大于 5M)

RAM: 0x90000000 - 0x91000000, 0x90015208 - 0x90fdd000 available

FLASH: 0x80000000 - 0x81000000, 128 blocks of 0x00020000 bytes each.

... ...