由于嵌入式Linux开发大多数使用的是交叉编译环境,难免很频繁的将文件在开发板和PC环境( 如ubuntu )之间传递,最方便的方法为挂载NFS。
网络文件系统NFS( Network File System )是一种将远程主机上的目录经网络挂载到本地主机的一种机制,如将ubuntu家目录 /home 挂载到开发板的 /tmp 目录。
说到挂载,大家可能觉得很专业,很抽象。我们把U盘插到电脑上,我们可以说,U盘挂载到电脑上,这样我们在电脑上能够直接看到U盘的内容。同样的,我们将ubuntu家目录 /home 挂载到开发板的 /tmp 目录,那么我们在开发板/tmp 目录能够看到ubuntu家目录 /home 的东西,这个开发板的 /tmp目录相当于ubuntu的家目录 /home 。
测试环境如下:
开发板型号:s5pv210
Linux系统(安装在虚拟机VMware player): ubuntu-12.04
ubuntu环境的配置(在PC ubuntu上操作):
1、NFS服务安装
sudo apt-get install nfs-kernel-server nfs-common
2、NFS服务配置
在 /etc/exports的最后加一句话: /home *(rw,sync,no_root_squash)
让/home家目录具备以下的属性:
rw:读/写权限,只读权限的参数为ro;
sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内存中,而不立即写入硬盘。
no_root_squash:NFS服务器共享目录用户的属性,如果用户是 root,那么对于这个共享目录来说就具有 root 的权限。
具体操作如下:
3、重启NFS服务器
sudo service nfs-kernel-server restart
4、在PC上测试NFS服务器是否安装成功
我们把 ubuntu 的家目录 \home\edu 挂载到本机的 \tmp目录,最终,如果我们在/tmp目录,看到的东西是 ubuntu 家目录 \home\edu 的东西,那说明挂载成功。
sudo mount -o nolock 10.221.20.17:/home/edu /tmp
10.221.20.17 为需要挂载目录的ip,这里是ubuntu的ip
先进入家目录,查看内容:
再进入 /tmp 目录,查看内容,和家目录的内容一样,挂载成功:
ubuntu的家目录/home/edu 挂载到开发的/tmp目录:
如果没有局域网网络,我们需要通过一根网线,一端连开发板,一端连PC机,人为组成一个局域网。
接着,我们分别给ubuntu和开发板设置一个同一网段的ip,网段相同,主机ip不能相同,否则,会导致ip冲突。
1、设置PC机ubuntu的ip(在PC机ubuntu进行相应操作)
详情请点《ubuntu如何设置IP》。
2、设置开发板的ip(在开发板终端进行相应操作)
将开发板连接好终端,如何连接请点此处。
在终端里敲:ifconfig eth0 10.221.20.123 netmask 255.255.255.0
注意,eth0 的 “0” 为数字 “0”
查看:ifconfig
测试能否拼通ubuntu: ping 10.221.20.17 , 敲:ctrl + c 即可中断连接
如果能平通,上图就是平通的情况,说明,开发板和PC机的ubuntu是在同一个局域网内。
3、在开发板上写相应挂载命令(在开发板终端进行相应操作)
mount -o nolock,wsize=1024,rsize=1024 10.221.20.17:/home/edu /tmp
10.221.20.17:为需要挂载目录的ip,这里是PC机上ubuntu的ip
然后,进入/tmp目录,查看一下内容,如果看到的是ubuntu的/home/edu目录的内容,说明挂载成功。
4、写个挂载脚本( 开发板操作 )
开发板每次重启后,上面写的设置ip,挂载命令都会失效,于是,我们又要重复“3、在开发板上写相应挂载命令(在开发板终端进行相应操作)”的操作,这样会很麻烦,所以,我们接下来在开发板 /home 目录 写个挂载脚本,以后开启开发板,人为运行这个挂载脚本即可实现挂载功能。
a)在开发板的/home目录,新建一个脚本:vi mount_nfs.sh
b) 在脚本 mount_nfs.sh 写如下内容,然后保存
ifconfig eth0 10.221.20.123 netmask 255.255.255.0
mount -o nolock,wsize=1024,rsize=1024 10.221.20.17:/home/edu /tmp
c) 给脚本添加权限:chmod 777 mount_nfs.sh
d) 重启开发板,进入/home,运行脚本,测试是否挂载成功