主机: pc机ubuntu 10.04系统
开发板:TI dm816x/C6A816x/AM389x evm板,linux系统
意义:开发嵌入式系统时,使用开发板上的嵌入式linux系统,挂载主机上的nfs文件系统,可以更方便的进行主机与开发板的交互,非常有用。
方法:
1、配置nfs主机:
这一步是在主机上建立和配置nfs服务及nfs文件夹。
a、通过编辑/etc/exports,可以配置nfs文件夹及属性,如何编辑在exports文件中有详细提示。例如在exports中加入/home/share *(rw,sync) 代表把/home/share 文件夹配置为nfs文件夹,同时允许任何ip(*的意义)的开发板对它进行读写与同步(rw,sync的意义)权限的操作。
b、开启nfs服务。执行以下命令:/etc/init.d/portmap start,/etc/init.d/nfs-kernel-server start 开启nfs服务。如果修改了exports,需要再执行exportfs -ra 重新读入exports,再执行:/etc/init.d/portmap restart,/etc/init.d/nfs-kernel-server restart 。如果系统没有安装nfs服务,需要到网上下载nfs-kernel-server,可以用系统->系统管理->新立得软件包管理器,搜索nfs,然后把nfs-kernel-server和nfs-common都选中安装。
c、关闭防火墙。执行iptables -L查询防火墙规则,执行iptables -F删除所有防火墙规则。
2、开发板操作
这一步即使用开发板挂载主机nfs文件夹。
例如执行: mount -t nfs 192.168.1.10:/home/share /root/ftpfolder ,可以将ip为192.168.1.10的主机上名为/home/share 的nfs文件夹挂载到开发板的/root/ftpfolder文件夹下。
常见问题及解决方法:
使用TI的开发板挂载nfs时,经常出现以下挂载错误问题:
1、 failed to register lockdv1 RPC service (errno 111)。
解决方法:需要在挂载nfs时添入 -o nolock命令,如mount -t nfs -o 192.168.1.10:/home/share /root/ftpfolder 即可。
2、wrong fs type,bad option bad superblock on 192.168.1.10:/home/share……:最可能是mount命令不支持nfs文件系统。TI提供的文件系统,其mount程序是一个连接指向mount.util-linux-ng,而mount.util-linux-ng不支持nfs,导致无法挂载nfs。
解决方法:需要重新编译一个支持nfs的mount命令,可以使用busybox的mount的命令。到busybox官网www.busybox.net下载新版本的busybox包,解压后进入包目录,找到makefile文件,将编译器改为arm的linux交叉编译器(方法请查arm交叉编译环境相关资料,不再赘述),然后执行make menuconfig,找到 Linux System Utilities -> mount -> Support mounting NFS file systems选项,勾中它然后保存,再执行make后生成busybox可执行程序,拷贝到开发板即可。再次执行挂载nfs的命令,注意要使用busybox中的mount命令,例如:
./busybox mount -t nfs -o nolock 192.168.1.10:/home/share /root/ftpfolder
至此,问题解决。