关于NFS的在嵌入式开发中的使用

时间:2022-06-21 21:09:59

1. NFS简介
NFS是Network FileSystem的缩写,NFS是由Sun开发并发展起来的一项用于在不同机器,不同操作系统之间通过网络互相分享文件的技术。NFS可以让你的PC通过网络将远端的NFS 服务器共享出来的文件mount到自己的系统中,在客户端看来使用NFS的远端文件就象是在使用本地文件一样。 使用NFS可以使应用程序的开发变得十分方便, 客户端不需要大容量的存储器,更不需要进行映像文件的烧录和下载,只要mount到服务器端的特定目录下,然后运行该目录下的程序即可观察到结果。建立NFS开发环境的工作分为两个方面,配置NFS服务器和配置客户端。

2.配置NFS服务器端

2.1确认主机安装了NFS
服务方法是查看/etc/rc.d/init.d目录下是否有nfs文件,如果有说明主机已经安装了nfs服务。

2.2编辑/etc/exports文件
服务器端在文件/etc/exports中设定允许被访问的文件、目录以及访问的权限。设定格式如下:
欲分享出去的目录 主机名称 或者IP (参数1,参数2)
可以设定的参数主要有以下这些:
rw:可读写的权限;
ro:只读的权限;
sync:资料同步写入存储器中。
async:资料会先暂时存放在内存中,不会直接写入硬盘。
例如可以编辑/etc/exports为: /home/test  192.168.0.100(rw)

2.3使/etc/exports文件的修改生效

在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs命令来使改动立刻生效,该命令格式如下: exportfs [-aruv]
-a :全部mount或者unmount /etc/exports中的内容
-r :重新mount /etc/exports中分享出来的目录
-u :umount 目录
-v :在 export 的時候,将详细的信息输出到屏幕上。
具体例子: exportfs –rv这个命令行要求全部重新输出一次。
在每次修改了/etc/exports文件后都要运行一次该命令。

2.4启动NFS服务
现在就可以启动NFS服务了:/etc/rc.d/init.d/nfs start
如果要停止NFS服务:/etc/rc.d/init.d/nfs stop
重新启动(停止后再启动,在修改/etc/exports之后使用)命令:/etc/rc.d/init.d/nfs restart

3.配置客户端 (ARM 板)

3.1配置内核
进入File Systems --->选项选中:

NFS file system support
Provide NFSv3 client support
3.2配置用户选项
进入Network Applications ---> 选项选中:
portmap进入BusyBox --->选项选中:
mount
mount:support NFS mounts完成以上配置后,即可编译产生映像文件。


4.NFS的应用

4.1启动portmap服务器
用串口线和网线连接好主机和开发板。启动信息成功显示后,输入:/> portmap &
【portmap】NFS本身没有提供信息传输的协议和功能,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了RPC(Remote Procedure Call远端程序呼叫)的功能。客户端通过网路传送RPC到远端电脑,请求服务。这里,portmap是一个server,主要功能是将TCP/IP 通讯协议中的端口号转换为RPC程序号,这样客户端才能完成RPC呼叫。

4.2挂载到主机
通过以下命令行,挂载到主机上:
/>mount –t nfs –o rsize=1024,wsize=1024,timeo=3,udp 192.168.253.1:/opt/uClinux-dist/user/Myapp /var/tmp
命令行的参数是必要的,能够改善NFS下应用程序运行的速度。当出现下一个/>时,mount成功,接下来就可以按读写本地文件的方式读写远端文件系统了 

我用的开发板是UP-netARM2410。我的配置以及遇到的问题的解决如下:

 在你的linux上nfs可以通过图形化的方式设置,也可以直接对etc/exports进行编辑。
输入 /arm2410dev   192.168.0.*(rw,sync,no_root_squash)
就是设置/arm2410dev 位共享目录,并且允许192.168.0.*的所有机器都可以访问,设置权限为读写,

启动nfs服务
/sbin/service nfs start     确保NFS服务已经启动
然后在用超级终端上连接arm板,执行命令:
mount -t nfs -o nolock 192.168.0.10:/arm2410dev  /host
然后退出/host
在进入/host 就可以看到主机/arm2410dev下的东西了

如果在超级终端上执行mount命令时出现一下错误:

mount:RPC:Unable to receive; eNrno=connetionF refused
mountS nfsmount faile:d: bad f le descriptor
mount program didn't pass remote address!
mount:mounting 192.168.0.10:/ on /tmp failed:invalid agument
请修改linux的安全级别为“无防火墙”

相关文章