最近搞个嵌入式Linux项目,工程比较大,如果每次进行镜像烧录耗时太大,而且频繁烧录对NAND FLASH的损耗也比较大,于是想搭一个 nfs(Network File System, 网络文件系统)环境加速调试速度。sun搞的这个文件系统用起来还是相当不错的,远程共享目录和文件,利用RPC(Remote Procedure Call)协议进行数据的交互。闲白不扯那么多了,搭建这个环境网上其实有很多筒子们都有写过,这里记录下自己的搭建过程,算是经历过,既方便以后自己看,也给后来人一个参考。
虽然文章名字叫嵌入式开发的nfs环境搭建,其实思路与桌面机的搭建是一样的,无非是配置服务器和客户端而已。服务器端我用的是装有ubuntu10.04.4 LTS的PC,客户端是基于嵌入式Linux的ARM9开发板。两部分环境搭建的步骤归纳如下;
1)、PC服务端:
1、安装服务软件:nfs-kernel-server 和 portmap
2、服务配置:共享目录配置,访问权限配置
3、测试
2)、ARM客户端:
1、嵌入式Linux系统定制,加入NFS支持的特性
2、测试
1、PC服务端
1)、安装服务软件:
sudo apt-get install nfs-kernel-server portmap
如果想将PC同时作为客户端的话,再多执行一条命令:
sudo apt-get install nfs-common
考虑到本机测试方便,最好安装下客户端。然后执行nfs server的启动命令:
sudo /etc/init.d/nfs-kernel-server start
若安装成功,ubuntu终端提示:Starting NFS kernel daemon
2)、服务配置:
共享目录配置,打开文件/etc/exports,添加预共享的目录,我PC上的该文件添加之后内容如下:
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/home/helei/nfsroot *(rw,sync,no_root_squash)
关于文件内容中的提到的NFSV2和NFSV3,添加共享目录的格式以及权限说明,
可参考该博文。执行命令:
showmount -e
可以看到本机共享出来的NFS目录。
服务器访问权限配置,主要是设置/etc/hosts.deny和/etc/hosts.allow两个文件,关于这两个文件的作用和设置说明见
博文
3)、测试
执行命令:
mount 本机IP:共享目录的绝对路径 /mnt
然后执行命令:
ls -l /mnt
如果成功,则可以看到NFS共享目录里的内容啦
2、ARM客户端
1)、嵌入式Linux系统定制,加入NFS支持的特性
我的内核版本是2.6.35,其他的不多说,需要添加的NFS支持特性在Network File Systems下,添加特性如下:
上面将NFS的客户端、服务端以及将其作为根文件系统的特性都添加进来了。
2)、测试
修改ARM开发板的uboot的启动参数,在其中添加如下内容:
root=/dev/nfs rw nfsroot=PC服务器的IP:共享目录
如我的设置就是:
root=/dev/nfs rw nfsroot=192.168.1.62:/home/helei/nfsroot/
这样启动系统后,ARM开发板的根文件系统就是远程PC服务器上的共享目录。如果调试程序的话,直接将相关库文件或应用程序拷贝到该目录下即可。
参考博客:
http://linux.chinaunix.net/techdoc/system/2009/02/06/1060861.shtml
http://os.51cto.com/art/201001/176511.htm
http://blog.sina.com.cn/s/blog_55465b470100il34.html