ARM开发板如何挂载NFS开发环境的方法步骤(mini2440无盘启动)

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

首先介绍一下个人开发环境:
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改为和主机一个网段的 .shell

这里首先要说明的是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找答案,找解决方法。ubuntu

进入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就能够点选了.windows

须要说明的是由于我以前没有设置静态IP以前经过 NFS 启动系统启动不了.安全

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

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

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

而后按照下面的设置下就OK了async

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 : Noide

创建和配置 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 身份

(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

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

经过 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”

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

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

其中 ,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 启动系统了。

在开发板上挂载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

[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

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

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

from:http://www.cembed.com/bbsxp/ShowPost.asp?ThreadID=6579

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

网络文件系统(NFS)

1、NFS简介

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

注意:通常而言,使用NFS服务可以方便地使各unix-like系统之间实现共享,但若是须要在unix-like和windows系统之间共享,那就得使用samba了。

二、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服务。

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

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

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

二、/sbin/exportfs
维护NFS的资源共享,能够经过它从新设定/etc/exports的共享目录,卸载NFS Server共享的目录或者从新共享等。

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

四、/var/lib/nfs/xtab
NFS的记录文档:经过它能够查看有哪些Client链接到NFS主机的记录。

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

五、/etc/default/portmap
实际上,portmap负责映射全部的RPC服务端口,它的内容很是很是之简单。

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

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

3、NFS安装

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

一、安装端口映射器portmap(可选)
$ sudo apt-get install portmap

二、在终端提示符后键入如下命令安装NFS服务器
$ sudo apt-get install nfs-kernel-server

三、安装NFS客户端(可选)
$ sudo apt-get install nfs-common

注意:nfs- kernel-server和nfs-common都依赖于portmap。另外,在一些文档中提出还须要使用apt-get来手动安装NFS的客户端 nfs-common,以及端口映射器portmap,但其实这是没有必要的,由于在安装nfs-kernel-server时,apt会自动把它们安装好。

这样,宿主机就至关于NFS Server。一样地,目标系统做为NFS的客户端,须要安装NFS客户端程序。若是是Debian/Ubuntu系统,则须要安装nfs-common(第3步)。

4、NFS配置

一、配置portmap
方法1:编辑/etc/default/portmap,将"-i 127.0.0.1"去掉;
方法2:$ sudo dpkg-reconfigure portmap,出现“正在设定portmap”软件包设置界面,对Should portmap be bound to the loopback address?选择“否(No)”。

二、配置/etc/hosts.deny
禁止任何host(主机)能和你的NFS服务器进行NFS链接。在该文件中加入:

### NFS DAEMONS
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL

三、配置/etc/hosts.allow
容许那些你想要的主机和你的NFS服务器创建链接。

下列步骤将容许任何IP地址以192.168.1开头的主机链接到NFS服务器上,具体要看你目标板的端口地址,也能够指定特定的IP地址。在该文件中加入:

### NFS DAEMONS
portmap: 192.168.1.
lockd: 192.168.1.
rquotad: 192.168.1.
mountd: 192.168.1.
statd: 192.168.1.

经过/etc/hosts.deny和/etc/hosts.allow设置对portmap的访问,采用这两个配置文件有点相似"mask"的意思。先在/etc/hosts.deny中禁止全部用户对portmap的访问,再在/etc/hosts.allow中容许某些用户对portmap的访问。

而后重启portmap daemon:
$ sudo /etc/init.d/portmap restart

四、配置/etc/exports

(1)共享的NFS目录在/etc/exports中列出,这个文件控制对目录的共享(NFS挂载目录及权限由该文件定义),书写规则是每一个共享为一行)。

格式:[共享目录] [主机名或IP](参数,参数...)
第一个参数是要让客户机访问的目录,第二个是你容许的主机IP,最后的()内是访问控制方式。

注意:客户端可使用主机名或者IP地址指定,在主机名中可使用通配符(*),IP地址后也能够跟掩码段(/24),但出于安全缘由这种状况应该尽可能避免。客户端的说明后可在圆括号中加入一系列参数。很重要的一点,不要在最后一个客户端声明的后面留下任何空白或者没关闭括号,由于空白都被解释成客户端的分隔符。

例如我要将/opt/FriendlyARM/mini2440/root_nfs目录让用户的IP共享,则在该文件末尾添加下列语句:
/opt/FriendlyARM/mini2440/root_nfs *(rw,sync,no_root_squash)

其中:
/opt/FriendlyARM/mini2440/root_nfs 表示NFS共享目录,它能够做为开发板的根文件系统经过NFS挂接;
* 表示全部的客户机均可以挂接此目录;
rw 表示挂接此目录的客户机对该目录有读写的权力;
sync 表示全部数据在请求时写入共享,即数据同步写入内存和硬盘;
no_root_squash 表示容许挂接此目录的客户机享有该主机的root身份。

注意:能够用主机名来代替*,尽可能指定主机名以便使那些不想其访问的系统不能访问NFS挂载的资源。另外,最好加上sync, 不然$ sudo exportfs -r时会给出警告,sync是NFS的默认选项。

(2)下面是一些NFS共享的经常使用参数:
ro 只读访问
rw 读写访问
sync 全部数据在请求时写入共享
async NFS在写入数据前能够相应请求
secure NFS经过1024如下的安全TCP/IP端口发送
insecure NFS经过1024以上的端口发送
wdelay 若是多个用户要写入NFS目录,则归组写入(默认)
no_wdelay 若是多个用户要写入NFS目录,则当即写入,当使用async时,无需此设置
hide 在NFS共享目录中不共享其子目录
no_hide 共享NFS目录的子目录
subtree_check 若是共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的全部请求映射成如anonymous用户同样的权限(默认)
no_root_squash root用户具备根目录的彻底管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID

(3)查看NFS Server的export list:
$ sudo showmount -e

若更改了/etc/exports,运行如下命令进行更新:
$ sudo exportfs -r

而后重启NFS服务:
$ sudo /etc/init.d/nfs-kernel-server restart

5、启动和中止NFS服务

一、启动NFS的方法和启动其余服务器的方法相似,首先须要启动portmap和NFS这两个服务,而且portmap服务必定要先于NFS服务启动。
$ sudo /etc/init.d/portmap start
$ sudo /etc/init.d/nfs-kernel-server start

二、中止NFS服务
在中止NFS服务的时候,须要先中止NFS服务再中止portmap服务,若是系统中还有其余服务须要使用portmap服务,则能够不中止portmap服务。
$ sudo /etc/init.d/nfs-kernel-server stop
$ sudo /etc/init.d/portmap stop

三、从新启动portmap和NFS服务
$ sudo /etc/init.d/portmap restart
$ sudo /etc/init.d/nfs-kernel-server restart

四、检查portmap和NFS服务状态
$ sudo /etc/init.d/portmap status
$ sudo /etc/init.d/nfs-kernel-server status

五、设置自动启动NFS服务

(1)检查NFS的运行级别:
$ sudo chkconfig --list portmap
$ sudo chkconfig --list nfs-kernel-server

(2)在实际使用中,若是每次开启计算机以后都手工启动NFS服务是很是麻烦的,此时能够设置系统在指定的运行级别自动启动portmap和NFS服务。
$ sudo chkconfig --level 235 portmap on
$ sudo chkconfig --level 235 nfs-kernel-server on

6、NFS客户端配置(NFS测试)

一、在NFS服务器启动后,还须要检查Linux服务器的防火墙设置(通常须要关闭防火墙服务),确保没有屏蔽 NFS使用的端口和容许通讯的主机,主要是检查Linux服务器iptables、ipchains等选项的设置,以及/etc/hosts.deny, /etc/hosts.allow文件。一般都是在内部局域网中进行开发,再安装系统时最好不要安装防火墙等网络安全软件,以方便使用时的配置。

若是你有防火墙,请确保3277一、111和2049端口保持开放。

二、手动挂载
使用mount命令来挂载其余机器共享的NFS目录。

格式:$ sudo mount [Server IP]:/[share dir] [local mount point]

例如:
$ sudo mount -t nfs [-o nolock] localhost:/opt/FriendlyARM/mini2440/root_nfs /mnt/root_nfs 或
$ sudo mount -t nfs -o nolock 192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs /mnt/root_nfs

其中,localhost能够是具体的IP地址,同时挂载点/mnt/root_nfs目录必须已经存在,并且在/mnt/root_nfs目录中没有文件或子目录。

三、自动挂载

(1)另外一个挂载其余机器的NFS共享的方式就是在/etc/fstab文件中添加一行,该行必须指明NFS服务器的主机名、服务器输出的目录名以及挂载NFS共享的本机目录,同时必须是根用户才能修改/etc/fstab文件。

格式:server.mydomain.com:/usr/local/pub /pub nfs rsize=8192,wsize=8192,timeo=14,intr

注意:能够根据实际状况修改NFS服务器共享文件夹"servername.mydomain.com:/usr/local/pub"和在本机的挂载点"/pub",同时挂载点/pub在客户端机器上必须存在。

(2)NFS常见挂载参数:
timeo 若是超时,客户端等待的时间,以十分之一秒计算
retrans 超时尝试的次数
bg 后台挂载(颇有用)
hard 若是server端没有响应,那么客户端一直尝试挂载
rsize 读块大小
wsize 写块大小

四、使用autofs来挂载NFS

(1)挂载NFS共享的第三种方法是使用autofs,它使用automount守护进程来管理挂载点,只在文件系统被访问时才动态地挂载。

autofs访问主映射配置文件/etc/auto.master来决定要定义哪些挂载点,而后使用适用于各个挂载点的参数来启动automount守护进程。主映射配置中的每一行都定义一个挂载点,一个分开的映射文件定义在该挂载点下要挂载的文件系统。如/etc /auto.misc文件可能会定义/misc目录中的挂载点,这种关系在/etc/auto.master文件中会被定义。

(2)/etc/auto.master文件中的每一个项目都有3个字段,第1个字段是挂载点;第2个字段是映射文件的位置;第3个字段可选,能够包括超时数值之类的信息。

例如:要在机器上的/misc/myproject挂载点上挂载远程机penguin.example.net中的/project52目录。
在/etc/auto.master文件中添加如下行:
/misc /etc/auto.misc --timeout 60
在/etc/auto.misc文件中添加如下行:
myproject -rw,soft,intr,rsize=8192,wsize=8192 penguin.example.net:/proj52

/etc/auto.misc中的第1个字段是/misc子目录的名称,该目录被automount动态地建立,它不该该在客户端机器上实际存在;第2个字段包括挂载选项,如rw表明读写访问权,第3个字段是要导出的NFS的位置,包括主机名和目录。

(3)autofs是一种服务,要启动这项服务,在shell提示下键入如下命令:
$ sudo /sbin/service autofs restart
要查看活跃的挂载点,在shell提示下键入如下命令:
$ sudo /sbin/service autofs status
若是在autofs运行时修改了/etc/auto.master配置文件,则必须在shell提示下键入如下命令来通知automount守护进程从新载入配置文件:
$ sudo /sbin/service autofs reload

五、能够运行df命令查看是否挂载成功:
$ sudo df

取消挂载的命令以下:
$ sudo umount /mnt/root_nfs

7、目标板NFS配置操做

主机IP:192.168.1.101
目标板IP:192.168.1.230

将USB转串口链接上,在终端输入minicom与板子连起,做为“超级终端”使用。

启动目标板并连通网络后,首先查看目标板kernel自身是否支持NFS,在minicom中输入cat /proc/filesystems命令查看其中是否有NFS一行,若没有则表示内核不支持NFS,就须要从新编译和烧写内核;有则OK,接下来就能够直接进行mount操做了。

具体命令是:
# mount -t nfs -o nolock 192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs /mnt/root_nfs

无任何提示表示成功,这时能够进入/mnt/root_nfs目录,对文件进行cp、mv等操做。

可是若是使用命令mount -t nfs 192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs /mnt/root_nfs,则会有以下的错误提示(也就是省去了"-o nolock"):
# mount -t nfs 192.168.1.101:/opt/FriendlyARM/mini2440/root_nfs /mnt/root_nfs
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).
lockd_up: makesock failed, error=-5
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).

这时若是使用ls /mnt/root_nfs命令查看该目录内容时,你会发现此时NFS确确实实已经挂载成功了。

而后取消挂载的时候会出现以下的错误提示:
# umount /mnt/root_nfs/
lockd_down: no lockd running.

而成功取消挂载时没有任何提示,一样此时NFS也确实已经取消挂载了。

那么出现上面错误提示的可能缘由是:
nfs mount默认选项包括文件锁,依赖于portmap提供的动态端口分配功能。

简单的解决方法:kill文件锁(lockd)或者使用mount -o nolock命令。

上面说的文件锁具体是什么缘由,目前尚未找到更好的解决办法。不过,若是主机防火墙有设置时,也可能致使目标板没法正常访问。

 

 

想要使用命令端口,只要进入MINICOM(主意用笔记本的话,你的端口不能用TTY0而是TTYUSB0)进入,ENTER 后就能够输入命令了。而后直接,挂载。能够用。可是你的ETH0确定会和你的无限冲突。本身以为改了恐怕不行。由于他会不是别你的网卡,致使NFS不能链接