|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
* ]; u& N# d5 n' L+ r, {
经历了两天的时间的NFS文件系统工作,终于在我的FPGA开发板DE2上的uClinux和Ubuntu9.10上做好了NFS文件系统,现在总结一下,便于以后自己的学习。) t5 j& { t5 w8 {" x6 d
# {+ E/ S) y0 n" P. R
一、理论篇
$ k. [' O0 t8 K7 o4 g& \1、什么是NFS?1 F1 A* z7 F; @
+ t* Q% }, \# E
NFS是Network File System(网络文件系统)的缩写,最初是由Sun公司开发出来的分布式文件系统。提供NFS服务的一方是NFS Server(远程主机),使用NFS服务的一方是NFS Client(客户机)。利用它,客户机可以将远程主机提供的共享目录挂载到自己的目录上,在本地的操作如同对远程主机的操作。9 ?: r8 I; s: \0 T1 R. g5 W# v% {5 E
, v# n8 e# a3 v2、NFS的原理
6 g& A7 Y: N- n2 j
: Y+ w8 v4 N1 e7 {" T4 J( M2 v NFS有自己的协议与端口号(2049),它本身并没有提供传输资料的协议,但是NFS却能通过网络进行资料的共享。这是因为在资料传送或者其它相关数据交互的时候,NFS用远程过程调用(Remote Procedure Call, RPC)的传输协议。RPC服务portmap负责管理服务与相关端口映射的工作。因此,使用NFS服务必须先激活RPC服务portmap,在主机和目标机上都要实现RPC服务,才可以使用NFS。
4 q6 Z2 g/ q# M# P/ i' H0 J) a2 C0 x- F8 Q" `
二、实践篇' H+ u0 p* G* N) y* `
1、服务器(主机)上的配置
% Z* y! O5 ]# U1 C8 U) S. h% c7 \! s9 D7 Z) _4 q
1.1、root下,配置NFS需要的软件包,命令如下:
( v3 s; V u9 Y4 S5 }8 E* D
" |% \* p- h; D0 F5 L8 G sudo apt-get install nfs-kernel-server nfs-common portmap
* C! t3 }% L3 S4 l* J) C# T# }* C3 \* D0 c
1.2、配置portmap(其实这一步在Ubuntu里面可以省略),命令如下:
0 h: j; ]' A& G. J( A5 o" J: A( Y( ^/ E2 M4 H* d2 T
sudo dpkg-reconfigure portmap 出现界面,选“否”
& i' p* r: N4 S
) X$ z% ]! k* i7 \4 P" `/ g$ h: @) w1.3、配置挂载目录和权限,如下图所示:增加自己挂载的目录,这里为/home/nios2(当然之前你需要mkdir /home/nios2)5 O6 S& d, t& h' @8 M5 B& g- A" T
9 F3 b2 J, G/ g+ M" r- t% Z( J; l, ~
0 N0 P* Z: h% P7 \' B! w0 |& X" u
rw:读写权限 ro:只读权限) K/ y0 {' J- m, q6 j# }
9 C5 w' u/ U" T9 V+ F
no_root_squash:如果是root使用共享目录,那么他的权限将被压缩成匿名者。
5 y" S5 U) L4 Q T+ `4 S5 x) f3 M: m0 {% ^
sync:资料同步写入内存与硬盘中
- \6 D% l7 c/ w9 b# _
% ]; g; |! _( s; ]" R% s, lasync:资料会暂存于内存当中,而不会直接写入硬盘
. g' U7 @6 ?6 m4 G! x( `7 V) h; x) W1 a) o) [3 L p( a7 ~9 v
前面的*表示任何ip段的客户机都可以访问共享文件。5 G9 K+ t, m4 O- h4 o
0 S( f# F9 s6 I7 \- K/ L5 b$ G1.4、刷新重载一下exports文件
$ b5 h* h- @( R, q% u
' N7 f1 M8 `/ g9 |5 N4 @ sudo exportfs –r& C$ r; o, |6 k3 h H& \
! Z1 P1 d% v7 d7 C# P1.5、重新启动NFS服务& I+ Z4 [% p7 C* q3 {
+ b- z. F6 F, t0 r
/etc/init.d/portmap restart
$ q+ K0 P! O0 M, t# f
- p5 m4 ], ?. @3 o$ Q2 H5 t# B /etc/init.d/ nfs-kernel-server restart) x6 z0 ^ r4 I5 t- B
1 { H6 b2 g1 ]0 ^" s
1.6 、测试能否挂载本地的目录
4 }9 F! l9 T; m D4 _7 t' L4 y7 J& p% r! w9 U4 ? }. @6 z
mount –t –nfs 192.168.1.110:/home/nios2 /mnt- Y5 M; T/ X( K' M3 |5 [( I
2 i. O+ }& g2 q1 K; Y2 |$ L$ R ls /mnt
6 f; l9 W$ M4 J3 [( J. P$ e+ n* V& z w: ~0 v0 g1 }6 @% }
9 c* P. R5 o2 s; c9 C8 c! |7 l0 X! e# m
同时,你也可以运用df命令来观察挂载的内容* ]+ R6 T2 M X! p2 u% I% F
; u/ c8 m7 m5 @) d
4 H/ I4 J4 j7 _; X: x& u
0 y4 @7 J/ n2 j2 Y& L3 L你就可以发现/mnt目录下挂载了/home/nios2的内容。至此,主机上的配置就完成。& b7 C% f' M1 B+ i3 L6 ]
8 z0 q& Q" Z- |5 O |; `2、目标机(嵌入式开发板FPGA开发板的配置)& [) w3 h1 L5 W( t$ r V
7 z ^$ |" H, T d
由于我之前做过一个实验就是测试EtherNet的实验,在开发板和主机之前是相通的,并且开通了boa服务器,ftp服务器,所以硬件连接方面就没有问题。同时,由于我只是将主机和开发板直连,就不涉及到网关的概念啦!所以在开发板上就很容易就成功了!, _' c- M1 R3 Y4 ]9 O; x* J' X
9 m7 C( o- Q. t6 T- X6 @6 ]
2.1、配置uClinux的内核,让它支持客户机NFS文件系统# U' |* ~- [% ]3 _$ k
/ _3 w" Y4 g" G: u通过命令:make menuconfig进入内核配置界面,界面如下:1 ?: h& k' i) x. ^" Y
" M0 @& x k0 n3 K
s" T7 A0 B( \. vexit---exit---yes,进入到内核子界面,如下:进入File systems -> Network File Systems -->,选择如下图所示:& e! h5 N$ s) }1 y9 L( o& \/ X6 e
( H0 L* m" ~* x' C: V
( C* z( f3 ^% K W& L之后,退出,进入下一个用户应用和库设定界面,Network Applications --> portmap,如下图所示:
: z4 D7 Z3 i$ H3 [( r, @" d
- F( C1 {8 m) i1 w" E
# ]& r3 e' N$ Y' o
0 P% }3 Y5 Q1 L! R+ i
之后,make,编译内核生成内核镜像,下载到开发板DE2上。
, Q- v+ T! s5 B1 z+ t( }; { U
: y$ u" e( b7 F* x/ [% M0 f& b/ |2.2 下载开发板,挂载主机中的目录
2 a" ^' S4 u; U: ?4 v3 ], r2 V" h- A' o$ d
通过nios2-configure-sof DE2_NIOS2.sof和nios2-download –g zImage和nios2-terminal启动DE2开发板上的uClinux系统,关于开发板网络通信的实验稍后再写一篇文章吧!/ ?7 N# `* [+ n; H
% X# v& }' G2 u我们首先运行portmap命令和自己建立一个挂载的文件夹:" n) N/ [7 o) j! F) J
/ | _* N9 U1 D8 a* t0 P% oportmap &
8 M) ~$ J4 N: } y, C# _! S- G+ m0 U; ?) @" {+ }- k% q6 E3 ?
mkdir /ff+ I6 x0 z1 I# |+ n7 `( ~& H' U. M
; |0 _; O& _' R
之后再将主机上/home/nios2的内容挂载到新建立的文件中,表示NFS文件系统挂载成功。如下图所示& H5 O5 f1 w* U {% f) J7 m' _
/ o- p d) @: H3 x
5 U0 r1 J$ H. ]+ M# X1 `4 ^ _2 ]! v2 y8 ^$ j* X7 j a0 v6 h
可以看到新建立的ff里面有了/home/nios2里面的东西,说明成功啦!但是,我们第一次的命令出现RPC错误,可能是硬件上碰了一下吧,一般都会成功的。2 y( A- ^' ]- s" X
! `4 V2 t8 O! m+ Q3 H. [4 L2.3、测试软件代码是否运行成功。
' y8 J+ v- ]& b" f& ^. Q$ M
+ N# z( S! x! B& z# a" ^上面的hi.c就是在Ubuntu里面利用下面命令生成的hi可执行文件,这个文件在Ubuntu里面是执行不了,引用用的编译命令是nios2-linux-uclibc-gcc,不是linux下的命令,是一种
, x* |3 ]7 }' T8 D3 r$ p6 h" f/ h" m7 ~5 @3 C6 O
交叉命令。
) w, |: G$ n6 {9 Z! V- X9 l2 \% ~1 ~; {! m+ H4 H& ~# m1 ~# x
nios2-linux-uclibc-gcc hi.c -o hi –elf2flt7 T. e$ W6 }+ m
9 H0 I' F8 ^. M4 V
+ Z4 f7 W& C$ x- A, U+ g+ Q( j$ t/ s n
总结: n7 e' e# q. L7 d( _+ g
1、理论上其实没有多少难点,关键在于首先要虚心看懂理论,切勿盲目开始做,因为你很有可能网上搜到的资料都不适合你的开发环境,所以理论知识很重要,需要静下心来学习。
0 o5 b, K# {" i3 h$ j
6 B- K( x, v G i; r2、内核编译切勿乱添加东西,之前,我添加了一个客户机根目录NFS系统文件,后来,发现连/etc/rc里面的网卡配置都不好用,让我弄了一个多晚上,最终找到原因啦。这里,如果你想一启动就挂在的话,就把上面的命令添加到/etc/rc里面,就可以啦!
3 `' u1 g/ n8 `! q( ~# p: m+ G+ ]1 h& x" [
3、linux之路还有很长的路,下次准备做一下web服务器的实验,boa好像自带就有,希望自己搭建一个socket的服务器。 |
|