在嵌入式开发中常常用到NFS服务NFS服务就是将宿主机的一个目录通过网络可以被挂载到其他计算机上,并且作为其他计算机的一个目录。在应用程序开发过程中,NFS方式比ftp方式的效率要高,因为它不需要将linux server端的程序下载到嵌入式目标系统就可以调试。我们通过NFS可以很方便的将修改的文件通过NFS传输到目标板上。
使用RedHat Linux 9中的第1张光盘。以下是root登录操作:
(1)需要安装下面两个文件
# rpm -ivh nfs-utils-1.0.1-2.9.i386.rpm portmap-4.0-54.i386.rpm
portmap监控程序只是定向RPC通信数据流,使NFS客户机找到从NFS服务器共享的目录。
(2)修改NFS配置文件
# vi /etc/exports
配置格式为: 要输出的共享目录 客户端主机地址 (设置选择)
如加上如下一行
/home/liuby/rootfs 59.64.155.*(syncro) 192.168.*.*(syncrw) 192.168.0.254(syncrwno_root_squash)
其中/home/liuby/rootfs 是共享目录
sync表示同步写磁盘,ro是只读,rw是读写,参数间用逗号隔开
no_root_squash此参数用来要求服务器答应远程系统以它自己的root特权存取该目录。就是说,如果用户是root,那么他就对这个共享目录有root的权限。很明显,该参数授予了目标板很大的权利。
(3)启动NFS服务
# mkdir /home/liuby/rootfs
# chmod 777 /home/liuby/rootfs
# service portmap start
# service nfs start
(4)根据需要设置在相应的运行级别自动启动NFS:
# chkconfig --level 35 portmap on
# chkconfig --level 35 nfs on
注: 到此配置已经完成
修改了etc/exports而不想重新启动nfs只需运行# exportfs -rv 即可
查看NFS中共享目录
# exportfs -av
(5)本地测试
# mount 192.168.0.2:/home/liuby/rootfs /mnt/cdrom/
# ls /mnt/cdrom/
# cp or rm ......
# umount /mnt/cdrom
注重检查系统的iptables、/etc/hosts.allow、/etc/hosts.deny是否设置了准确的NFS访问规则
(6)客户端测试
powerpc板联网ip为192.168.0.254(kernel: NFS System support和Provide NFSv3 client support)
以下操作在目标板上
# mkdir /mnt/nfs
# mount -o nolockrw -t nfs 192.168.0.2:/home/liuby/rootfs /mnt/nfs
由于很多嵌入式设备的根文件系统中不带portmap,所以一般都使用-o nolock参数,即不使用NFS文件锁,这样就可以避免使用portmap。如果顺利,在/mnt/nfs下,就可以看到linux server的共享文件夹下的内容了,而且两个文件夹内的修改是同步的。
如果nsf_server上/home/liuby/rootfs下有一powerpc-linux-gcc编译的helloworld.o,可以直接执行
# ls /mnt/nfs/helloworld.o
# ./helloworld.o
同样下载zImage等。
# umount /mnt/nfs
(7)客户端常用命令
NFS客户端挂载命令
# mount NFS地址:共享目录 本地挂载点
# mount -o nolock -t nfs :/home/nfs /mnt/nfs
查看是否成功(显示挂载服务器的已连接目录)(或进/mnt查看)
# showmount -d [NFS地址]
显示指定NFS的客户端主机机器及其所挂目录
# showmount -a [NFS地址]
卸载
# umount 挂载点
+++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++ NFS +++++++++++++++++++++++
以下主要是开发板设置,开发板要支持nfs mount需要在编译内核时选择以下模块:
Networking -> Networking options ->
[*] IP: kernel evelautoconfiguration
[ ] IP: DHCP support
[*]IP: BOOTP support
[ ] IP: RARP support
File systems ->Network File Systems ->
NFS file system support
[*] Provide NFSv3 client support
[*] Root file system on NFS
一般mount命令是由busybox来提供的,在编译busybox时也需要有以下选项:
linux system utilities->
[*] mount
[*] support mounting nfs filesystems
通过以上设置,以及服务器(192.168.0.2)设置,可以在开发板测试
# mount -t nfs 192.168.0.2:/home/liuby/rootfs /mnt/nfs
这个会mount成功,但出现以下信息:
portmap: server localhost not responding timed out
RPC: failed to contact portmap (errno -5).
这需要加上mount的选项-o nolock关闭文件锁
# mount -t nfs -o nolock 192.168.0.2:/home/liuby/rootfs /mnt/nfs
不会出现任何信息,mount成功挂载。
# umount /mnt/nfs
+++++++++++++++++++++++++++++++++++++++++++++++
***********************************************
下面附加一篇别人的总结:
来源:http://tensing.blog.sohuwww.dianbiaowang.com/77399040.htm
1 建立NFS开发环境
嵌入式linux的NFS开发环境包含着两个方面:一是linux server端的NFS Server支持;二是target board的NFS Client支持。
1.1 linux server端
1.1.1 以root的身份登录,编译共享目录的配置文件exports,指定共享目录及其权限。
#vi /etc/exports
在该文件中添加:
/home/lqm(共享目录) 192.168.1.*(rwsyncno_root_squash)
添加的内容表示答应IP范围在192.168.1.*的计算机以读写的权限来访问共享目录/home/lqm。
【注:参数说明如下:
rw---读/写权限。如果设定只读权限,则设为ro。但是一般情况下,为了方便交互,要设置为rw。
sync--数据同步写入内存和硬盘。