搭建NFS服务器(Setup NFS Server)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
搭建NFS服务器(Setup NFS Server)
NFS(Network File System)是一种在Unix/Linux下广泛使用的网络文件系统。Linux的内核已经内置了对NFS客户端和服务器的支持。但是播放机的内核没有打开NFS服务器支持,因此我们需要自己编译相关的模块。另外我们还需要相应的辅助程序:portmap和nfs-utils。其中nfs-utils要求C程序库包含对RPC的支持,然而播放机的uclibc没有打开RPC 支持。下面我将介绍如何解决这些问题。一、编译内核NFS 服务器模块
仍然使用从华硕下载的内核源码,请参考:下载源代码(Download The Source Code)
内核源码目录下有一个名为config.develop.avhdd.mars.old的文件,我们以这个配置文件为基础重新配置内核:
$ cd linux-2.6.12
$ cp config.develop.avhdd.mars.old .config
$ make menuconfig
1. 关闭模块版本检查,使得我们编译的模块可以在原厂内核上加载。
配置菜单位置:Loadable module support ---> [ ] Module versioning support (EXPERIMENTAL)2. 打开NFS服
务器支持,选择把它编译成模块。
配置菜单位置:File systems ---> Network File Systems ---> [M] NFS server support3. 打开或关闭内核调试。这个一定要与你的播放机内核的实际配置保持一致,否则编译出的模块会无法加载。
Kernel hacking ---> [?] Kernel debugging然后执行make 进行编译。编译完成后我们得到以下两个模块:
fs/exortfs/exportfs.ko
fs/nfsd/nfsd.ko附件:
编译好的模块:
nfs-server-modules-debug.tar.bz2 (打开内核调试)
nfs-server-modules-nodebug.tar.bz2 (关闭内核调试)二、打开uClibc对RPC的支持
NFS的通讯协议是基于ONC RPC(一种远程过程调用协议)的。nfs-utils工具调用了C函数库的RPC函数,因此要求uClibc必需提供这些函数。原厂固件中的uClibc关闭了RPC 支持,我们只能用自己编译的支持RPC的uClibc来替换原厂的uClibc。
其实在编译Buildroot时就会自动编译uClibc,请参考:Buildroot - 让交叉编译更轻松。我们只需在配置buildroot时指定uClibc的配置文件,这个配置文件应该包括下面两项:
UCLIBC_HAS_RPC=y
UCLIBC_HAS_FULL_RPC=y
对应的uClibc的配置菜单如下图:附件:
补丁:uClibc-0.9.28-patches.tar.bz2
配置文件:config-uClibc-0.9.28.bz2
编译好的uClibc:uClibc-0.9.28-binary.tar.bz2三、编译辅助程序
为了方便链接上述的uClibc,请使用buildroot生成的工具链来编译portmap和nfs-utils。详细步骤请看:编译portmap和nfs-utils附件:
编译好的portmap和nfs-utils:
portmap_and_nfs-utils_binary.tar.bz2四、更新固件
用以上三步编译产生的二进制文件制作新固件:
1. 内核模块放在如下路径:
lib/modules/2.6.12.6-VENUS/kernel/fs/exportfs/exportfs.ko
lib/modules/2.6.12.6-VENUS/kernel/fs/nfsd/nfsd.ko
2. 用自己编译的uClibc替换原厂的uClibc,放在/lib下:/lib/libm.so.0 -> libm-0.9.28.so
/lib/libresolv.so.0 -> libresolv-0.9.28.so
/lib/libpthread-0.9.28.so
/lib/libnsl.so.0 -> libnsl-0.9.28.so
/lib/ld-uClibc-0.9.28.so
/lib/libutil.so.0 -> libutil-0.9.28.so
/lib/libcrypt-0.9.28.so
/lib/libm-0.9.28.so
/lib/libutil-0.9.28.so
/lib/ld-uClibc.so.0 -> ld-uClibc-0.9.28.so
/lib/librt-0.9.28.so
/lib/libuClibc-0.9.28.so
/lib/libdl-0.9.28.so
/lib/libresolv-0.9.28.so
/lib/libcrypt.so.0 -> libcrypt-0.9.28.so
/lib/libdl.so.0 -> libdl-0.9.28.so
/lib/libnsl-0.9.28.so
/lib/libpthread.so.0 -> libpthread-0.9.28.so
/lib/libc.so.0 -> libuClibc-0.9.28.so
/lib/librt.so.0 -> librt-0.9.28.so3. portman,nfs-utils及脚本
/etc/init.d/S60nfs
/sbin/portmap