Chinaunix首页 | 论坛 | 博客
  • 博客访问: 44219
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 110
  • 用 户 组: 普通用户
  • 注册时间: 2013-02-28 09:47
文章分类

全部博文(9)

文章存档

2015年(9)

我的朋友

分类: LINUX

2015-09-25 13:10:53

嵌入式linux的开发中,内核移植及根文件系统的建立过程中,为了验证内核移植是否成功,根文件系统的建立是否可行,需要将它们的映像文件烧写到Flash中反复试验。如此频繁地烧写Flash,既浪费时间,减低了开发效率,还会对Flash造成损伤。因此在内核移植及根文件系统的建立过程中一般采用网络引导。具体操作过程如下:

 

Ubuntu上默认是没有安装NFS服务器的,首先要安装NFS服务程序:
1、安装

$ sudo apt-get install nfs-kernel-server
(安装nfs-kernel-server时,apt会自动安装nfs-common和portmap)
这样,宿主机就相当于NFS Server,同样地,目标系统作为NFS的客户端,需要安装NFS客户端程序。如果是Ubuntu系统,则需要安装nfs-common。
$ sudo apt-get install nfs-commmon
nfs-common和nfs-kernel-server都依赖于portmap。
2、 配置NFS

(1)配置portmap
方法1: 编辑/etc/default/portmap, 将 最后一行注释掉。
方法2: $ sudo dpkg-reconfigure portmap , 对Should portmap be bound to the loopback address? 选N.

(2)配置/etc/hosts.deny
(禁止任何host(主机)能和你的NFS服务器进行NFS连接),加入:
### NFS DAEMONS
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL

(3)配 置/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的访问.

(4)配置/etc/exports
NFS挂载目录及权限由/etc/exports文件定义 : 
比如要将根目录/ 让192.168.1.*的IP共享, 则在该文件末尾添加下列语句:
    192.168.1.*(rw,sync,no_root_squash)
注意这里,这样写有可能你的NFS还不能用,你可以允许所以IP共享你的目录,语句如下:
   *(rw,sync,no_root_squash)

//-- rw表示挂载此目录的客户机对此目录有读写权利;

//no_root_squash表示挂载此目录的客户机享有主机root的权利;

修改完成配置之后可输入sudo exportfs –rv来使配置文件生效。

3、配置宿主机IP

配置宿主机的IP,在ubuntu终端中使用ifconfig来查看本机的IP地址。如果没有设置,可以用命令 # ifconfig eth0 IP 来设置IP。其中的IP地址可以根据具体情况来设定。设定完成后在通过ifconfig来再次查看是否已经设定成功。

注:

在虚拟机设置中将网络连接设为“桥接模式”,选中“复制物理网络连接状态”;

如果开发板与电脑直接网线连接,则windows、ubuntu、开发板的ip需要在同一个网段;

如果开发板与电脑分别接至路由器或交换机,那么windows、ubuntu的ip可以设置为自动获取,此时使用ifconfig查看ip,然后根据此ip将开发板ip也设置到同一网段。

4、重启NFS

sudo /etc/init.d/portmap  restart
sudo /etc/init.d/nfs-kernel-server restart

 

测试 NFS

可以运行命令showmount -e显示ubuntu共享的nfs目录;

记着关闭linux防火墙,使用命令sudo ufw disable;

检查目标版kernel是否支持NFS服务,使用命令cat /proc/filesystems,看是否有NFS一行;若没有,则需要重新编译、烧写内核;

1、 Ubuntu
mount localhost:/home/##/nfsroot /mnt(假设/home/##/nfsroot为设置的nfs共享目录)
ls /mnt
看是否已经挂载成功;

若卸载使用sudo umount /mnt;

2、 开发板下

    目标板上电,在PC机上Ubuntu操作系统上打开minicom。目标板上Linux的uboot从tftp或SD起来以后,设置环境变量从tftp或SD启动后挂载NFS。
    像主机操作一样,首先检查目标板(客户机)的IP是否与宿主机的IP再同一个地址段上,否则用上面用过的命令进行检查和设置本地IP。设置完IP之后可以ping一下检查网卡、网线是否连接正确。

    在uboot命令行输入ping主机IP地址,连接成功会显示host is alive。

    设置环境变量启动后NFS挂载,进入开发板系统后,ping 主机ip地址,不断打印连接成功信息;
    1)在ubuntu下的nfs共享目录/home/##/nfsroot/rootfs下添加文件后,在开发板系统内,通过ls可以看到之前添加的文件;

    2)在开发板上进行挂载

mount -o nolock 192.168.1.102: /home/##/nfsroot/rootfs /mnt

//假设192.168.1.102 是Ubuntu的IP 地址、/home/##/nfsroot/rootfs为设置的nfs共享目录
ls /mnt
//看是否已经挂载成功;如果你想取消挂在可以使用命令# umount /mnt就可以了。

在此过程中可能出现的错误:
1)挂载不成功

可以这样试试:
配置/etc/exports
/home/##/nfsroot /mnt *(rw,sync,no_root_squash)
也就是允许所有的IP 访问。
2)提示 mount rpc unable to receive errno connection refused
说明你的服务器端Ubuntu服务没设定好,原因可能如下:
a)NFS 没启动,按照上面的启动步骤 再重新启动一下;
b)看一下 文件 /etc/exports 和文件/etc/hosts.allow 里面的IP 是不是已经包含开发板 IP,不包含的话,把网段写上,重新启动 NFS。

阅读(1562) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~