最近在折腾海思Hi3515开发板,准备毕业设计的东西。接触到NFS,问题很多。经过不懈努力,终于挂载成功。写下我遇到的问题,希望能给后来者一些启示。
首先说下我的软硬件配置
电脑用的是vmware虚拟机和virtualbox,对应系统为red hat enterprise linux ws release3 ,linux内核2.6
嵌入式开发板为海思多媒体开发板Hi3515,文件系统为busybox1.1.2,linux内核2.6.24
嵌入式主板直接通过网线连接到电脑,主板IP:192.168.1.178,虚拟机IP:192.168.1.192,掩码255.255.255.0,网关DNS什么的随意设置。
开发板提供商提供的为red hat enterprise linux ws release3系统,已安装好nfs和portmap
问题1:嵌入式板加载nfs模块出错
执行命令加载NFS驱动:modprobe nfs,出现如下的信息:
~ $:modprobe nfs
insmod: cannot open module`/lib/modules/2.6.24-rt1-hi3515v100/kernel/net/sunrpc/sunrpc.ko': No such file or directory
insmod: cannot open module `/lib/modules/2.6.24-rt1-hi3515v100/kernel/fs/nfs_common/nfs_acl.ko': No such file or directory
insmod: cannot open module`/lib/modules/2.6.24-rt1-hi3515v100/kernel/fs/lockd/lockd.ko': No such file or directory
insmod: cannot open module`/lib/modules/2.6.24-rt1-hi3515v100/kernel/fs/nfs/nfs.ko': No such file or directory
modprobe: failed to load module nfs
解决办法:上述提示无法打开对应模块。这个很简单,文件有缺失,在SDK文件夹Hi3515_SDK_V1.0.4.0.c2\rootfs-FULL_REL\lib\modules\2.6.24-rt1-hi3515v100\kernel下面。拷贝过去即可重新编译下载即可。
问题2:嵌入式主板和虚拟机无法通信,互ping不通,提示:host unreachnable
解决办法:嵌入式板不需要再做修改。将VMare的networkAdatpter改为桥接。在电脑的网络和共享中心中,禁用VMnet8,启用VMnet1。这两者的区别,请自行百度。然后,在服务器终端中输入service network restart。再ping,通了。
问题2:permission deny
输入:
$:mount -t nfs -o nolock -o tcp192.168.1.192:/tmp /mnt 后,提示permission denied
①把服务器(即宿主机)防火墙关了。可能是selinux或者其他防火墙软件。嵌入式系统开发不涉及外网,不用防止攻击,所以可以直接关掉。
②exports设置问题。这个我不再详细阐述,百度出来的结果大多数都是这个。
③关掉防火墙之后,我再试,还是出错,错误没变。
后来参考博文
http://cuixijiang.blog.163.com/blog/static/11001013820091158476312/
找到了 pam-panel-icon这个进程,一直在限制访问。输入命令"pkill -9 pam-panel-icon " "pkill -15 pam-panel-icon"。问题解决
④hosts解析问题
当一个连接请求发到服务器时,它会首先尝试将ip与本机的host文件进行匹配,查无匹配项则用ip地址与exports配置进行比对。比对成功,则可以访问。如果你的hosts有该ip的配置,则系统将其转为域名形式。但是如果此时exports的配置对应的是ip而不是域名,那么就会出现认证出错,无访问权限。解决办法是,统一。统一为域名形式或者注释掉hosts中的解析项就行了。
问题4:
输入:mount -t nfs -o nolock -o tcp 192.168.1.199:/tmp /mnt,提示:mount: Mounting 192.168.1.199:/tmp on /mnt failed: No such device。查日志,发现发来了连接请求。
后来百度,说可能是嵌入式板不支持该文件系统。瞬间明白了:重启板子后,忘了重新加入nfs模块。真是有够猪头的!输入modprobe nfs。然后再尝试挂载:
mount -t nfs -o nolock -o tcp192.168.1.192:/tmp/mytest/mnt
成功了!
写在最后:挂载成功之后,板子提供商技术人员告诉我,可以直接用tftp将文件下载到板子文件系统的/tmp目录下测试程序。瞬间觉得傻逼了。。。NFS没用处了。由于系统使用CRAMFS系统,所以我以为文件都是只读的。但其实,/tmp目录是可读写的,可以通过tftp将程序下载到板子上实时测试。不过,还是在探索NFS的过程中学到了一些东西。感恩!
除非注明,文章均为( eekuang )原创,转载请保留链接: http://www.14en.com/?p=80