NFS挂载失败问题记录,mini2440无盘启动

NFS挂载失败问题记录

这个部分还是比较不好弄的。想象要是不能通过nfs挂载网盘的话,他提出这个方法也就没什么用了。这样看的话,是比较完美了。在你实验之前你可以现挂载一下(用busybox生成文件系统后不用编译就可以了)确认没问题在编译下载镜像文件。还有在作qt文件应用程序的时候很大用这种方法,相信不用考虑编译和裁减的情况下就可以直接运行了。

配置网络文件系统NFS服务
安装CentOS(对Fedora同样适用)时把NFS相关软件一起安装上,如果还未安装,请先安装再进行一下步.
安装完后,按照以下步骤建立和配置NFS服务。
首先要关闭防火墙selinux:
关闭的方法,修改/etc/sysconfig/selinux文件。
SELINUX=disabled

 

首先介绍一下我的开发环境:
PC环境是ubuntu9。04,开发板为友善之臂的MINI2440
主机IP:192.168.50.72 网关:192.168.50.1
子网掩码:255.255.255.0
开发板IP:192.168.50.168  网关:192.168.50.1 子网掩码:255.255.255.0
为了能和主机建立起连接我必须得把开发板IP改成和主机一个网段的
.

CA88新登入,(1)设置共享目录
运行命令
#gedit /etc/exports
编辑nfs服务的配置文件(注意:第一次打开时该文件是空的),添加以下内容:
/root/work/nfs *(rw,sync,no_root_squash)
运行以下命令使上面生效:
#/usr/sbin/exportfs -ra
其中:
/root/work/nfs 表示nfs共享目录,它可以作为开发板的根文件系统通过nfs
挂接
* 表示所有的客户机都可以挂接此目录
rw 表示挂接此目录的客户机对该目录有读写的权力
no_root_squash 表示允许挂接此目录的客户机享有该主机的root 身份

在嵌入式开发环境中,NFS功能是使用的最多也是提高开发效率的重要工具之一。但是在我的开发经验中,使用NFS进行挂载,尤其是根文件系统的挂载时经常会出现各种问题,虽然之前的问题和经验没有进行完整的记录,但也许以后还会遇到,因此在此对之后开发中遇到的NFS问题进行记录。

这里首先要说明的是ubuntu的静态IP设置问题:
默认安装完成后,右上角的网络配置上 wired ..和eth0为灰色。不能点选 。
然后禁用networdmanager启动network以太网设置静态IP的时候,不管怎么设置,
子网掩码都和网关一样,
比如说:地址:192.168.0.22
子网掩码: 192.168.0.1 //不管怎么输入255.255.255.0 ,都不行!
网关: 192.168.0.1
//这里改了255.255.255.0的话,上面就也成255.255.255.0了。(auto
ethernet是可以联上网的)。所以就上GG找答案,找解决方法。

(2) 启动和停止nfs 服务
在命令行下运行:
#/etc/init.d/nfs start
或者:service nfs start
挂载nfs到本地目录,检验nfs该服务是否启动:
# mount -t nfs localhost:/root/work/nfs /mnt/nfs
如果没有出现错误信息,将可以浏览到/mnt/nfs
目录中的内容和/root/work/nfs目录中是一致的。
使用下面命令可以停止 nfs 服务:
#/etc/init.d/nfs stop
或者:service nfs start
为了在每次开机时系统都自动启动该服务,可以输入
#RedHat-config-services
打开系统服务配置窗口,在左侧一栏找到nfs
服务选项框,并选中它,保存即可开机启动.

 

进入FC10,执行终端命令(也可以用VI修改)
$ su -c ‘gedit
/etc/sysconfig/networking/devices/ifcfg-eth0′
直接修改文件中的子网掩码信息就可以
代码为:
# Broadcom Corporation NetXtreme BCM5752 Gigabit Ethernet PCI Express
DEVICE=eth0
HWADDR=00:16:e6:db:c2:96
ONBOOT=yes
BOOTPROTO=static //这个应该是“static”,而不是“dhcp”或“none”;
USERCTL=yes
PEERDNS=yes
IPV6INIT=no
NM_CONTROLLED=yes//这个应该是“yes”,如不修改,链接仍是disconnected;
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=192.168.50.72
GATEWAY=192.168.50.1
然后重新激活下网卡就可以了.
#service network restart
设置完成后,右上角的网络配置上System eth0与auto
ethernet就可以点选了.

