EDA365电子论坛网

标题: 嵌入式uClinux和Ubuntu9.10上NFS实验 [打印本页]

作者: piday123    时间: 2020-5-14 09:23
标题: 嵌入式uClinux和Ubuntu9.10上NFS实验

( a1 _4 u: T1 e8 ]; _经历了两天的时间的NFS文件系统工作,终于在我的FPGA开发板DE2上的uClinux和Ubuntu9.10上做好了NFS文件系统,现在总结一下,便于以后自己的学习。
; W5 k4 Y3 k& V) \9 b0 f5 b5 G" p2 J0 _( L+ ~
一、理论篇; F5 W: g1 P. Z" c9 A5 }
1、什么是NFS?: p2 C  U' N+ Y! L/ }! ]* R
! N8 [: I% A* V
     NFS是Network File System(网络文件系统)的缩写,最初是由Sun公司开发出来的分布式文件系统。提供NFS服务的一方是NFS Server(远程主机),使用NFS服务的一方是NFS Client(客户机)。利用它,客户机可以将远程主机提供的共享目录挂载到自己的目录上,在本地的操作如同对远程主机的操作。$ M- ]. U1 p9 `3 Z) X  P. ^

. Z* Z% p2 Y4 v3 _2、NFS的原理. v0 e+ U( x4 y1 q6 m
7 ]+ I% t; K5 [
     NFS有自己的协议与端口号(2049),它本身并没有提供传输资料的协议,但是NFS却能通过网络进行资料的共享。这是因为在资料传送或者其它相关数据交互的时候,NFS用远程过程调用(Remote Procedure Call, RPC)的传输协议。RPC服务portmap负责管理服务与相关端口映射的工作。因此,使用NFS服务必须先激活RPC服务portmap,在主机和目标机上都要实现RPC服务,才可以使用NFS。% ]# T/ w; A7 ?( V) l* A. A; u
+ e8 b' a6 L; ^9 `
二、实践篇+ L: {; A* Q. W/ z
1、服务器(主机)上的配置
/ }$ U8 q1 e3 A$ k6 ]& D4 a$ S6 W1 z$ s2 Y7 j/ t" W. N
1.1、root下,配置NFS需要的软件包,命令如下:
8 s8 ~& z  D, ]. _; ^( K- N: D3 n- {  R
     sudo apt-get install nfs-kernel-server nfs-common portmap
3 X) D; D& k; {0 {4 s+ n
  w$ |% h4 z8 G. |  @1.2、配置portmap(其实这一步在Ubuntu里面可以省略),命令如下:
) i3 I. B% d7 l4 V4 M  d4 \3 n# W/ @! h
     sudo dpkg-reconfigure portmap 出现界面,选“否”+ L( k3 |1 F! ~9 {9 ~

) n) R' i8 U# ?% L# e- A1.3、配置挂载目录和权限,如下图所示:增加自己挂载的目录,这里为/home/nios2(当然之前你需要mkdir /home/nios2)% c* O4 W! I8 ?9 n; K2 Z* |

, Y: r9 x% M3 Z 8 y* f  p. J9 p# x1 D7 [$ K8 |7 A
% K; y  x$ F' x& ~" O
rw:读写权限   ro:只读权限
: d: w9 E  L3 [6 H
5 k4 n# V( k2 O% }, hno_root_squash:如果是root使用共享目录,那么他的权限将被压缩成匿名者。) _, n3 R; [  V# H% l# [- I! i

% X: _+ F5 n" psync:资料同步写入内存与硬盘中
& |, ]- a( t2 f* |& |
; F: @4 z# W/ O2 w1 oasync:资料会暂存于内存当中,而不会直接写入硬盘
3 N8 N9 k1 O6 w7 q& t& G7 D2 o/ ^+ L/ v8 f. j2 V% H* l
前面的*表示任何ip段的客户机都可以访问共享文件。& j6 z6 R- N. X

* N' G4 I; ^- x" r  [. E1.4、刷新重载一下exports文件
) c. R+ f0 u- A: [
1 R* g9 s  @0 V     sudo exportfs –r
+ U' C: M+ v; p# q* w/ D) J# i) a6 k6 h0 ^. M* i
1.5、重新启动NFS服务
+ N. f0 n3 j6 |* j
3 |/ l; g  ~0 j) Q3 p        /etc/init.d/portmap  restart
/ _2 R0 T+ ~6 V: j; u( B! c3 T- X
' t" K, L$ N; h        /etc/init.d/ nfs-kernel-server restart
. o7 \" {; m$ P" M( i; B$ a7 `% D* ?* Z' o3 L
1.6 、测试能否挂载本地的目录
1 \( E7 D* X! I  K, q& B6 M4 ]- w8 [/ [
        mount –t –nfs 192.168.1.110:/home/nios2 /mnt$ g1 H; N; A9 a1 Y
5 u4 S% i! m7 V5 p5 ?
        ls /mnt
9 d0 c7 o5 d  R+ y4 f2 n* X, D4 Q: [' {3 z! \. s9 o, ^8 D" q$ P
- V, P9 V4 d' L8 f
/ V- x- M. D/ |
同时,你也可以运用df命令来观察挂载的内容3 \. d) v; e4 m7 R$ K* K( j  m% ]2 B3 }
4 g/ Y+ p0 T! ^7 l9 T
. Q+ _. t" \8 j% d8 q, M

: U) z& \& l7 S; b; F, T7 T你就可以发现/mnt目录下挂载了/home/nios2的内容。至此,主机上的配置就完成。
( Q0 ~2 V' a4 a9 }
. ~6 ^& N) L; [; n/ R& }0 j4 \2、目标机(嵌入式开发板FPGA开发板的配置)! m; T: F9 s7 N# J
8 F! P: C1 `. I: i& @
     由于我之前做过一个实验就是测试EtherNet的实验,在开发板和主机之前是相通的,并且开通了boa服务器,ftp服务器,所以硬件连接方面就没有问题。同时,由于我只是将主机和开发板直连,就不涉及到网关的概念啦!所以在开发板上就很容易就成功了!" B& E8 P7 r/ u5 x* |
' m( K8 T0 C( j$ d- ~; D% a/ H
2.1、配置uClinux的内核,让它支持客户机NFS文件系统
! Y1 l+ ?7 m& }5 t: J7 [, @
  g. h5 \& Y0 V( W! N) C1 O: U* k0 K通过命令:make menuconfig进入内核配置界面,界面如下:6 N5 u4 T- X& Q4 ~, c$ g
$ i5 N2 l1 z3 A2 d& M7 P

6 z3 E7 z# p- w9 I% Gexit---exit---yes,进入到内核子界面,如下:进入File systems -> Network File Systems -->,选择如下图所示:. z  r3 \- b6 F  Y9 @, _

; _. j+ m+ |! t# i+ R, }8 n& B
. X6 D3 E6 ~& I+ L  U5 x之后,退出,进入下一个用户应用和库设定界面,Network Applications --> portmap,如下图所示:
+ p/ |2 u3 Y8 n! h4 \8 |( V( v1 W6 V  C$ B2 Q. u% P- U4 @
, u, T3 J, O# r  {$ n9 M' r2 S

5 z8 o6 G; N/ n0 \4 Q5 _1 b9 t0 F' c之后,make,编译内核生成内核镜像,下载到开发板DE2上。+ Y# z8 V% t2 h' ?( Z: z9 ~9 N
# e+ ~  {; l  z6 N
2.2 下载开发板,挂载主机中的目录7 m* L2 o  S7 b: }7 e

6 ?% [& K4 f% ~! z% b( l# Y$ H通过nios2-configure-sof DE2_NIOS2.sof和nios2-download –g zImage和nios2-terminal启动DE2开发板上的uClinux系统,关于开发板网络通信的实验稍后再写一篇文章吧!
" ]4 A$ {' Z4 F: W3 Q% j
9 ^6 y. ]8 _% `* T我们首先运行portmap命令和自己建立一个挂载的文件夹:+ ^9 ^9 O0 `6 o9 {. }$ ~
  M6 v' |0 C" ^+ v4 S; g( S
portmap &8 ?" {5 M2 r8 H& V2 B: ~
. m( Z6 G0 w+ w+ w  E0 ?4 u$ W( F1 }
mkdir /ff% ~5 G) W0 `( O4 l# }4 S9 C

& ^; N' P; h# M' x5 D; x之后再将主机上/home/nios2的内容挂载到新建立的文件中,表示NFS文件系统挂载成功。如下图所示5 G. ?+ f3 O- x- l

2 P! M0 k. e! C4 Y" [( s$ S2 J$ ]
: c) p- e" Z7 p$ W7 U! r' E4 e3 U# k) d  z6 [( k0 C* }7 P
可以看到新建立的ff里面有了/home/nios2里面的东西,说明成功啦!但是,我们第一次的命令出现RPC错误,可能是硬件上碰了一下吧,一般都会成功的。; ]  G+ B8 t" B5 V, k$ G8 `
3 B- t+ n' |/ O! L) R% S) Y$ E
2.3、测试软件代码是否运行成功。
7 U" L; W' K0 ~4 d( k' z% |3 z$ l5 a0 Z( O+ E
上面的hi.c就是在Ubuntu里面利用下面命令生成的hi可执行文件,这个文件在Ubuntu里面是执行不了,引用用的编译命令是nios2-linux-uclibc-gcc,不是linux下的命令,是一种
: k. E! Z0 {- _# t8 \/ v* C, B/ p7 m# W! {& {' @4 l( C* H
交叉命令。8 n5 P6 P% n; K

7 E; J. L6 K/ E) u4 m" P* r) `nios2-linux-uclibc-gcc hi.c -o hi –elf2flt
' C, y( K. w+ X. U3 k* V  D3 e7 P- l4 t9 F0 d) |* y: }$ Q

# `$ i- w4 I; w9 N1 e" G, q+ T8 u
总结:
9 `0 Z& g3 n& v  ~; k  J1、理论上其实没有多少难点,关键在于首先要虚心看懂理论,切勿盲目开始做,因为你很有可能网上搜到的资料都不适合你的开发环境,所以理论知识很重要,需要静下心来学习。: N0 H1 ?# m7 M% L* V
/ e9 [" q3 Y7 k) G" T
2、内核编译切勿乱添加东西,之前,我添加了一个客户机根目录NFS系统文件,后来,发现连/etc/rc里面的网卡配置都不好用,让我弄了一个多晚上,最终找到原因啦。这里,如果你想一启动就挂在的话,就把上面的命令添加到/etc/rc里面,就可以啦!4 E6 s# l1 w* Z" N! \7 |7 ]! ?

* @) x2 P3 C7 U8 M0 O+ x$ [# _. y3、linux之路还有很长的路,下次准备做一下web服务器的实验,boa好像自带就有,希望自己搭建一个socket的服务器。
作者: modengxian111    时间: 2020-5-14 10:38
学习了,感谢楼主分享




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2