|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
$ i; ~- B: }/ x& @经历了两天的时间的NFS文件系统工作,终于在我的FPGA开发板DE2上的uClinux和Ubuntu9.10上做好了NFS文件系统,现在总结一下,便于以后自己的学习。
0 V q; a" I" l0 A
& p$ H0 x# l U2 b一、理论篇* W: y: P3 H( ?# K! O
1、什么是NFS?
6 |% w2 }' f3 u7 F) p1 s6 R
3 K$ i" k% k. i6 x NFS是Network File System(网络文件系统)的缩写,最初是由Sun公司开发出来的分布式文件系统。提供NFS服务的一方是NFS Server(远程主机),使用NFS服务的一方是NFS Client(客户机)。利用它,客户机可以将远程主机提供的共享目录挂载到自己的目录上,在本地的操作如同对远程主机的操作。* r' l0 _0 i6 e4 W, w
5 z( o0 Q( m/ j4 B6 X2、NFS的原理
6 |+ K! f% o) F* o% ^! H
4 M+ R+ V5 E. R; G6 r% L NFS有自己的协议与端口号(2049),它本身并没有提供传输资料的协议,但是NFS却能通过网络进行资料的共享。这是因为在资料传送或者其它相关数据交互的时候,NFS用远程过程调用(Remote Procedure Call, RPC)的传输协议。RPC服务portmap负责管理服务与相关端口映射的工作。因此,使用NFS服务必须先激活RPC服务portmap,在主机和目标机上都要实现RPC服务,才可以使用NFS。/ U( s- M2 J) {8 O3 v
8 @' Y' T- V+ w, P" [9 I
二、实践篇8 g) o% }5 P' f8 n
1、服务器(主机)上的配置
~- Y `# G# m9 M
0 }$ ~6 s7 s+ S: K( |1.1、root下,配置NFS需要的软件包,命令如下:9 ?" M' X, ^/ z4 h, s1 o" I
: k6 z8 r7 n8 n; t
sudo apt-get install nfs-kernel-server nfs-common portmap
- l6 x( e" M" Q; I7 W' N- d/ f4 H; b$ U; }. q% h
1.2、配置portmap(其实这一步在Ubuntu里面可以省略),命令如下:. n6 O( T9 v: r
2 j! \: |5 z4 \
sudo dpkg-reconfigure portmap 出现界面,选“否”
2 [: L; ]% X" w; d
6 J9 {7 f; G. [! G- c7 m1.3、配置挂载目录和权限,如下图所示:增加自己挂载的目录,这里为/home/nios2(当然之前你需要mkdir /home/nios2)0 I, Q5 R& O$ G
! k3 \1 ?1 ?% }) k& \) D) g; q
# e! J* E) C v1 W6 V0 h3 [3 M' \: A7 q, ]8 h- {
rw:读写权限 ro:只读权限
: v$ o1 V1 n0 Z
, X4 z: I4 q4 sno_root_squash:如果是root使用共享目录,那么他的权限将被压缩成匿名者。# h/ D* j: Q' F% |$ C# \
$ q. o# D, w* x5 Ssync:资料同步写入内存与硬盘中5 G+ w; C( B0 Z! k- Q& j: Y
* S- U) e. {8 u$ L. I; s/ iasync:资料会暂存于内存当中,而不会直接写入硬盘
4 H) U. A' d" B& H5 A) K0 y, g( Z% x' J! T7 c9 ~- w9 N2 I$ N X4 g
前面的*表示任何ip段的客户机都可以访问共享文件。
4 y! g0 U% A; Q7 \( ?; t# V+ y4 _: x( w% z! p( F8 }
1.4、刷新重载一下exports文件
. ~& l! I& k7 z/ ]6 y! _" q# h3 [8 ^! }4 y5 [
sudo exportfs –r
4 a/ J% W9 {, ` \1 P/ J& I' Q% l6 Q, L. F* d
1.5、重新启动NFS服务7 t1 U( [0 I* a6 S# ~
6 j0 S/ J2 ?6 J2 d
/etc/init.d/portmap restart& v" x) x3 @! t1 i+ S2 n
, h- `$ Y) _) W: i, a /etc/init.d/ nfs-kernel-server restart
, y7 V; a1 ]8 ?9 M+ Q5 U3 ]; ?& \- a1 {9 i2 R3 V( `
1.6 、测试能否挂载本地的目录
; K- t8 Z5 T# r* V% s, s* R1 ~( c& z4 b% }/ j; g7 |* V* _6 d( m
mount –t –nfs 192.168.1.110:/home/nios2 /mnt$ I% m4 [ O) A* w
: S8 _( r! T2 u8 a8 }: f7 n ls /mnt
% X u- f+ K+ z9 U5 g% k, C) t& @3 P% i2 |2 r# A3 X
2 E8 i6 T* K8 X! ]# k% H
4 |* o; d$ D, b& T同时,你也可以运用df命令来观察挂载的内容
# `7 ?0 O U# N% S9 ]+ k
8 R8 `3 G9 G8 ^2 q- j8 Y# R
+ W+ j6 n* z, w; x k5 k7 f4 B3 v- J t S
你就可以发现/mnt目录下挂载了/home/nios2的内容。至此,主机上的配置就完成。; _% v J0 f6 [6 m" e7 z. [: V
; S; n: m0 U( e0 c: o2、目标机(嵌入式开发板FPGA开发板的配置)
! L- o- Q2 d; ?. P$ \* P2 W" l; {) Z4 e6 i7 ^8 x( \
由于我之前做过一个实验就是测试EtherNet的实验,在开发板和主机之前是相通的,并且开通了boa服务器,ftp服务器,所以硬件连接方面就没有问题。同时,由于我只是将主机和开发板直连,就不涉及到网关的概念啦!所以在开发板上就很容易就成功了!3 f3 t E7 X( ~ r0 T6 D3 ]; ?
2 @- I8 n* R3 Q
2.1、配置uClinux的内核,让它支持客户机NFS文件系统1 B- |( R- W7 z4 U, x
. c; E: w. O1 a V9 B/ j8 I/ S2 G; `通过命令:make menuconfig进入内核配置界面,界面如下:
: J) B1 F8 W& O* ~: b$ B, Q
" ^0 s) S# x5 Z0 Y- I
* M5 w b. N j& T8 ?
exit---exit---yes,进入到内核子界面,如下:进入File systems -> Network File Systems -->,选择如下图所示:
7 a8 d. }& t4 C2 c( }2 N+ C3 Q- d1 e9 x
& m4 S4 J2 `+ G- V0 E `( ^+ p$ y( O' ] p& x
之后,退出,进入下一个用户应用和库设定界面,Network Applications --> portmap,如下图所示:
8 i4 b, n' j/ D+ V
* N" k; q1 c. x1 x0 ]4 V% w! f
( Q* R |- \& F% |" c; U
. ~0 X* b: b! P之后,make,编译内核生成内核镜像,下载到开发板DE2上。
7 ~0 J6 s3 ^: w5 w/ t% u6 F. n
- z! n* T6 x' t# @' X3 S7 f( e. j2.2 下载开发板,挂载主机中的目录$ `( L5 u5 Y' ]6 o/ O+ U- \ [
" B& ]: J! V) f' k6 G通过nios2-configure-sof DE2_NIOS2.sof和nios2-download –g zImage和nios2-terminal启动DE2开发板上的uClinux系统,关于开发板网络通信的实验稍后再写一篇文章吧!, d$ L- m3 W! j# s
: F @ e5 }5 {7 O5 v% |7 O我们首先运行portmap命令和自己建立一个挂载的文件夹:
% }" \2 Q0 x+ j/ n8 Z4 A% l0 U- y# [- H; q' F' H6 G3 V' [4 Z
portmap &5 F9 Y. i7 p% a
! o; E# S% h8 I1 wmkdir /ff2 [2 F2 G8 v e0 I1 j1 v/ J! T
; e0 ]( d4 h0 f- G之后再将主机上/home/nios2的内容挂载到新建立的文件中,表示NFS文件系统挂载成功。如下图所示
5 P5 @% [% t3 k. y) C2 D: `# S) F7 n3 D6 f i
8 K$ k V0 \- w. n7 I
3 D4 y% |7 W' @* M' i, a可以看到新建立的ff里面有了/home/nios2里面的东西,说明成功啦!但是,我们第一次的命令出现RPC错误,可能是硬件上碰了一下吧,一般都会成功的。! k: c1 k5 V- C6 A! c1 W; b2 q
C0 t4 C% N( Y! n
2.3、测试软件代码是否运行成功。% T l7 H% y; L; N, [" N* }' L
7 w7 \; ~, A: I7 ^
上面的hi.c就是在Ubuntu里面利用下面命令生成的hi可执行文件,这个文件在Ubuntu里面是执行不了,引用用的编译命令是nios2-linux-uclibc-gcc,不是linux下的命令,是一种& m' M6 z: F. g( o- \" }
+ w& s+ ]2 @* E3 F. H. U0 Z) [9 D交叉命令。2 q+ x7 c6 }2 O! R2 C- g% K. b" b
) G, `) X- S2 }* u. D2 P# onios2-linux-uclibc-gcc hi.c -o hi –elf2flt5 [) n$ k- b) h5 B+ J6 D3 \2 M" Q2 j
/ O! G% \1 ^! }! q
5 G( I8 f2 t& }) {5 m
+ ~$ J- a' l$ A1 B' n总结:
$ f7 k; x+ S: E. j" h1、理论上其实没有多少难点,关键在于首先要虚心看懂理论,切勿盲目开始做,因为你很有可能网上搜到的资料都不适合你的开发环境,所以理论知识很重要,需要静下心来学习。
5 F2 k( F) }& y- ]; \6 r' i* g5 G% L) U2 V. J3 G
2、内核编译切勿乱添加东西,之前,我添加了一个客户机根目录NFS系统文件,后来,发现连/etc/rc里面的网卡配置都不好用,让我弄了一个多晚上,最终找到原因啦。这里,如果你想一启动就挂在的话,就把上面的命令添加到/etc/rc里面,就可以啦!
4 J: s c2 t$ |) o4 r" Q% @# |) a8 f5 f2 s
3、linux之路还有很长的路,下次准备做一下web服务器的实验,boa好像自带就有,希望自己搭建一个socket的服务器。 |
|