(3)使用方法
把VM中的Fedora设置成bridge模式,重启,IP设为10.10.143.103,使用下面命令检查一下:
#mount -t nfs -o nolock 10.10.143.103:/root/work/nfs /mnt/nfs
如果成功可在开发板上也使用以上命令挂载.

挂载失败:No Such Device问题

需要说明的是因为我之前没有设置静态IP之前通过 NFS 启动系统启动不了.

##################
test command
mount -t nfs localhost:/home/gs/work/ramdisk /mnt/ramdisk/
mount -t nfs 10.10.143.103:/home/gs/work/ramdisk /mnt/ramdisk/
mount -t nfs 10.10.143.103:/home/gs/work/nfs /mnt/nfs -o proto=tcp -o
nolock

01

连接主机和开发板
我选择了串口线和网线连接起了主机和开发板
连接好电源,串口线,网线,打开串口终端


/tmp $ mount -t nfs 192.168.0.7:/work/dvr/software/dvr /tmp -o nolock

配置minicom(在FC10终端输入命令minicom
-s)

nfs:server is not responding,still trying 原因与解决方案
NFS 的默认传输协议是
UDP,而PC机与嵌入式系统通过UPD交互时就会出现严重的网卡丢包现象。可用的解决方案是:在客户端改用TCP协议,使用下面的命令,

02

进入到minicom配置界面后选择 :Serial port setup

mount -t nfs -o intr,nolock,tcp,rsize=1024,wsize=1024
10.10.143.103:/home/gs/work/nfs /mnt/nfs

mount: Mounting 192.168.0.7:/work/dvr/software/dvr on /tmp failed: No
such device

然后按照下面的设置下就OK了

mount -t nfs -o nolock -o tcp 10.10.143.103:/home/gs/work/nfs /mnt/nfs

03

A – Serial Device : :/dev/ttyS0
B – Lockfile Location : /var/lock
C – Callin Program :
D – Callout Program :
E – Bps/Par/Bits : 115200 8N1
F – Hardware Flow Control : No
G – Software Flow Control : No


/tmp $ ls

建立和配置 NFS 服务
(1)设置共享目录
运行命令
#gedit /etc/exports
编辑 nfs 服务的配置文件(注意:第一次打开时该文件是空的),添加以下内容:
/opt/FriendlyARM/mini2440/root_qtopia *(rw,sync,no_root_squash)
其中:
/opt/FriendlyARM/mini2440/root_qtopia 表示 nfs
共享目录,它可以作为开发板的根文件系统通过 nfs 挂接;
* 表示所有的客户机都可以挂接此目录
rw 表示挂接此目录的客户机对该目录有读写的权力
no_root_squash 表示允许挂接此目录的客户机享有该主机的 root
身份

mount -t nfs -o intr,nolock,tcp,rsize=1024,wsize=1024
10.10.143.103:/root/work/busybox/rootfs_ipnc/ /mnt/nfs

04

(2)通过命令启动和停止 nfs 服务
在命令行下运行:
#/etc/init.d/nfs  restart
这将启动 nfs 服务,可以输入以下命令检验 nfs 该服务是否启动。
# mount -t nfs 192.168.50.72:
/opt/FriendlyARM/mini2440/root_qtopia  /mnt/
如 果 没 有 出 现 错 误 信 息 , 您 将 可 以 浏 览 到 /mnt 目 录 中 的 内
容 和
/opt/FriendlyARM/mini2440/root_qtopia 是一致的。
使用这个命令可以停止 nfs 服务:
#/etc/init.d/nfs stop

mount -t NFS -o nolock -o tcp 10.10.143.103:/home/gs/work/nfs /mnt/nfs

