ARM_Linux开发之NFS应用

ARM_Linux开发过程中,要向开发板传文件,通常使用2种办法,方法一使用TFTP,方式二使用NFS,两种方式各有优缺点,可配合使用。

TFTP虽然使用简单,但在传输大文件经常出现传输中断,故大文件传输还是推荐使用NFSNFS全称Network File System,即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源,本地NFS的客户端应用可以透明的读写位于远程NFS服务器上的文件,就想访问本地文件一样,但NFS安装配置会稍复杂。

嵌入式开发中使用NFS可以带来很多便利,我常用的功能有下面2个:

a. 在主机上交叉编译完成的ARM执行文件,不需要下载到本地就可以在开发板NFS挂载目录下直接执行,大大提高工作效率

b. 直接通过cp命令在开发板与主机间传输文件

 

本文使用的环境是Ubuntu 16.04 64bit

1. NFS服务端安装与配置

a. 下载安装:~$ sudo apt-get install nfs-kernel-server

b. 安装完成后,创建NFS文件夹:~$ sudo mkdir /home/nfsroot

c. 修改NFS服务器配置:~$ sudo gedit /etc/exports

exports最后一行写入:

/home/nfsroot *(rw,sync,no_root_squash,no_subtree_check)

其中:

/home/nfsrootNFS文件夹

*:允许所有的网段访问,也可以使用具体的IP

rw:挂载此目录的客户端对该共享目录具有可读可写权限

sync:资料同步写入内存和硬盘

no_root_squashroot用户具有对根目录的完全管理访问权限

no_subtree_check:不检查父目录的权限

d. 重启服务:

重启rpcbind服务:~$ sudo /etc/init.d/rpcbind restart

重启nfs服务:~$ sudo /etc/init.d/nfs-kernel-server restart

NFS服务端配置完成。如果出现nfs重启失败,请检查/etc/exports文件修改是否正确。

 

2. NFS服务端自测

a. 先在/home/nfsroot下创建一个test.txt文件供测试:

~$ sudo touch /home/nfsroot/test.txt

b. 挂载NFS文件夹至/mnt下:~$ sudo mount 127.0.0.1:/home/nfsroot /mnt ,挂载成功

c. 查看挂载文件夹确认挂载情况:~$ ls /mnt ,可在/mnt文件夹下找到test.txt文件

3. VMware网络连接方式修改

VMware安装完后后默认网络连接方式为“NAT模式”,在该模式下,外部设备无法直接访问Ubuntu系统,只能通过本地电脑通过VMware虚拟网卡访问。

a. VMware Workstation上“虚拟机”->“设置”页面“硬件”->“网络适配器”修改网络连接方式“NAT模式”为“桥接模式”

ARM_Linux开发之NFS应用_第1张图片 

b. VMware Workstation上“编辑”->“虚拟网络编辑器”页面点击“更改设置”按钮,否则没有VMnet0

 ARM_Linux开发之NFS应用_第2张图片

c. 修改VMnet0类型为“桥接模式”,并将“桥接到”选择为当前已联网的网卡。

ARM_Linux开发之NFS应用_第3张图片 

以上操作需要在Ubuntu 关机情况下操作!

4. NFS客户端安装配置

NFS客户端在Ubuntu上使用~$ sudo apt-get install nfs-common 安装。ARM开发板则需要重新编译更新内核。

安装完成后输入~$ cat /proc/filesystems查看NFS客户端安装成功,有存在nodev nfsd一栏,就表示NFS客户端已经安装成功。

 ARM_Linux开发之NFS应用_第4张图片

Ubuntu

 ARM_Linux开发之NFS应用_第5张图片

ARM开发板

5. NFS客户端挂载

在命令行输入~$ sudo mount -t nfs 192.168.1.106:/home/nfsroot /mnt即可完成挂载

其中:

-t vfstype 指定文件系统的类型,可以不指定,mount会自动旋转正确的类型。

但在ARM开发板上操作失败,

~ # mount -t nfs 192.168.1.106:/home/nfsroot /mnt/nfsroot/

svc: failed to register lockdv1 RPC service (errno 111).

lockd_up: makesock failed, error=-111

mount: mounting 192.168.1.106:/home/nfsroot on /mnt/nfsroot/ failed: Connection refused

但在Ubuntu下可以正常挂载成功,在ARM开发板上却失败。这说明NFS Server应该是正常的,问题是在NFS客户端。

经分析可能的问题是:

Nfs mount默认选项包括文件锁,依赖于portmap提供的动态端口分配功能;

解决方法:

Kill 文件锁或添加-o nolock选项

~ # mount -o nolock -t nfs 192.168.1.106:/home/nfsroot /mnt/nfsroot/ 挂载成功!

 ARM_Linux开发之NFS应用_第6张图片

6. ARM开发板开机自动挂载

修改/etc/init.d/rcS文件,添加开机自动挂载功能

你可能感兴趣的:(ARM&Linux)