1构建NFS开发环境
嵌入式linux的NFS开发环境包含着两个方面:一是linuxserver端的NFSServer支持;二是targetboard的NFSClient支持。
1.1linuxserver端
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的权限。很显著,该参数授予了targetboard很大的权力。安全性是首先要考虑的linux下nfs挂载命令linux操作系统版本,可以采取一定的保护机制,在下边会讲一下保护机制。假如使用默认的root_squashlinux课程,targetboard自己的根文件系统可能有好多未能写入,所以运行会遭到极大的限制。在安全性有所保障的前提下,推荐使用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服务。你的targetboard的ip地址设定为192.168.1.100,这样就可以了。
1.1.3启动
首先要启动portmapper(端口映射)服务,这是NFS本身须要的。
#/etc/init.d/portmapstart
之后启动NFSServer。此时NFS会激活守护进程,之后开始窃听顾客端的恳求。
#/etc/init.d/nfsstart
NFSServer启动后,还要复查一下linuxserver的iptables等,确定没有屏蔽NFS使用的端口和容许通讯的主机。
可以首先在linuxserver里面进行NFS的回环测设。更改/etc/hosts.allow,把ip改为linuxserver的ip地址,之后在linuxserver上执行命令:
#mount-tnfs:/home/lqm/mnt
#ls/mnt
假如NFSServer正常工作,应当在/mnt下边见到共享目录/home/lqm的内容。
1.2targetboard端的client
1.2.1嵌入式linux内核应当支持NFS顾客端。
内核配置时,选择如下:
Filesystem-->NetworkFileSystems-->
选中NFSSystemsupport和ProvideNFSvsclientsupportlinux下nfs挂载命令,之后保存退出,重新编译内核,将生成的zImage重新下载到targetboard。
1.2.2在targetboard的linuxshell下,执行下述命令来进行NFS共享目录的挂载。
#mkdir/mnt/nfs
#mount-onolock-tnfs:/home/lqm/mnt/nfs
#ls/mnt/nfs
因为好多嵌入式设备的根文件系统中不带portmap,所以通常都使用-onolock参数,即不使用NFS文件锁,这样就可以防止使用portmap。假如顺利,在/mnt/nfs下,就可以看见linuxserver的共享文件夹下的内容了,但是两个文件夹内的更改是同步的。
2应用程序实例
编撰一个简单的C程序test.c
——————————————-
/*Thisisatestprogram.*/
intmain(void)
inti;
for(i=0;iprintf(“HelloWorld%dtimes.n”,i);
return0;
——————————————-
编译该程序:
#arm-linux-gcc-otesttest.c
2.1FTP形式
首先将test下载到targetboard。启动targetboard的linux,在超级终端中执行:
#cd/var
#ftp
ftp>bin//以binarymode传输文件
ftp>gettest
ftp>exit
之后更改文件属性:
#chmod+xtest
#./test
这时可以查看结果了。
2.2NFS形式
在targetboard端挂载linuxserver的共享输出目录,但是运行程序。
#mkdir/mnt/nfs
#mount-onolock-tnfs:/home/lqm/mnt/nfs
#ls/mnt/nfs
这时应当可以显示linuxserver的共享目录的内容。之后执行:
#./test
3总结
这两种方法在应用程序不是非常复杂时区别不是很大,而且当开发程序比较复杂时,采用NFS方法或许效率要高得多。完成应用程序得开发,调试好后就可以下载到嵌入式目标板的flash文件系统,或则直接编译到嵌入式linux内核而且烧讲到flash,因而最终成为一个独立的嵌入式应用程序。
+++++++++++++
下边是一些NFS共享的常用参数:
ro:只读访问
rw:读写访问
sync:所有数据在恳求时写入共享
async:NFS在写入数据前可以响应恳求
secure:NFS通过1024以下的安全TCP/IP端口发送
insecure:NFS通过1024以上的端口发送
wdelay:假如多个用户要写入NFS目录,则归组写入(默认)
no_wdelay:假如多个用户要写入NFS目录,则立刻写入,当使用async时,无需此设置。
hide:在NFS共享目录中不共享其子目录
no_hide:共享NFS目录的子目录
subtree_check:假如共享/usr/bin之类的子目录时,强制NFS检测父目录的权限(默认)
no_subtree_check:和前面相对,不检测父目录权限
all_squash:共享文件的UID和GID映射匿名用户anonymous,适宜公用目录。
no_all_squash:保留共享文件的UID和GID(默认)
root_squash:root用户的所有恳求映射成如anonymous用户一样的权限(默认)
no_root_squas:root用户具有根目录的完全管理访问权限
anonuid=xxx:指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx:指定NFS服务器/etc/passwd文件中匿名用户的GID