在开发板上要使用nfs方式启动linux的主要原因:可以在电脑上完成程序的调试,不用反复擦写flash,快速完成开发。
nfs基础知识:
来自:http://www.cio69.com/html/201118/89.html
NFS守护进程:NFS是通过使用许多用户级的守护进程及远程过程调用等网络应用程序来实现的。而NFS服务器及客户端的守护进程并不完全一致。
为了实现这一功能,
第一、在电脑上安装nfs服务器。
1.运行rpm -qa|grep portmap查看有没有portmap安装包
2.运行rmp -qa | grep nfs查看相关的nfs安装包
如果没有就到相应的安装光盘里找。在redhat enterprise6这个版本里默认安装里没有portmap包。(或许是没有显式说明)但运行nfs不受影响
第二、配置/etc/exports文件
基本格式
指定共享目录 指定能访问的主机(权限)
例如:/home/share 192.168.1.100(rw,sync,no_root_squash)
说明
来自:http://www.cnblogs.com/heiyue/archive/2011/05/31/2065159.html
目录:自己定义的
/arm2410cl *(或缺省) 所有主机
/arm2410cl/temp 192.168.1.0/24(或192.168.1.*) 指
定子网中的所有主机
/arm2410cl/mail www.chen.com 指定域名的主机
/arm2410cl/samba *.chen.com 指定域中的所有主机
/arm2410cl/ftp 192.168.1.10指定IP地址的主机
基本权限:
ro: 只读
rw: 读写
两个基本权限是单选的,选择ro,rw就不能存在。同理,选择rw
就不能选择ro
常规选项:
Insecure:允许来自高于1024的端口的连接
Insecure_locks:允许不安全的文件锁定
no_subtree_check:禁用子树查询
sync:按要求同步写操作
no_wdelay:立即强制同步写操作
用户访问:
no_root_squash:把远程根用户当作本地根用户
all_squash:把所有客户用户当作匿名用户
anonuid=XXX:为匿名用户指定本地用户ID
anongid=XXX:为匿名用户指定本地组群ID
维护NFS服务的输出目录列表
每当修改了/etc/exports文件的内容后,实际上不需要重新启动NFS服务,而直接使用命令exportfs就可以使设置立即生效。exportfs -av
exportfs [选项]
选项有以下几个。
-a:输出在/etc/exports文件中所设置的所有目录。
-r:重新读取/etc/exports文件中的设置,并使设置立即生效
,而不需重新启动NFS服务。
-u:停止输出某一目录。
-v:在输出目录时将目录显示到屏幕上。
1.重新输出共享目录每当修改了/etc/exports文件的内容后,可使用下面的命令来重新输出共享目录Exports –-rv
2.停止输出所有共享目录要停止输出当前主机中NFS服务器的所有共享目录,可使用下面的命令。exportfs –-auv
使用showmount命令测试NFS服务器的输出目录状态
showmount命令的基本格式为:
showmount –-e 192.168.1.10
showmount
showmount命令如下:
# showmount [-ae] hostname
参数说明如下。
(1)-a:以host:dir这样的格式来显示客户主机名和挂载点目录。
(2)-d:仅显示被客户挂载的目录名。
(3)-e:显示NFS服务器的输出清单。
(4)-h:显示帮助信息。
(5)-v:显示版本信息。
(6)--no-headers:禁止输出描述头部的信息。
当要扫描某一主机所提供的NFS共享的目录时,使用showmount -e IP(或主机名称hostname)即可。
nfs所开启的端口是2049,其他端口是RPC Server等程序(例如rpc.mountd、rpc.rquotad及rpc.nfsd.)随机产生的
(即端口号不会是固定的,每次restart nfs都会得到不一样的端口号)。
第三、启动nfs
service nfs start
service portmap start
如果要停止:将start换成stop即可。查询
ps aux | grep nfsd
ps aux | grep portmap
如果要设置nfs为自动启动状态除了使用setup办法外,还可以使用:
chkconfig --list portmap
chkconfig --list nfs
chkconfig --level 35 portmap on
chkconfig --level 35 nfs on
第四、配置开发板的启动参数
uboot> setenv bootargs 'console=ttyS0,115200n81 mem=64M root=/dev/nfs rw nfsroot=192.168.1.95:/home/uncompress/rootfs ip=192.168.1.104:192.168.1.95:192.168.1.1:255.255.255.0:yongan.com:eth0:off'
ip=”后面:
第一项(192.168.1.104)是目标板的临时IP(注意不要和局域网内其他IP 冲突);
第二项(192.168.1.95)是开发主机的IP;
第三项(192.168.1.1)是目标板上网关(GW)的设置;
第四项(255.255.255.0)是子网掩码;
第五项是开发主机的名字(一般无关紧要,可随便填写)
eth0 是网卡设备的名称。
第五、配置linux内核,编译下载到开发板中。
第六、检查网络连通性。最好将开发板启动后的ip设成静态的,并与主机iP在一个子网内。
可能出现的问题:
Server returned error -13 while mounting
可能是开发板设置的启动根文件与nfs服务器设置的共享文件不一致,甚至根本没有配置nfs的exports文件
Root-NFS: Server returned error -5 while mounting
可能是没有安装或启动portmap服务,也有可能是网络不通导致
如果出现网络问题,先ping一下,仔细查看下关于网络不通可能的原因:防火墙,网线脱落,ip设置,selinux设置,如果有虚拟机,还有可能是网卡选择等。
最后就是:开发板有关于网络的驱动有问题也会造成上面的现象