一、概述
开发板Linux系统挂载nfs文件系统,可以让我们做以下事情:
1. 通过挂载Ubuntu上的目录,不用传输Ubuntu上交叉编译好的程序,直接在开发板上运行;
2. 开发板Linux系统从nfs文件系统启动,不用烧写Flash就能验证“所制作的Linux根文件系统”。
下面就来实现开发板Linux系统挂载nfs文件系统。
测试环境: Ubuntu12.04 + TQ2440开发板
二、开发板Linux系统挂载Ubuntu的nfs文件系统
1、Ubuntu安装nfs服务器
#sudo apt-get install nfs-kernel-server
2、构建nfs待共享的目录
例如我这里共享的root_nfs目录,并把需要共享的文件放到这个目录里。我这里把开发板Linux系统的根文件系统放到这个目录。
#cd /opt/EmbedSky/
#mkdir root_nfs
3、修改nfs服务器配置文件
/etc/exports是nfs服务器的配置文件,描述共享的目录权限
#sudo vi /etc/exports
插入内容:
/opt/EmbedSky/root_nfs *(rw,sync,no_root_squash)
-/opt/EmbedSky/root_nfs nfs服务器共享的目录
-“*” 所有的客户机都可以挂载此目录
-“rw” 表示挂载此目录的客户机对该目录有读写的权限
-“no_root_squash” 允许挂载此目录的客户机享有该主机的root身份
4、Ubuntu启动nfs服务器服务
#sudo /etc/init.d/nfs-kernel-server start
如果不启动nfs服务,即使开发板的客户端连接,也挂载不成功。
5、在Ubuntu下测试nfs服务是否成功
#cd /opt/EmbedSky #mkdir test_nfs #mount -t nfs 172.20.16.17:/opt/EmbedSky/root_nfs /opt/EmbedSky/test_nfs
我在/opt/EmbedSky目录下建立了一个目录test_nfs,把共享的目录root_nfs挂载到这个目录。
172.20.16.17是我虚拟机Ubuntu设置的IP地址。
测试结果可以看到在test_nfs目录下出现了root_nfs目录下内容。
6、开发板Linux系统挂载nfs文件系统
#mount -t nfs 172.20.16.17:/opt/EmbedSky/root_nfs /mnt -o nolock
再做此步骤之前,需要确保开发板Linux系统与虚拟机Ubuntu系统IP(172.20.16.17)在同一网段,我的开发板Linux系统IP设置为“172.20.16.16”。
通过以上操作,就可以看到在开发板Linux系统的/mnt目录下出现了虚拟机Ubuntu系统共享的/opt/EmbedSky/root_nfs目录下内容。
三、开发板Linux系统从nfs文件系统启动
需要说明的是开发板Linux系统从nfs文件系统启动,指的仅仅只是“根文件系统部分”启动过程,开发板Linux系统的u-boot和Linux内核部分都是从Flash启动的。
1、在Ubuntu下构建共享的nfs根文件系统

2、确保Ubuntu启动nfs服务器服务
3、在u-boot命令模式下修改启动参数

4、保存参数到Flash
5、重新启动Linux系统
可以看到已经成功挂载NFS文件系统

四、开发板Linux系统从nfs文件系统启动遇到的问题
1、不能挂载nfs文件系统
![]()
可能原因:Ubuntu的nfs服务器没有启动nfs服务
解决办法:启动nfs服务
2、可以挂载nfs文件系统,但是过一会儿服务器没有响应
![]()
可能原因:Linux从根文件系统启动过程中,重新配置了网卡IP,导致IP更改
解决办法:禁止重新配置网卡IP
具体做法:在Ubuntu系统重修改/opt/EmbedSky/root_nfs目录下ect/int.d/rcS文件,屏蔽掉“net_set &”,改为“#net_set &” ,保存。然后再重启开发板Linux系统。
参考资料:
《天嵌科技出品-Linux移植之Step By Step_V4.5_20100605》
浙公网安备 33010602011771号