BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #10399同步于 2011/3/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

嵌入式linux的NFS环境的建立

wuxixc
2011/3/29镜像同步9 回复
嵌入式linux的NFS环境的建立 http://wuxi.ss.pku.edu.cn/getFNL.action?cateIden=45 在应用程序开发环节,NFS方式比ftp方式的执行效率要高,因为它不需要将linux server端的程序下载到嵌入式目标系统就可以调试。下面先将NFS建立的详细过程写一下,然后举一个简单的应用程序开发实例来比较ftp方式和nfs方式的不同。 1 建立NFS开发环境 嵌入式linux的NFS开发环境包含着两个方面:一是linux server端的NFS Server支持;二是target board的NFS Client支持。 1.1 linux server端 1.1.1 以root的身份登录,编译共享目录的配置文件exports,指定共享目录及其权限。 #vi /etc/exports 在该文件中添加: /home/lqm(共享目录) 192.168.1.*(rw,sync,no_root_squash) 添加的内容表示允许IP范围在192.168.1.*的计算机以读写的权限来访问共享目录/home/lqm。 【注:参数说明如下: rw---读/写权限。如果设定只读权限,则设为ro。但是一般情况下,为了方便交互,要设置为rw。 sync--数据同步写入内存和硬盘。 no_root_squash--此参数用来要求服务器允许远程系统以它自己的root特权存取该目录。就是说,如果用户是root,那么他就对这个共享目录有root的权限。很明显,该参数授予了target board很大的权利。安全性是首先要考虑的,可以采取一定的保护机制,在下面会讲一下保护机制。如果使用默认的root_squash,target board自己的根文件系统可能有很多无法写入,所以运行会受到极大的限制。在安全性有所保障的前提下,推荐使用no_root_squash参数。】 1.1.2 起用保护机制 可以通过设定/etc/hosts.deny和/etc/hosts.allow文件来限制网络服务的存取权限。 ***/etc/hosts.deny*** portmap:ALL lockd:ALL mountd:ALL rquotad:ALL statd:ALL ***/etc/hosts.allow*** portmap:192.168.1.100 lockd:192.168.1.100 mountd:192.168.1.100 rquotad:192.168.1.100 statd:192.168.1.100 同时使用这两个文件就会使得只有ip为192.168.1.100的机器使用NFS服务。你的target board的ip地址设定为192.168.1.100,这样就可以了。 1.1.3 启动 首先要启动portmapper(端口映射)服务,这是NFS本身需要的。 #/etc/init.d/portmap start 然后启动NFS Server。此时NFS会激活守护进程,然后开始监听客户端的请求。 #/etc/init.d/nfs start NFS Server启动后,还要检查一下linux server的iptables等,确定没有屏蔽NFS使用的端口和允许通信的主机。 可以首先在linux server上面进行NFS的回环测设。修改/etc/hosts.allow,把ip改为linux server的ip地址,然后在linux server上执行命令: #mount -t nfs :/home/lqm /mnt #ls /mnt 如果NFS Server正常工作,应该在/mnt下面看到共享目录/home/lqm的内容。 1.2 target board端的client 1.2.1 嵌入式linux内核应该支持NFS客户端。 内核配置时,选择如下: File system--> Network File Systems--> 选中NFS System support和Provide NFSvs client support,然后保存退出,重新编译内核,将生成的zImage重新下载到target board。 1.2.2 在target board的linux shell下,执行下列命令来进行NFS共享目录的挂载。 #mkdir /mnt/nfs #mount -o nolock -t nfs :/home/lqm /mnt/nfs #ls /mnt/nfs 由于很多嵌入式设备的根文件系统中不带portmap,所以一般都使用-o nolock参数,即不使用NFS文件锁,这样就可以避免使用portmap。如果顺利,在/mnt/nfs下,就可以看到linux server的共享文件夹下的内容了,而且两个文件夹内的修改是同步的。 2 应用程序实例 编写一个简单的C程序test.c ------------------------------------------- /*This is a test program.*/ int main(void) { int i; for(i=0;i<10;i++) printf("Hello World %d times.\n",i); return 0; } ------------------------------------------- 编译该程序: #arm-linux-gcc -o test test.c 2.1 FTP方式 首先将test下载到target board。启动target board的linux,在超级终端中执行: #cd /var #ftp ftp>bin //以binary mode传输文件 ftp>get test ftp>exit 然后修改文件属性: #chmod +x test #./test 这时可以查看结果了。 2.2 NFS方式 在target board端挂载linux server的共享输出目录,并且运行程序。 #mkdir /mnt/nfs #mount -o nolock -t nfs :/home/lqm /mnt/nfs #ls /mnt/nfs 这时应该可以显示linux server的共享目录的内容。然后执行: #./test 3 总结 这两种方式在应用程序不是特别复杂时区别不是很大,但是当开发程序比较复杂时,采用NFS方式显然效率要高得多。完成应用程序得开发,调试好后就可以下载到嵌入式目标板的flash文件系统,或者直接编译到嵌入式linux内核并且烧写到flash,从而最终成为一个独立的嵌入式应用程序。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
ArmStrong机器人#1 · 2011/3/30
不错,不过在新系统里已经没有portmap了,改名位rpcbind了,不需要做什么配置 另外,iptables有可能会让你的机器登录不了nfs,需要关闭iptables或者是编辑etc/sysconfig/nfs,把需要用的端口都设为固定的,然后把端口加入到iptables的排除列表里 【 在 wuxixc (无心) 的大作中提到: 】 : 嵌入式linux的NFS环境的建立 : http://wuxi.ss.pku.edu.cn/getFNL.action?cateIden=45 : 在应用程序开发环节,NFS方式比ftp方式的执行效率要高,因为它不需要将linux server端的程序下载到嵌入式目标系统就可以调试。下面先将NFS建立的详细过程写一下,然后举一个简单的应用程序开发实例来比较ftp方式和nfs方式的不同。 : ...................
blueliuyun机器人#2 · 2011/5/11
挺好的帖子!O(∩_∩)O谢谢
blueliuyun机器人#3 · 2011/5/11
# mount -o nolock -t nfs 192.168.1.103:/home/realtimedsp/workdir/filesys /mnt/nfs mount: wrong fs type, bad option, bad superblock on 192.168.1.103:/home/realtimedsp/workdir/filesys, missing codepage or other error In some cases useful info is found in syslog - try dmesg | tail or so ……请问我出现了如上的错误,是什么问题呢?怎么解决? O(∩_∩)O谢谢
iamthenight机器人#4 · 2011/5/11
【 在 blueliuyun 的大作中提到: 】 : # mount -o nolock -t nfs 192.168.1.103:/home/realtimedsp/workdir/filesys /mnt/nfs : mount: wrong fs type, bad option, bad superblock on 192.168.1.103:/home/realtimedsp/workdir/filesys, : missing codepage or other error : ................... 你的这句命令是自己输入的还是复制黏贴来的?看一下mount命令的用法,根据自己的配置再重新输入一遍
ArmStrong机器人#5 · 2011/5/13
你的mount不支持nfs,你试试打mount.再按tab键补全,就会看到mount.ext2 mount.fat啥的,如果有mount.nfs那就是支持mount nfs 【 在 blueliuyun (甜瓜) 的大作中提到: 】 : # mount -o nolock -t nfs 192.168.1.103:/home/realtimedsp/workdir/filesys /mnt/nfs : mount: wrong fs type, bad option, bad superblock on 192.168.1.103:/home/realtimedsp/workdir/filesys, : missing codepage or other error : ...................
blueliuyun机器人#6 · 2011/5/15
【 在 ArmStrong 的大作中提到: 】 : 你的mount不支持nfs,你试试打mount.再按tab键补全,就会看到mount.ext2 mount.fat啥的,如果有mount.nfs那就是支持mount nfs : 【 在 blueliuyun (甜瓜) 的大作中提到: 】 : : # mount -o nolock -t nfs 192.168.1.103:/home/realtimedsp/workdir/filesys /mnt/nfs : ................... 谢谢版主和其他同学,看来我这板子上的mount是不支持nfs
ArmStrong机器人#7 · 2011/5/15
错了... 你直接运行mount打印出来的是系统中已经挂载的情况 【 在 blueliuyun (甜瓜) 的大作中提到: 】 : 谢谢版主和其他同学,看来我这板子上的mount是不支持nfs : [upload=1][/upload]
blueliuyun机器人#8 · 2011/5/15
哦,我在开发板上mount. 然后敲Tab键,没有弹出信息,只是光标前进了一个制表符的长度。 【 在 ArmStrong 的大作中提到: 】 : 错了... : 你直接运行mount打印出来的是系统中已经挂载的情况
ArmStrong机器人#9 · 2011/5/16
那是你开发板的shell不支持自动补全了,建议你重新编译一下busybox,把需要的东西都悬赏 【 在 blueliuyun (甜瓜) 的大作中提到: 】 : 哦,我在开发板上mount. 然后敲Tab键,没有弹出信息,只是光标前进了一个制表符的长度。