基于ARM6410Ubuntu的NFS挂载方法及驱动模块加载方法.docx
《基于ARM6410Ubuntu的NFS挂载方法及驱动模块加载方法.docx》由会员分享,可在线阅读,更多相关《基于ARM6410Ubuntu的NFS挂载方法及驱动模块加载方法.docx(20页珍藏版)》请在冰豆网上搜索。
基于ARM6410Ubuntu的NFS挂载方法及驱动模块加载方法
NFS服务器的配置
一、NFS服务器端的配置,即共享发布者
(一)需启动的服务和需安装的软件
1、NFS服务器必须启动两个daemons服务:
rpc.nfsd和rpc.mountd
rpc.nfsd:
用来管理客户端PC是否可以登录。
类似于windows中的共享权限。
rpc.mountd:
用来管理客户端pc能够使用的文件安全权限。
如windows中的共享安全权限。
RPC:
因为NFS支持的功能很多,所以NFS的功能对应的端口才无法固定,而是采用小于1024的随机端口。
但客户端需要得知服务器的端口才能联机,此时就需要启用RPC服务。
RPC的功能就是指定每个NFS功能的端口号。
并传信息给客户端,让客户端可以连到正确的端口上。
服务器在启动NFS时会随机取用数个端口,并主动向RPC注册,因此RPC知道每个NFS功能对应的端口。
RPC用111端口监听客户端的请求,并应答正确的端口。
启动NFS前,RPC就要先启动了,否则NFS会无法向RPC注册。
2、NFS服务器需要安装nfs主程序,nfs-utils和rpc主程序portmap
(二)exports服务器的方法:
1、NFS文件存取权限
因为NFS没有验证机制,当客户端用户访问NFS服务器的共享文件夹时会遇到的权限情况:
(1)NFS服务器端用户列表中有与客户端用户名相同的用户名时,客户端可以直接存取共享文件夹。
例:
客户端用户为khp,而nfs服务器用户列表(/etc/passwd)中也有khp这个用户名,则将拥有KHP权限。
。
(2)当访问NFS服务器的客户端用户UID与服务器端UID相同,但用户名却不相同时,客户端将拥有与服务器端UID相同但不同用户的权限。
例:
客户端为501UID,用户名为khp的帐号访问NFS服务器。
NFS服务器用户列表中(/etc/passwd)有uid为501,但用户名为pla的用户,所以客户端khp用户可以拥有NFS服务器pla相同权限。
(3)如果客户端用户UID在NFS服务器端用户列表中不存在时,则以匿名用户的权限访问。
即nobody的用户。
(4)如果客户端用户为root用户,因为每台电脑都有root用户,如果不作控制,NFS服务器将会很危险,会被客户端全部控制。
所以默认root用户名的客户端访问NFS服务器,会变为匿名用户,拥有匿名用户权限。
也可不控制。
2、编辑/etc/exports文件,此文件不一定存在,如不存在就手工建立
/etc/exports的格式:
共享目录允许访问的电脑(选项)
共享目录:
即nfs服务器准备共享的目录
允许访问的电脑:
即允许访问这个共享的客户端有哪些。
可用电脑名、IP地址,还可以用通配符。
选项:
(1)rw//读写。
客户端拥有读写的权限。
(2)ro//只读客户端只有读的权限。
(3)no_root_squash//root用户可访问,不变成匿名用户,即root用户可以以root用户的权限访问NFS服务器的共享资源。
(4)root_squash//root用户变成匿名用户
(5)all_squash//所有用户都变成匿名用户
(6)anonuid
(7)anongid//所有匿名用户的UID或组ID都变为后面设定的UID或GID的权限。
因为所有在NFS服务器用户列表中没有用户名的都会匿名用户,这里设定这些匿名用户的用户权限。
(8)sync//同步到硬盘
(9)async//数据存放到内存而不是直接写到硬盘
例:
/mnt/export(rw)//这个目录只允许这台电脑读写。
注意,后面(rw)前没有空格。
/mnt/export(rw)///mnt/export这具目录只允许这台电脑读写,且允许所有其他用户读写权限。
(rw)前面有空格。
/mnt/export*(rw)//允许所有这个域里的电脑读写这个共享文件夹。
3、exportfs命令。
可以更改设置(命令目录/usr/sbin/exportfs)
exportfs[-avu][-ooption][director]
-a:
把exprotfs里的所有路径都共享出去
-u:
把export出去的路径取消
-v:
在export时,共享显示到屏幕
-ooption:
即一些选项
-r:
重新挂载exports里的设置
例:
exportfs-aro/tmp/user//即把/tmp/user目录全部exports,但用户只能读取资料。
4、/var/lib/nfs/*tab//存放日志文件.etab记录NFS共享出来的目录完整权限设置。
.xtab记录曾经连接引NFS的客户机数据
5、rpcinfo[-p][ip|电脑名]//查看RPC服务的注册状态
6、netstat-ultn查看开放了哪些端口
二、客户端的端设置
作为NFS客户端需要先运行nfslock和portmap服务。
/etc/init.d/nsflockstart
/etc/init.d/portmapstart
并且有几种挂载方法
(一)、命令方式
mount命令挂载
1、showmount-e[nfs服务器电脑名|ip地址]//查看nfs服务器的可用共享目录
2、mountnfs主机名:
nfs共享目录挂载到本机的目录//把nfs服务器共享的目录挂载到本机。
主机名外还可用IP地址
例:
mount192.168.9.1:
/tmp/export/tmp/export//即把192.168.9.1nfs服务器共享的/tmp/export目录,挂载到本机的/tmp/export目录上。
mount-tnfs-otime=20/tmp/export//把远程nfs服务器的/home/khp挂载到本机的/tmp/export目录下。
最长响应时间为20秒。
3、unmount命令中断挂载
(二)编辑/etc/fstab文件挂载
/etc/fstab文件详解在文件系统管理中有说明
1、格式:
NFS服务器及共享目录挂载到本地的目录文件格式选项
:
/home/project/tmp/exportro//把这对口NFS服务器上的/home/project目录挂载到本机的/tmp/export目录上,且为只读。
格式为nfs
2、打开文件夹。
此时输入mount/tmp/export即可以打开挂载的文件
(三)autofs来挂载nfs文件系统
只在文件系统被访问时才被挂载。
1、在/etc/auto.master中定义挂载点
2、再在auto.master中定义的/etc/auto.dirctory中定义目录的总挂载点。
即在系统文件/etc/auto.master中先定义一个总的总挂载点。
然后依这个文件中定义的总挂载点文件,再设置详细挂载点。
例:
vi/etc/auto.master编辑这个文件:
/misc/etc/auto.khp-timeout60//即/etc/auto.khp中的文件将挂载到/misc目录下
再编辑:
vi/etc/auto.khp这个文件,定义挂载点。
myproject-rw,soft,intr:
/home/project//即把NFS服务器:
/home/project共享目录,挂载到本机的/misc/myproject目录下。
注意:
/misc/myproject目录是动态的,不是实际存在的,只是在访问时这个目录才会产生。
退出就消息。
但/misc目录需存在。
当防火墙开着时,有时就无法访问,可用/etc/rc.d/init.d/iptablesstop停用防火墙,或用iptable命令开放NFS的端口。
学习驱动,首先当然要先搭好环境,当我们把编好的驱动编译到内核或者以模块的方式
加载进内核后,我们还要写一个测试应用程序,这个程序是在ARM-LINUX下运行的,与其对应的是PC-LINUX,这就又引出了交叉编译的概念,所谓交叉编译,是指在一个环境下编译程序,而在另一个环境下运行,比如我们在PC-linux下编译一个helloworld程序(就是最简单的helloworld程序)但是我们在编译的时候用arm-linux_-gcc命令,这个命令就是指当前编译的程序就是在arm体系结构下运行的,如果你在PC-linux的环境下执行./helloworld命令则会出现”不能执行未知二进制文件”的错误。
但把它下载到板子上运行的话则正常运行。
当然,我们要把编译好在板子上运行的程序传到板子上的方法有很多,比如通过串口下载,USB下载,FTP上传等等,这些都是板子与PC机的通讯方式。
当然用的最多最方便的我个人认为就是NFS了,NFS即网络文件系统,我个人理解是这样的:
如果我启动了nfs系统挂载成功那么我就可以把一些在linux上交叉编译好的程序放到这个linux挂载的目录下然后通过像SecureCRT这样的终端进入这个目录去执行程序,也就省去了把程序下到板子上的麻烦,因为当我们传输的文件过大的时候,用串口USB传送的这种方法就会消耗我们大量的宝贵时间。
这个linux挂载的目录其实就是一个共享目录,即ARM-LINUX把板子的资源都挂载到这个目录下,这样PC-LINUX可以通过这个目录来访问板子的资源,当然我们也可以往这个目录里传输文件程序,可以理解为板子里Linux系统的一个目录.
构建NFS系统并非一件容易的事,之前我也是苦熬了两三天查阅了不少资料,也咨询了不少学长,网上挂载失败发帖的一大把,我想把我构建过程中以及后面编译加载驱动遇到和解决问题的方法和大家分享,我个人认为构建过程当中设置这个设置那个并不重要,重要的是为什么这样设置,这样设置的影响是什么,那样设置会怎么样。
因为一般买的开发板带的资料(比如我买的S3C6410)它的确讲解了如何搭建NFS环境,但是发现没几个挂载成功的?
为什么因为它只是一步一步讲的些大众化的步骤,告诉你这一步设置这个,那一步设置那个,至于为什么都不谈。
当然,这不是教你学习,公司当然希望越简洁越好,但是,我们作为学习,当然就要刨根问底。
下面我就具体谈谈构建加载过程中我遇到的一些问题。
首先,我们要设置一个共享目录,这个目录就是可以被NFS挂载的那个目录,所以接下来就是要配置NFS配置文件了,即/etc/exports文件,如图
在下面一行,我们加上这个新目录,我的目录就是/home/localhost/arm6410,后面分别表示可读写,资料同步写入(即当我们把程序或一些文档放进这个目录时,它也会相应的把这份资料写入ARM板子中,这很好理解,因为这个目录就是挂载的板子资源的目录),最后一个参数表示登入NFS主机使用分享目录的使用者,如果是root的话,那么对于这个分享的目录来说,他就具有root的权限。
接下来,我们就要在这个共享目录下在添加一个根文件系统所需要的目录,我用的是飞凌的板子