主机:虚拟机 ubuntu12

开发板:Tiny6410

网路模式:桥接方式     在虚拟机中手动新建一个有线连接,配置IPv4的IP,网关等选项


首先第一步:安装NFS

在主机(我是在虚拟机中的ubuntu)上安装NFS服务软件,因为Debian/Ubuntu上默认是没有安装的。

1、安装端口映射器portmap

$ sudo apt-get install portmap

2、在终端提示符后键入以下命令安装NFS服务器

$ sudo apt-get install nfs-kernel-server

3、安装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步)。

第二步:配置NFS

1、配置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)”。

第三步:创建共享目录(按照自己虚拟机实际情况进行创建)

例如我们采用/opt/FriendlyARM/Tiny6410/linux/rootfs_qtopia_qt4 作为NFS共享目

$sudo cd /opt/FriendlyARM/Tiny6410/
$ sudo mkdir linux
$ cd  linux
$ sudo mkdir  rootfs_qtopia_qt4
$ chmod 777 linux  (更改文件权限,这个一定要改,不然很可能后面会出问题)
$ chmod 777 rootfs_qtopia_qt4

第四步:配置共享目录及yaffs2文件

修改主机上/etc/exports文件的内容,$ sudo vim /etc/exports

添加一行:/opt/FriendlyARM/Tiny6410/linux/rootfs_qtopia_qt4   *(rw,sync,no_root_squash)

注:后面设置uboot启动参数的时候,目录名要和这个一样。

其中:
/opt/FriendlyARM/Tiny6410/linux/rootfs_qtopia_qt4     表示NFS共享目录,它可以通过NFS挂接作为开发板的根文件系统;
* 表示所有的客户机都可以挂接此目录,当然你也可以指定具体的IP,如192.168.x.x;
rw 表示挂接此目录的客户机对该目录有读写的权力;
sync 表示所有数据在请求时写入共享,即数据同步写入内存和硬盘;
no_root_squash 表示允许挂接此目录的客户机享有该主机的root身份;

配置好文件共享目录后,将yaffs2文件放置在共享目录下,然后解压即可。

第五步:启动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

第六步:配置目标板和主机(我的是虚拟机中ubuntu)IP

1. 这两个IP一定要在同一个网段内,否则会出现很多的问题,很多像Root-NFS: Server returned error -5 while mounting /forlinx/root的问题就是由此引起。

2. 两个IP必须有相同的子网掩码,否则会出现这样的问题:

IP-Config: Cannot add default route (-101).
Looking up port of RPC 100003/2 on 192.168.0.7
eth0: link up, 100Mbps, full-duplex, lpa 0x41E1
Looking up port of RPC 100005/1 on 192.168.0.7
VFS: Mounted root (nfs filesystem) on device 0:11.
Freeing init memory: 128K
FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will b
e case sensitive!
[14/Dec/2008:05:19:25 +0000] boa: server version Boa/0.94.13
[14/Dec/2008:05:19:25 +0000] boa: server built Mar 26 2009 at 15:28:42.
[14/Dec/2008:05:19:25 +0000] boa: starting server pid=508, port 80
Try to bring eth0 interface up......nfs: server 192.168.1.112 not responding, stil
l trying
nfs: server 192.168.1.112 not responding, still trying

假设:

主机IP:192.168.1.100
目标板IP:192.168.1.230

2种挂载方式:

一. 启动开发板Linux前挂载NFS文件系统

关于怎么知道目标板的IP,在你设置uboot环境变量后,使用printenv,既可以查看到目标板的IP信息。

那么这一步就有两种选择:1是更改主机IP,这个相对简单。(当然以后为了上网可以再改回去)

$ sudo vim  etc/network/interfaces

然后设置:

auto lo
 iface lo inet loopback
auto eth0
 iface eth0 inet static
 address 192.168.1.100
 netmask 255.255.255.0
 gateway 192.168.1.1

保存后重启

sudo /etc/init.d/networking restart

2是更改目标板IP,这个前提是你能够进入开发板环境,一般也就是你已经安装了类似cramfs文件系统,但是你想要用yaffs2文件系统的。

进入开发板环境,进入到/etc/init.d/目录下会看到一个rcS文件,IP就是在这个文件修改的。
# vim /etc/init.d/rcS

加上一段:

/sbin/ifconfig eth0 192.168.1.230 netmask 255.255.255.0  broadcast 192.168.1.1  up

:wq 保存退出

改完后就重启一下开发板。

第二步:在开发板上设定启动参数
通过u-boot设置启动参数
u-boot启动时,在命令提示符下设置启动参数如下:
console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.100:/opt/FriendlyARM/Tiny6410/linux/rootfs_qtopia_qt4 ip=192.168.1.230:192.168.1.100:192.168.1.1:255.255.255.0:mini6410.arm9.net:eth0:off
其中:

192.168.1.100为主机IP地址

/opt/FriendlyARM/Tiny6410/linux/rootfs_qtopia_qt4 为共享目录

192.168.1.230为开发板的IP地址

console=ttySAC0为控制台参数。

保存参数:saveenv

改完后启动linux

由此整个挂载NFS文件成功!

二、启动开发板Linux后挂载NFS文件系统

前提:开发板与主机互ping成功   开发板nfs开启

在开发板串口终端输入:mount -t nfs -o nolock 192.168.1.100:/opt/FriendlyARM/Tiny6410/linux/rootfs_qtopia_qt4  /mnt

ls /mnt 即可看到NFS挂载的文件

参考连接:  http://www.linuxidc.com/Linux/2011-03/33926p2.htm