|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
2 v8 o, g' i: I% {经历了两天的时间的NFS文件系统工作,终于在我的FPGA开发板DE2上的uClinux和Ubuntu9.10上做好了NFS文件系统,现在总结一下,便于以后自己的学习。( w& V) v9 v8 C3 T u# [
4 U, B8 N' I% t0 \9 c2 @一、理论篇 y) l4 w, q* y
1、什么是NFS?
& V- I5 G1 v# ^: _0 z( @9 u0 I, Z5 v4 h' N( J
NFS是Network File System(网络文件系统)的缩写,最初是由Sun公司开发出来的分布式文件系统。提供NFS服务的一方是NFS Server(远程主机),使用NFS服务的一方是NFS Client(客户机)。利用它,客户机可以将远程主机提供的共享目录挂载到自己的目录上,在本地的操作如同对远程主机的操作。5 ^3 \ z& o3 d) t
R. Y& N+ u5 ]3 L1 N. U* E, c# x& ~% U
2、NFS的原理& S7 G* z& [& Q- U* n- S
& U' [9 k' | H1 t2 D
NFS有自己的协议与端口号(2049),它本身并没有提供传输资料的协议,但是NFS却能通过网络进行资料的共享。这是因为在资料传送或者其它相关数据交互的时候,NFS用远程过程调用(Remote Procedure Call, RPC)的传输协议。RPC服务portmap负责管理服务与相关端口映射的工作。因此,使用NFS服务必须先激活RPC服务portmap,在主机和目标机上都要实现RPC服务,才可以使用NFS。
9 {" }: }* Q) ?$ R" c3 Y
+ B4 d4 @- m8 a3 m; n2 k二、实践篇
. t b9 @% q( x! I1、服务器(主机)上的配置. [ M2 P# J" S O! W. i
7 t5 W0 g6 c9 V" Y2 S; r4 M
1.1、root下,配置NFS需要的软件包,命令如下:
* m; L& {& m# P1 f! R; ]
/ o: r8 m/ {% ^' B! _ sudo apt-get install nfs-kernel-server nfs-common portmap9 U3 o' S/ T9 H) @( S5 H& x
3 {4 I" H; s/ n f) M# R1.2、配置portmap(其实这一步在Ubuntu里面可以省略),命令如下:
0 ^3 z0 j& j( [* Y d) h
: @. \' M- K8 i+ j1 G$ X sudo dpkg-reconfigure portmap 出现界面,选“否”& c# Q, d# H# e, t+ W3 t
2 E" t' M7 B* {+ y0 v1.3、配置挂载目录和权限,如下图所示:增加自己挂载的目录,这里为/home/nios2(当然之前你需要mkdir /home/nios2)5 A" d9 Q; v6 s0 P T9 }! X
! m/ O' p6 v/ y# L3 o
$ o `0 B$ V1 `1 _8 x
: P8 u8 {! O: |$ Z0 L+ yrw:读写权限 ro:只读权限. d2 ~5 e- ^" l
' g7 U `: d, s" Z
no_root_squash:如果是root使用共享目录,那么他的权限将被压缩成匿名者。
4 O& M* s! j8 X& H1 y( m5 D, X% J0 p$ g9 n, ~4 s8 F; m) a4 x+ j
sync:资料同步写入内存与硬盘中 g7 p: H, z" l, @; G
& d; \" P6 @: S2 l2 lasync:资料会暂存于内存当中,而不会直接写入硬盘
$ ^3 S$ P+ v* y w- O u
7 k) B' d8 n* H6 {前面的*表示任何ip段的客户机都可以访问共享文件。& Y; _+ c. @6 ?, o
9 L9 [0 {" T3 e, g/ ^
1.4、刷新重载一下exports文件 u3 Q: A! v1 ?4 f `5 B% A$ V
) a0 y. w: L3 D; u$ v. I
sudo exportfs –r
# R* w" y8 r$ M) t D" [ Z. L' N K- @9 X$ Q$ I: q3 N
1.5、重新启动NFS服务% g/ n; X- o. ? F- `6 Q1 G
( O6 R M% A2 E5 N5 e
/etc/init.d/portmap restart
3 R3 A" @6 e. I
; U. O* v. J* |, a% ]# ?! J4 h* s7 K3 k* g /etc/init.d/ nfs-kernel-server restart% c$ @' a+ ^( G$ c5 R. U" U: t
8 @. y9 [1 s2 J0 q: K5 Q1.6 、测试能否挂载本地的目录( v' s/ _; u3 ?$ _; R
; D9 W* M0 S: v# Y7 R( b6 {9 Z mount –t –nfs 192.168.1.110:/home/nios2 /mnt
. X! s1 j1 _; ]' x/ y
$ B3 F6 e) P' M( \1 W1 R2 G9 z ls /mnt& o7 a4 W$ B" R. z. y
1 g& ~$ `" _3 a, b
! P4 O/ r% b/ m/ z% Q5 U) b& I m
4 u, l2 m6 [9 n! f* ^
同时,你也可以运用df命令来观察挂载的内容
0 n5 n) ]5 Y) ] E! Y {! X
* d' U% H _0 S, \) s: o
/ ?" ?( {& [! g( s; A
" o5 {& u' P G3 A你就可以发现/mnt目录下挂载了/home/nios2的内容。至此,主机上的配置就完成。( g+ V3 n, d& K! `9 }2 O1 I7 Q5 A
( L$ }! _1 p: g! a2、目标机(嵌入式开发板FPGA开发板的配置)
4 y. }- C; ? ? G2 {* u
x* h2 W3 c: q/ F. X 由于我之前做过一个实验就是测试EtherNet的实验,在开发板和主机之前是相通的,并且开通了boa服务器,ftp服务器,所以硬件连接方面就没有问题。同时,由于我只是将主机和开发板直连,就不涉及到网关的概念啦!所以在开发板上就很容易就成功了!
0 g9 t; O6 [3 h( Q. a0 t% s0 B4 h5 C3 W% w! ^: _+ G/ J* ~
2.1、配置uClinux的内核,让它支持客户机NFS文件系统* E$ t. [. _+ j& X
4 @. D+ Y# f' w0 \4 W7 |
通过命令:make menuconfig进入内核配置界面,界面如下:
" A7 l. w' t3 W* h% Q( d1 S! h# N: m3 h3 N ^
0 b5 m+ M r0 E- Q9 p) l6 f
exit---exit---yes,进入到内核子界面,如下:进入File systems -> Network File Systems -->,选择如下图所示:* z' b: @9 Q' j2 t& _$ K
7 |0 b0 b5 l2 B' M
/ I, z; |! ?3 i. w4 b4 f之后,退出,进入下一个用户应用和库设定界面,Network Applications --> portmap,如下图所示:
; L4 @) _$ h* D
9 m3 B7 }$ T5 \ L8 V+ B" p/ u
7 n( A' r B% J. N
9 l q, Q: h4 p之后,make,编译内核生成内核镜像,下载到开发板DE2上。0 Y' `7 W p# v+ l# X& G
1 X1 z- W9 f* W/ L; a$ i
2.2 下载开发板,挂载主机中的目录( i' k5 @0 j8 e) j
$ r. u3 R O, M! o: J
通过nios2-configure-sof DE2_NIOS2.sof和nios2-download –g zImage和nios2-terminal启动DE2开发板上的uClinux系统,关于开发板网络通信的实验稍后再写一篇文章吧!% H) t9 Z8 Z l1 H' }: l
! w# B P2 `. A" P! z4 B3 R- O我们首先运行portmap命令和自己建立一个挂载的文件夹:" i' Y5 ^) @, a, X4 n, [
) c H) s2 l* ]# J% ]; [; X
portmap &
* S$ m( l% R f& _1 R' T2 v- |9 z" }$ V0 {5 {8 d
mkdir /ff" G, j* `4 O1 p7 ]' k7 G/ {
% Y. x9 a* o1 P* o* Y5 L, \7 ^
之后再将主机上/home/nios2的内容挂载到新建立的文件中,表示NFS文件系统挂载成功。如下图所示
, S7 L5 {! ?0 L+ N, o7 ^% i7 Q
4 [2 O4 }" D9 F# F
. |4 ^+ C/ c% b# G) l; j3 x7 z
6 s' ?6 g: L4 Q! |/ r& \可以看到新建立的ff里面有了/home/nios2里面的东西,说明成功啦!但是,我们第一次的命令出现RPC错误,可能是硬件上碰了一下吧,一般都会成功的。+ v; y: {# g+ U
* }" O6 s0 T2 x# H8 y! j
2.3、测试软件代码是否运行成功。
( [2 o. b7 N! o+ ]
; K- f# \1 C7 Z- I M; n3 `" k% O上面的hi.c就是在Ubuntu里面利用下面命令生成的hi可执行文件,这个文件在Ubuntu里面是执行不了,引用用的编译命令是nios2-linux-uclibc-gcc,不是linux下的命令,是一种
- z; ^ t$ v. W5 V2 ?! h7 _6 _8 q- ~
) }) w8 r7 B3 ?交叉命令。, r5 r# W7 O+ ?+ e# N4 j
, Y" R7 r1 j4 cnios2-linux-uclibc-gcc hi.c -o hi –elf2flt& k5 l' y" k! a) [
+ l, `$ I; N) D1 _0 H; o W
/ q$ V0 _& v. p6 Z1 k$ s
J% i0 B e7 X Q7 T# a |
总结:
- |7 |+ p7 V9 U H1、理论上其实没有多少难点,关键在于首先要虚心看懂理论,切勿盲目开始做,因为你很有可能网上搜到的资料都不适合你的开发环境,所以理论知识很重要,需要静下心来学习。
' H/ z; P- y+ S5 W6 v- C2 ^2 d9 N# H8 R5 ?
2、内核编译切勿乱添加东西,之前,我添加了一个客户机根目录NFS系统文件,后来,发现连/etc/rc里面的网卡配置都不好用,让我弄了一个多晚上,最终找到原因啦。这里,如果你想一启动就挂在的话,就把上面的命令添加到/etc/rc里面,就可以啦!5 t, T B2 Y1 S/ G8 o" _" I6 d
, u$ p/ Y4 u9 y
3、linux之路还有很长的路,下次准备做一下web服务器的实验,boa好像自带就有,希望自己搭建一个socket的服务器。 |
|