/tmp $ cd ..

检查nfs服务器是否开启:  #service nfs
status
重启对应的2个服务:      #service portmap
restart
#service nfs restart
检查防火墙看是否屏蔽了nfs端口
#service iptables stop
#service iptables
status

CA88新登入 1

05

通过 NFS 启动系统
当 NFS 服务设置好并启动后,我们就可以把 NFS
作为根文件系统来启动开发板了。通过使用 NFS
作为根文件系统,开发板的“硬盘”就可以变得很大,因为您使用的是主机的硬盘,这是使用
linux 作为开发经常使用的方法,
设置目标板启动模式为 Nand Flash
启动,连接好电源,串口线,网线;打开串口终端,在开机或者复位的时候迅速按下 PC
机的空格键,这样我们就进入了 vivi 模式,输入以下命令:
Supervivi> param set linux_cmd_line “console=ttySAC0
root=/dev/nfs
nfsroot=192.168.50.72:/opt/FriendlyARM/mini2440/root_qtopia
ip=192.168.50.168:192.168.50.72:192.168.50.1:255.255.255.0:mini2440:eth0:off”

/ $ mount -t nfs 192.168.0.7:/work/dvr/software/dvr /tmp -o nolock

(1,如果通过minicom监控串口,如出现乱码,可将波特率调高点,我调的是
115200                                            2,输入命令过长的话,发现minicom没法换行,其实也可以设置一下:同时按下CTRL+A  松开后按  W换行开关)

06

 

mount: Mounting 192.168.0.7:/work/dvr/software/dvr on /tmp failed: No
such device

注意:要是你用的是usb转串口console=ttyUSB0。还有就是你要把你想挂载的文件系统放在共享的文件里面(root_qtopia)

07

 

/ $ ls tmp/

其中 ,param set linux_cmd_line 是设置启动 linux
时的命令参数。其各参数的含义如下:
nfsroot 后面是自己开发主机的 IP 地址。
“ip=”后面:
第一项(192.168.50.168)是目标板的临时 IP(注意不要和局域网内其他 IP
冲突);
第二项(192.168.50.72)是开发主机的 IP;
第三项(192.168.50.1)是目标板上网关(GW)的设置;
第四项(255.255.255.0)是子网掩码;
第五项是开发主机的名字(一般无关紧要,可随便填写)
eth0 是网卡设备的名称
然后输入 boot,按回车就可以通过 nfs 启动系统了。

08

 

/ $ modprobe nfs  #原因:nfs模块加载有问题

在开发板上挂载NFS网络文件系统(Linux
中最常用的方法就是采用 NFS
来执行各种程序,这样可以不必花费很多时间下载程序,虽然在此下载 hello
程序用不了多久,一旦您的应用程序变得越来越大,您就会发现使用 NFS
运行的方便所在。)
通过NFS启动系统后,在开发板终端输入
[root@FriendlyARM /]# mount -t nfs -o nolock
192.168.50.72:/opt/FriendlyARM/mini2440/root_qtopia
              /mnt/
这里我刚开始遇到了一个问题,以为为什么开发板不能mount,因为提示如下错误信息:                                    mount:
mounting 192.168.50.72:/opt/FriendlyARM/mini2440/root_qtopia on /mnt/
failed: No such file or directory
于是我就ls看了一下,发现没有mnt文件夹,所以就自己创建了一个.再次mount就没有问题了.
[root@FriendlyARM /]# ls
bin      etc      home     linuxrc  proc     sbin     tmp      var
dev      hello    lib      opt      root     sys      usr      www

09

 

/ $ mount -t nfs 192.168.0.7:/work/dvr/software/dvr /tmp -o nolock

[root@FriendlyARM /]# mkdir mnt
[root@FriendlyARM /]# ls
bin      hello    linuxrc  proc     sys      var
dev      home     mnt      root     tmp      www
etc      lib      opt      sbin     usr
[root@FriendlyARM /]# mount -t nfs -o nolock
192.168.50.72:/opt/FriendlyARM/mini
2440/root_qtopia  /mnt/
[root@FriendlyARM /]# cd /mnt/
[root@FriendlyARM /mnt]# ls
bin      hello    linuxrc  proc     sys      var
dev      home     mnt      root     tmp      www
etc      lib      opt      sbin     usr

