|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
0 }3 W) g2 C1 X; I
经历了两天的时间的NFS文件系统工作,终于在我的FPGA开发板DE2上的uClinux和Ubuntu9.10上做好了NFS文件系统,现在总结一下,便于以后自己的学习。: W& g) {3 C5 D
. ^6 y4 a0 k2 m+ g, ?# l一、理论篇" i/ G* f5 c9 }9 U: P8 l
1、什么是NFS?
$ K% U9 T) f% ~; s& a# F) F# g- Z2 y9 G
NFS是Network File System(网络文件系统)的缩写,最初是由Sun公司开发出来的分布式文件系统。提供NFS服务的一方是NFS Server(远程主机),使用NFS服务的一方是NFS Client(客户机)。利用它,客户机可以将远程主机提供的共享目录挂载到自己的目录上,在本地的操作如同对远程主机的操作。3 e) T; z' [7 k9 B. n& K
, H% O( |5 n* M! V3 k8 P2、NFS的原理( _1 n+ j% e" X5 P; a0 ^- } ^
+ u7 O0 c9 K0 \5 D6 d NFS有自己的协议与端口号(2049),它本身并没有提供传输资料的协议,但是NFS却能通过网络进行资料的共享。这是因为在资料传送或者其它相关数据交互的时候,NFS用远程过程调用(Remote Procedure Call, RPC)的传输协议。RPC服务portmap负责管理服务与相关端口映射的工作。因此,使用NFS服务必须先激活RPC服务portmap,在主机和目标机上都要实现RPC服务,才可以使用NFS。
# |1 Q, z; X0 J% A! M7 b& i
) Q: n/ A" ~% ?/ v1 M+ Y二、实践篇
% W% s1 H5 e) _1、服务器(主机)上的配置/ @5 r6 G8 w0 D7 O0 R
3 t6 m8 s+ F" X. P
1.1、root下,配置NFS需要的软件包,命令如下:
$ q- a& x# O2 ^- D: {- [; A; i/ {$ x) a2 c& Z2 E, W. z
sudo apt-get install nfs-kernel-server nfs-common portmap
& C9 @' n+ f. Q, E' M7 }/ |: u0 P% Z9 a8 ^: h4 H
1.2、配置portmap(其实这一步在Ubuntu里面可以省略),命令如下:
! r1 i2 R& h2 M, a; ]0 m R) v$ C& S! n" M! C
sudo dpkg-reconfigure portmap 出现界面,选“否”5 E `( y8 Q9 [( o
( Q, ~. V: P- F5 y" U8 }/ }+ t
1.3、配置挂载目录和权限,如下图所示:增加自己挂载的目录,这里为/home/nios2(当然之前你需要mkdir /home/nios2)
% _7 R1 ^8 R/ I( @2 {3 d" O4 x! f' I. j
# u: A7 u: V4 O7 f! N1 w1 M
4 J. z' e( i" Urw:读写权限 ro:只读权限
( g5 {1 ?2 r( z9 g" _& V) J( H0 `; C3 r u! x# R6 X
no_root_squash:如果是root使用共享目录,那么他的权限将被压缩成匿名者。
; } b5 d/ D8 e0 E+ s8 Y1 R% E* a: ^7 @% a y0 d
sync:资料同步写入内存与硬盘中
9 n1 S0 v& i+ P/ S; C% S5 t2 c% i ^; D
async:资料会暂存于内存当中,而不会直接写入硬盘0 v; T- p' J" _/ k' E4 c8 F c
0 [6 X! q6 S# Y) g1 l, k0 `. ^
前面的*表示任何ip段的客户机都可以访问共享文件。
2 _( _8 n+ t4 ^
4 b# E& v8 F- b+ e; N# ^1.4、刷新重载一下exports文件
( ]7 Q A" p% |: b. [/ j- c3 Q- J( x7 [/ j0 k! p9 r( I
sudo exportfs –r; G3 j+ o* b; Z1 s) j% ^2 ~0 h6 m
" Q4 V }: w1 q7 a( R1.5、重新启动NFS服务% d5 w6 c* t" D: C" C Q5 |
3 T. {9 R( D2 P' g; D+ ~
/etc/init.d/portmap restart
6 K4 B2 I+ s8 w7 z* K. g. [+ G+ C& F% k9 e
/etc/init.d/ nfs-kernel-server restart
' m8 a3 p! R9 C, t
" U5 v( t' e, F6 W3 O1.6 、测试能否挂载本地的目录
2 v! u" S. B5 ], I/ h# t
1 s: L$ f& K+ J6 L# x mount –t –nfs 192.168.1.110:/home/nios2 /mnt
' |( F4 e5 }% T
! v. Y+ m# t5 b0 ^ ls /mnt( R. l4 k8 k) v& B W
: p* n& {. r/ u5 H$ ]
: }# s' Q/ y$ I# f
/ D3 \4 d3 ?& w% m$ n0 d9 Z! [同时,你也可以运用df命令来观察挂载的内容! C1 |/ j* q2 l/ d2 F; }. C
# q$ O. u; Y2 k
* `+ t8 w: F j( q' c3 V: Z" c8 t1 j C$ q
你就可以发现/mnt目录下挂载了/home/nios2的内容。至此,主机上的配置就完成。
& I5 o2 A" R8 E; e5 z. y: V* w! S9 G/ T1 _; N8 H
2、目标机(嵌入式开发板FPGA开发板的配置)
& ], L, R) D" A/ h4 ?0 F4 Y' |- J" u$ }
由于我之前做过一个实验就是测试EtherNet的实验,在开发板和主机之前是相通的,并且开通了boa服务器,ftp服务器,所以硬件连接方面就没有问题。同时,由于我只是将主机和开发板直连,就不涉及到网关的概念啦!所以在开发板上就很容易就成功了!
( i" V! U" E) D5 X9 T) T/ D
2 m( i. z3 D/ t2 r7 H+ @2.1、配置uClinux的内核,让它支持客户机NFS文件系统
$ L% P& Q: Y. `$ n
) S) @/ Q& F V, s* ~% `* ?通过命令:make menuconfig进入内核配置界面,界面如下:' w, H' N5 L! n( U( j; a
. x& I$ a9 L: o. I( t
" x4 y" Z$ @6 |; y! X4 |exit---exit---yes,进入到内核子界面,如下:进入File systems -> Network File Systems -->,选择如下图所示:
- x$ U9 }0 w: f4 u K5 K
e& @9 y+ n' c* a; Y$ _5 c3 |* `) V# J
之后,退出,进入下一个用户应用和库设定界面,Network Applications --> portmap,如下图所示:
! x7 e! R/ _$ ]+ ^4 J
3 v( r( Q) G9 a3 F2 e. J
9 {+ v' H7 b* d( G% c5 n7 X9 A% n; F* \! \" c+ d
之后,make,编译内核生成内核镜像,下载到开发板DE2上。 U1 w# |6 A0 |
" n6 o( _! D/ J8 N* V% N2.2 下载开发板,挂载主机中的目录
( E o- C- U1 |# n4 v5 Z& H- q9 f6 S: I2 X$ v# E" W, Q
通过nios2-configure-sof DE2_NIOS2.sof和nios2-download –g zImage和nios2-terminal启动DE2开发板上的uClinux系统,关于开发板网络通信的实验稍后再写一篇文章吧!, K, ~$ K3 r) k
% D% O0 x/ D1 S# ^
我们首先运行portmap命令和自己建立一个挂载的文件夹:
& D; N& t: {5 [; Q, x# _$ N
N& b, S% \6 Z! tportmap &
7 J. ]; d0 q; B7 a& c+ p- f x: }, G! F" ?7 {/ _ @
mkdir /ff# D5 J0 d0 o, [! W/ }' R
D0 A5 E+ f4 H9 q+ Y# q1 @1 D之后再将主机上/home/nios2的内容挂载到新建立的文件中,表示NFS文件系统挂载成功。如下图所示
6 Q/ L" _% g3 W- D- e
- y9 H' J. m" q+ i* V
+ I8 F' f: \6 {) y& D
/ G" ~# I1 d7 H8 l" A可以看到新建立的ff里面有了/home/nios2里面的东西,说明成功啦!但是,我们第一次的命令出现RPC错误,可能是硬件上碰了一下吧,一般都会成功的。" X8 s: B& G: J$ a
% k: y1 r0 T6 ?$ C8 n: |
2.3、测试软件代码是否运行成功。; m+ E4 M2 \) S& T" O* G9 h
8 q8 I0 Z1 o$ d2 m上面的hi.c就是在Ubuntu里面利用下面命令生成的hi可执行文件,这个文件在Ubuntu里面是执行不了,引用用的编译命令是nios2-linux-uclibc-gcc,不是linux下的命令,是一种6 K y7 J3 j7 O6 u
% [6 Y5 `' r# n7 ?( R
交叉命令。
a7 E& m6 b# [' I4 ?" l
7 k0 ?( e5 t, }) p$ Qnios2-linux-uclibc-gcc hi.c -o hi –elf2flt
" }. q, U3 l7 a9 H6 f/ L/ e3 Y; u, R. j5 {: Y
2 \, F8 o/ |- r0 Z, H
0 S1 S1 t3 z' E( M6 w$ m总结:4 j7 N$ N+ u9 N# f/ l# V1 @
1、理论上其实没有多少难点,关键在于首先要虚心看懂理论,切勿盲目开始做,因为你很有可能网上搜到的资料都不适合你的开发环境,所以理论知识很重要,需要静下心来学习。. C( H/ ]- F, Q% u' U. E7 B
, a$ u3 r4 V4 }2、内核编译切勿乱添加东西,之前,我添加了一个客户机根目录NFS系统文件,后来,发现连/etc/rc里面的网卡配置都不好用,让我弄了一个多晚上,最终找到原因啦。这里,如果你想一启动就挂在的话,就把上面的命令添加到/etc/rc里面,就可以啦!
1 G7 D# [" c& Y M0 p1 T- i
4 h1 q0 E3 K) Y) D7 m: [3、linux之路还有很长的路,下次准备做一下web服务器的实验,boa好像自带就有,希望自己搭建一个socket的服务器。 |
|