Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1676277
  • 博文数量: 311
  • 博客积分: 7778
  • 博客等级: 少将
  • 技术积分: 4186
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-09 19:59
个人简介

蓝点工坊(http://www.bluedrum.cn) 创始人,App和嵌入式产品开发。同时也做相应培训和外包工作。 详细介绍 http://pan.baidu.com/s/1y2g88

文章存档

2012年(3)

2011年(115)

2010年(170)

2009年(23)

分类: 嵌入式

2009-12-07 00:16:08

    嵌入式Linux 下,NFS是一个重要应用.在开发板mount 到一个NFS服务器上,就相当于把远程的NFS目录当开发一个目录,可以修改,打开和运行程序.这样不需要拷贝即可运行程序,而且可以减少Flash 的损耗。在嵌入式LINUX应用相当广泛。以下是开发中使用NFS的一些问题。
 
  • Redhat 9.0 启用NFS服务器后,启动时间变得很长
因为每次客户端mount过NFS而又没有正常umount后,在/var/lib/nfs/rmtab里会留下记录,每次NFS启动的时候都会去check以前的IP,如果不通,要等到timeout才行 。解决办法:把这个文件/var/lib/nfs/rmtab删除。下次重启就再去做检测了。
 
 
  •    Windows下可以使用NFS服务器
  
  可以试试 Allego NFS Server,本身体积不大。但是经我测试,可以在在开发板共享WINDOWS目录,也能远程运行WINDOWS文件系统的ARM LINUX程序。唯一不足是一个商业版软件。
  • 开发板联接NFS服务器
要用busybox 下的mount 命令(并且把NFS support 选项打开)
如果对端是redhat 9.0,只要简单的执行下列命令即可。
   mount –o nolock 192.168.1.145:/home/hxy /mnt
 
上一句表示把NFS服务器(192.168.1.145)上的/home/hxy 挂载到/mnt 上。
 
如果对端是RHEL NFS服务器,需要更加复杂执行语句,其中-t nfs 好象要必加,否则一执行文件读写操作就会报No response。
  mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.3.107:/home/hxy /mnt
 
另外,NFS服务器上共享目录一定要打开"将远程根目录用户视为本地根目录用户",否则mount后的路径只能只读
 
  • 用NFS启动根文件系统
这个要修改LINUX的启动参数来完成。下面是一般教程介绍的完整的NFS启动参数
 
console=ttySAC0 root=/dev/nfs nfsroot=192.168.0.146:/home/root_nfs ip=192.168.0.231:192.168.0.146:192.168.0.146:255.255.255.0:sbc2440.arm9.net:eth0:off
 
但实际上不用这么复杂,我在教学和实际开发里都是采用简化参数
console=noinitrd ttySAC0 root=/dev/nfs nfsroot=192.168.3.77:/home/root_nfs ip=192.168.3.230
其中nfsroot是NFS路径,ip是开发板路径。这一种启动方法的一个要求就是开发板启动根文件系统后。用ifconfig 设置IP时,要用设成与ip=192.168.3.230 这个IP相同的值,否则启动一半就会停下来。一般的开发板是启动时找/etc/init.d/rcS,在这里要加入
       ifconfig eth0 192.168.3.230
 
   补充新一则:
缺省网关的对NFS的影响.

   近日在上课时时的点对点的NFS环境中,(即开发板通过交叉网线直接与笔记本上的虚拟机的RHEL5的NFS服务器联接).
多次检查自己网络环境,各个设备都能互相ping.本地检查NFS也能mount上。但是就是开发板连不上NFS的服务器。
    在课堂演示无数次NFS连接开发板。无奈之下,只能用WireShark截包分板NFS服务器和开发板之间发生了什么事。一抓之下,发现NFS服务器在两者建立联接后,会首先发一个ARP广播包,查找缺省网关192.168.1.但是是封闭环境。因此网关不可能响应,NFS服务器就停止了后续动作。
   用route del default 命令来临时删除缺省网关后,问题得得到解决,但是原因相当奇怪。

补充二.
再补充一个NFS的影响。
  停止NFS报错

nfsd: last server has exited
nfsd: unexporting all filesystems

启动也NFS报错,并且无法正常联接:
  RPC: failed to contact local rpcbind server (errno 5).
NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory
NFSD: unable to find recovery directory /var/lib/nfs/v4recovery
NFSD: starting 90-second grace period

这是机器死重启的错误,后来发现,原来是portmap未启动,
只要启动启动portmap 再重启nfs即可.

service portmap start
service nfs stop
service nfs start

    
    
  补充三: 关于根文件系统引导时提示"Root-NFS: Server returned error -13 while mounting XXXXX"
   这个错误产生原因较多,如果是权限检查没有问题。在Linux 下使用minicom 时最常见的问题是多行拷贝命令时
  丢失空格。
setenv bootargs " noinitrd console=ttySAC0 root=/dev/nfs
 _____nfsroot=192.168.3.11:/home/rootfs
  _____ip=192.168.3.20:192.168.3.11:192.168.3.11:255.255.255.0 "

  即每行前红色处多加一些空格,即可解决这个问


    
阅读(2557) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~