10

 

/ $

mount成功后你进入到/mnt目录下就可以看到你主机root_nfs目录下的内容了.

其它常见的挂载失败原因就是:目录的访问权限和未使用nolock选项。

 

在嵌入式开发环境中,NFS功能是使用的最多也是提高开发效率的重要工具之一。但是在我的开发经验中,使用NFS进行挂…

至此我成功在ARM开发板上挂载NFS网络文件系统.

 

from:

 

下边是我转载的完美的实现ubuntu的nfs方法步骤:

 

网络文件系统(NFS)

 

一、NFS简介

 

1、NFS就是Network File
System的缩写,它的最大功能就是可以通过网络让不同的机器,不同的操作系统彼此共享文件(share
files)——可以通过NFS挂载远程主机的目录,访问该目录就像访问本地目录一样,所以也可以简单的将它看作一个文件服务器(File
Server)。

 

注意:一般而言,使用NFS服务能够方便地使各unix-like系统之间实现共享,但如果需要在unix-like和windows系统之间共享,那就得使用samba了。

 

2、NFS是通过网络进行数据传输,那么NFS使用哪些端口呢,答案是……不知道,因为NFS传输数据时使用的端口是随机的,唯一的限制就是小于1024,客户端怎么知道服务器使用的是哪个端口,此时就要用到远程过程调用RPC。

 

其实,NFS运行在SUN的RPC(Remote
Procedure
Call,远程过程调用)基础上,RPC定义了一种与系统无关的方法来实现进程间通信,由此,NFS
Server也可以看作是RPC Server。正因为NFS是一个RPC服务程序,所以在使用它之前,先要映射好端口——通过portmap设定。比如:某个NFS
Client发起NFS服务请求时,它需要先得到一个端口(port),所以它先通过portmap得到port
number(不仅是NFS,所有的RPC服务程序启动之前,都需要先设定好portmap)。

 

注意:在启动RPC服务(比如NFS)之前,需要先启动portmap服务。

 

3、NFS允许系统将其目录和文件共享给网络上的其他系统。通过NFS,用户和应用程序可以访问远程系统上的文件,就像它们是本地文件一样。那么NFS最值得注意的优点有:
(1)本地工作站可以使用更少的磁盘空间,因为常用数据可以被保存在一台机器上,并让网络上的其他机器可以访问它。
(2)不需要为用户在每台网络机器上放一个用户目录,因为用户目录可以在NFS服务器上设置并使其在整个网络上可用。
(3)存储设备如软盘、光驱及USB设备可以被网络上其它机器使用,这可能可以减少网络上移动设备的数量。

 

二、与NFS相关的几个文件和命令

 

1、/etc/exports
对NFS服务的访问是由exports来批准,它枚举了若干有权访问NFS服务器上文件系统的主机名。

 

2、/sbin/exportfs
维护NFS的资源共享,可以通过它重新设定/etc/exports的共享目录,卸载NFS
Server共享的目录或者重新共享等。

 

3、/usr/sbin/showmount
上面的文件主要用在NFS
Server端,而showmount则主要用在Client端,showmount可以用來查看NFS共享的目录资源。

 

4、/var/lib/nfs/xtab
NFS的记录文档:通过它可以查看有哪些Client连接到NFS主机的记录。

 

下面这几个并不直接负责NFS,实际上它们是负责所有的RPC。

 

5、/etc/default/portmap
实际上,portmap负责映射所有的RPC服务端口,它的内容非常非常之简单。

 

6、/etc/hosts.deny
设定拒绝portmap服务的主机,即禁止访问的客户端IP列表。

 

7、/etc/hosts.allow
设定允许portmap服务的主机,即允许访问的客户端IP列表。

 

三、NFS安装

 

在主机上安装NFS服务软件,因为Debian/Ubuntu上默认是没有安装的。