嵌入式uClinux和Ubuntu9.10上NFS实验

时间:2022-02-28 14:41:02

经历了两天的时间的NFS文件系统工作,终于在我的FPGA开发板DE2上的uClinux和Ubuntu9.10上做好了NFS文件系统,现在总结一下,便于以后自己的学习。

一、理论篇

1、什么是NFS?

     NFS是Network File System(网络文件系统)的缩写,最初是由Sun公司开发出来的分布式文件系统。提供NFS服务的一方是NFS Server(远程主机),使用NFS服务的一方是NFS Client(客户机)。利用它,客户机可以将远程主机提供的共享目录挂载到自己的目录上,在本地的操作如同对远程主机的操作。

2、NFS的原理

     NFS有自己的协议与端口号(2049),它本身并没有提供传输资料的协议,但是NFS却能通过网络进行资料的共享。这是因为在资料传送或者其它相关数据交互的时候,NFS用远程过程调用(Remote Procedure Call, RPC)的传输协议。RPC服务portmap负责管理服务与相关端口映射的工作。因此,使用NFS服务必须先激活RPC服务portmap,在主机和目标机上都要实现RPC服务,才可以使用NFS。

二、实践篇

1、服务器(主机)上的配置

参考的资源如下:

简单介绍在Ubuntu 9.10 上成功配置NFS 过程

Ubuntu 9.10 下ARM开发板的NFS挂载

1.1、root下,配置NFS需要的软件包,命令如下:

     sudo apt-get install nfs-kernel-server nfs-common portmap

1.2、配置portmap(其实这一步在Ubuntu里面可以省略),命令如下:

     sudo dpkg-reconfigure portmap 出现界面,选“否”

1.3、配置挂载目录和权限,如下图所示:增加自己挂载的目录,这里为/home/nios2(当然之前你需要mkdir /home/nios2)

嵌入式uClinux和Ubuntu9.10上NFS实验 

rw:读写权限   ro:只读权限

no_root_squash:如果是root使用共享目录,那么他的权限将被压缩成匿名者。

sync:资料同步写入内存与硬盘中

async:资料会暂存于内存当中,而不会直接写入硬盘

前面的*表示任何ip段的客户机都可以访问共享文件。

1.4、刷新重载一下exports文件

     sudo exportfs –r

1.5、重新启动NFS服务

        /etc/init.d/portmap  restart

        /etc/init.d/ nfs-kernel-server restart

1.6 、测试能否挂载本地的目录

        mount –t –nfs 192.168.1.110:/home/nios2 /mnt

        ls /mnt

嵌入式uClinux和Ubuntu9.10上NFS实验

同时,你也可以运用df命令来观察挂载的内容

嵌入式uClinux和Ubuntu9.10上NFS实验

你就可以发现/mnt目录下挂载了/home/nios2的内容。至此,主机上的配置就完成。

2、目标机(嵌入式开发板FPGA开发板的配置)

参考资源如下:

嵌入式uClinux应用程序的NFS开发

NFS File System(WIKI)

     由于我之前做过一个实验就是测试EtherNet的实验,在开发板和主机之前是相通的,并且开通了boa服务器,ftp服务器,所以硬件连接方面就没有问题。同时,由于我只是将主机和开发板直连,就不涉及到网关的概念啦!所以在开发板上就很容易就成功了!

2.1、配置uClinux的内核,让它支持客户机NFS文件系统

通过命令:make menuconfig进入内核配置界面,界面如下:

嵌入式uClinux和Ubuntu9.10上NFS实验

exit---exit---yes,进入到内核子界面,如下:进入File systems -> Network File Systems -->,选择如下图所示:

嵌入式uClinux和Ubuntu9.10上NFS实验 

之后,退出,进入下一个用户应用和库设定界面,Network Applications -->[*] portmap,如下图所示: 

嵌入式uClinux和Ubuntu9.10上NFS实验

之后,make,编译内核生成内核镜像,下载到开发板DE2上。

2.2 下载开发板,挂载主机中的目录

通过nios2-configure-sof DE2_NIOS2.sof和nios2-download –g zImage和nios2-terminal启动DE2开发板上的uClinux系统,关于开发板网络通信的实验稍后再写一篇文章吧!

我们首先运行portmap命令和自己建立一个挂载的文件夹:

portmap &

mkdir /ff

之后再将主机上/home/nios2的内容挂载到新建立的文件中,表示NFS文件系统挂载成功。如下图所示

嵌入式uClinux和Ubuntu9.10上NFS实验

可以看到新建立的ff里面有了/home/nios2里面的东西,说明成功啦!但是,我们第一次的命令出现RPC错误,可能是硬件上碰了一下吧,一般都会成功的。

2.3、测试软件代码是否运行成功。

上面的hi.c就是在Ubuntu里面利用下面命令生成的hi可执行文件,这个文件在Ubuntu里面是执行不了,引用用的编译命令是nios2-linux-uclibc-gcc,不是linux下的命令,是一种

交叉命令。

nios2-linux-uclibc-gcc hi.c -o hi –elf2flt

嵌入式uClinux和Ubuntu9.10上NFS实验 

总结:

1、理论上其实没有多少难点,关键在于首先要虚心看懂理论,切勿盲目开始做,因为你很有可能网上搜到的资料都不适合你的开发环境,所以理论知识很重要,需要静下心来学习。

2、内核编译切勿乱添加东西,之前,我添加了一个客户机根目录NFS系统文件,后来,发现连/etc/rc里面的网卡配置都不好用,让我弄了一个多晚上,最终找到原因啦。这里,如果你想一启动就挂在的话,就把上面的命令添加到/etc/rc里面,就可以啦!

3、linux之路还有很长的路,下次准备做一下web服务器的实验,boa好像自带就有,希望自己搭建一个socket的服务器。