问题:有三块CPU都运行vxworks6.9,现在想要CPU3做server,CPU1-2通过NFS访问CPU3上的文件
补充:使用防火墙可能会影响NFS访问,目前我还没有找到解决办法。。。
下面是过程,本文采用nfs v3版本, 仅记录使用过程,不涉及详细的知识点讲解,可以在workbench里帮助文档中搜索 NFS 关键字查看详细的帮助文档,如下图:
1、在vxworks镜像工程配置里添加NFS组件:
打开镜像的配置文件,搜索 INCLUDE_CORE_NFS_SERVER ,定位到组件处,把 Core NFS client 、 NFS server 、 NFS server V3 、 NFS v3 client 四个组件都添加引用,如下图所示:
2、在代码里调用相关接口:
(1) server端调用
server端直接调用 nfsExport 接口即可,该接口的原形如下:
STATUS nfsExport ( char * directory, /* Directory to export - FS must support NFS */ int id, /* ID number for file system */ BOOL readOnly, /* TRUE if file system is exported read-only */ int options /* Reserved for future use - set to 0 */ )
其中:directory 表示server端想要挂出去的文件目录; id使用0即可表示系统随机分配; readOnly设置为TRUE时表示NFS只读; options填写0预留。
(2) client端调用
client端需要依次调用 hostAdd 和 nfsMount 两个接口,其原形如下:
STATUS hostAdd ( char *hostName, /* host name */ char *hostAddr /* host addr in standard Internet format */ ) STATUS nfsMount ( const char *host, /* name of remote host */ const char *fileSystem, /* name of remote directory to mount */ const char *localName /* local device name for remote dir */ )
其中:hostAdd接口第一个参数表示server端主机的名字(不知道server主机的名字时,可在server主机上调用 whoami 函数查看),第二个参数表示server端的IP地址(点分十进制形式的字符串); nfsMount接口第一个参数同上,表示server端主机的名字, 第二个参数表示server端用于NFS的文件目录(与nfsExport的第一个参数值需相同), 第三个参数表示将NFS挂载到本地后的目录标识。
以上两步即可使用nfs,下边看一个demo:
该demo函数运行成功后,在CPU1-2上访问 /mmc0:0/nfs_local_dir 即等同于访问CPU3上的 /mmc0:0/nfs_host_dir
#include "nfs/mountd.h" #include "nfs/nfsCommon.h" #define NFS_LOCAL_DIR "/mmc0:0/nfs_local_dir" #define NFS_HOST_DIR "/mmc0:0/nfs_host_dir" void nfsFuncInit(int slot_flag, int cpu_flag) { char cpu12_host_name[20] = {'