经历了两天的时间的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、服务器(主机)上的配置
参考的资源如下:
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)
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
同时,你也可以运用df命令来观察挂载的内容
你就可以发现/mnt目录下挂载了/home/nios2的内容。至此,主机上的配置就完成。
2、目标机(嵌入式开发板FPGA开发板的配置)
参考资源如下:
由于我之前做过一个实验就是测试EtherNet的实验,在开发板和主机之前是相通的,并且开通了boa服务器,ftp服务器,所以硬件连接方面就没有问题。同时,由于我只是将主机和开发板直连,就不涉及到网关的概念啦!所以在开发板上就很容易就成功了!
2.1、配置uClinux的内核,让它支持客户机NFS文件系统
通过命令:make menuconfig进入内核配置界面,界面如下:
exit---exit---yes,进入到内核子界面,如下:进入File systems -> Network File Systems -->,选择如下图所示:
之后,退出,进入下一个用户应用和库设定界面,Network Applications -->[*] portmap,如下图所示:
之后,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文件系统挂载成功。如下图所示
可以看到新建立的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
总结:
1、理论上其实没有多少难点,关键在于首先要虚心看懂理论,切勿盲目开始做,因为你很有可能网上搜到的资料都不适合你的开发环境,所以理论知识很重要,需要静下心来学习。
2、内核编译切勿乱添加东西,之前,我添加了一个客户机根目录NFS系统文件,后来,发现连/etc/rc里面的网卡配置都不好用,让我弄了一个多晚上,最终找到原因啦。这里,如果你想一启动就挂在的话,就把上面的命令添加到/etc/rc里面,就可以啦!
3、linux之路还有很长的路,下次准备做一下web服务器的实验,boa好像自带就有,希望自己搭建一个socket的服务器。