2016-01-20 11:34:38
来 源
中存储网
Ubuntu
虚拟机中Ubuntu成功挂载NFS并为arm11烧录YAFFS2文件系统的成功经验分享。今天挂载成功后,才觉得那些问题中有很多都是可以避免的。但也许从另一个角度来讲,也是在锻炼自己的能力。 先说一说主要的步骤,然后我就说说要挂载成功的几个关键地方吧。

虚拟机中Ubuntu成功挂载NFS并为arm11烧录YAFFS2文件系统的成功经验分享

为了在虚拟机Ubuntu中挂载nfs成功,期间遇到了很多的问题。今天挂载成功后,才觉得那些问题中有很多都是可以避免的。但也许从另一个角度来讲,也是在锻炼自己的能力。

先说一说主要的步骤,然后我就说说要挂载成功的几个关键地方吧,你挂载不成功,很有可能就是这几个关键地方没有做好。

首先第一步就是要为开发板烧写uboot和kernel。

1.先将SD卡格式化为FAT32格式。将启动代码固化到SD卡中。

能出现的问题:1 volume erro之类的。

解决方法:重新插拔SD卡,某些情况下可能要换一张SD卡试一试。

2.下载Uboot到nandflash中并设置Uboot工作参数。注意的就是串口和波特率要设置对。

可能出现的问题:
1.ARNING: OEMMultiBINNotify: Invalid BIN region descriptor(s).
Don't support raw image

解决方法:这种情况请注意选这从USB Port-->UBOOT-->UBOOT”,注意是选Uboot,而不是选transmit。
2.无法将uboot写进nandflash

解决方法:请一直按着ENTER键,直到OK出现。(这一般是nand erase没有干净,一定要等到OK出现。一旦不出现,说明没有擦除干净)

3.烧写Kernel。

可能出现的问题一般同上面的2,注意我说的几点即可。

4.安装根文件系统,也是非常重要的一步。一旦你要安装yaffs2文件,这其中又会涉及要挂在NFS。

假设大家要安装的是yaffs2文件。

首先第一步:安装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)”。

第三步:创建共享目录

例如大家采用/home/localhost/arm6410/root作为NFS共享目

$ sudo mkdir arm6410

$ cd  arm6410

$ sudo mkdir root  

$ chmod 777 arm6410   (更改文件权限,这个一定要改,不然很可能后面会出问题)

$ chmod 777 root          (更改文件权限,这个一定要改,不然很可能后面会出问题)

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

修改主机上/etc/exports文件的内容,添加一行:/home/localhost/arm6410/root    *(rw,sync,no_root_squash)
$ sudo vim /home/localhost/arm6410/root    *(rw,sync,no_root_squash)  

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

其中:
/home/localhost/arm6410/root    表示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

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

假设:

主机IP:192.168.1.20
目标板IP:192.168.1.10

关于怎么知道目标板的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.20
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.10 netmask 255.255.255.0  broadcast 192.168.1.1  up

:wq 保存退出

(//也可以命令更改# ifconfig eth0 202.118.212.168 netmask 255.255.255.0 )
改完后就重启一下开发板。

第七步:在开发板上设定启动参数
通过u-boot设置启动参数
u-boot启动时,在命令提示符下设置启动参数如下:
setenv bootargs "root=/dev/nfs nfsroot=192.168.1.20:/home/localhost/arm6410/root/ ip=192.168.1.10:192.168.1.20:192.168.1.1:255.255.255.0:arm6410:eth0:off console=ttySAC0,115200"
其中:

192.168.1.20为主机IP地址

/home/localhost/arm6410/root为共享目录

192.168.1.10为开发板的IP地址

console=ttySAC0,115200为控制台参数。

保存参数:saveenv

第八部:烧写yaffs2文件

重启后在uboot命令中nand erase x  x 也即要烧写的区域

然后重启在开发板环境中,在终端输入writeyaffs即可(不同的开发板命令不同,请注意)

到此基本完成,yaffs2文件系统已经烧写好了。

最后一步:设置启动参数

重启开发板,将yaffs2文件配置为根文件系统。

在uboot命令行中输入以下参数:

setenv bootargs "root=/dev/mtdblock2 rootfstype=yaffs2 console=ttySAC0,115200"

saveenv

由此整个挂载NFS及配置yaffs2文件成功! 

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。