问题:有三块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[] = {'\0'};
char cpu3_host_name[] = {'\0'};
char cpu3_host_ip[] = {}; memset(cpu12_host_name, , );
memset(cpu3_host_name, , );
memset(cpu3_host_ip, , ); strcpy(cpu12_host_name, "HostCpu_");
strcpy(cpu3_host_name, "HostCpu3_"); /*- 左系 */
if((0x00u == (uint8_t)slot_flag) || (0x02u == (uint8_t)slot_flag))
{
strcat(cpu3_host_name, "L");
strcat(cpu12_host_name, "L");
strcpy(cpu3_host_ip, "192.168.200.5");
}
else
{
strcat(cpu3_host_name, "R");
strcat(cpu12_host_name, "R");
strcpy(cpu3_host_ip, "192.168.200.6");
} /*- 是CPU3,做server */
if( == cpu_flag)
{
/*- 设置本地名称 */
if(ERROR == iam(cpu3_host_name, NULL))
{
printf("Error: set iam host name(%s) failed. --- %s \n", cpu3_host_name, strerror(errnoGet()));
} printf("\n====== Local machine name is: ");
whoami();
printf("\n"); if(ERROR == nfsExport(NFS_HOST_DIR, , TRUE, ))
{
printf("Error: NFS export %s Failed --- %s.\n",NFS_HOST_DIR, strerror(errnoGet()));
}
else
{
printf("====== OK: NFS export OK (%s)\n", NFS_HOST_DIR);
}
}
else if(( == cpu_flag) || ( == cpu_flag))
{
if ( == cpu_flag)
{
strcat(cpu12_host_name, "");
if(ERROR == iam(cpu12_host_name, NULL))
{
printf("Error: Set iam host name(%s) failed. --- %s \n", cpu12_host_name, strerror(errnoGet()));
}
}
else
{
strcat(cpu12_host_name, "");
if(ERROR == iam(cpu12_host_name, NULL))
{
printf("Error: Set iam host name(%s) failed. --- %s \n", cpu12_host_name, strerror(errnoGet()));
}
} printf("\n====== Local machine name is: ");
whoami();
printf("\n"); if(ERROR == hostAdd(cpu3_host_name, cpu3_host_ip))
{
printf("Error: NFS host Add failed. (HostName:%s, ip:%s) --- %s\n", cpu3_host_name, cpu3_host_ip, strerror(errnoGet()));
}
else
{
printf("====== OK: NFS hostAdd ok (HostName:%s, ip:%s)\n", cpu3_host_name, cpu3_host_ip); taskDelay(sysClkRateGet()*); /* 这里有延时,否则client端查询不到server端的export */ nfsExportShow(cpu3_host_name); if(ERROR == nfsMount(cpu3_host_name, NFS_HOST_DIR, NFS_LOCAL_DIR))
{
printf("Error: NFS mount failed. %s,%s,%s --- %s\n", cpu3_host_name, NFS_HOST_DIR, NFS_LOCAL_DIR, strerror(errnoGet()));
}
else
{
printf("====== OK: NFS mount ok\n");
nfsDevShow();
cd(NFS_LOCAL_DIR);
}
}
}
else
{
printf("Error: Unknown cpu id:%d\n",cpu_flag);
}
}

下面再简列几个常用的调试函数(这几个函数在demo里都有使用):

    whoami    : 查看本机的名称

    iam           : 设置本机的名称

    nfsExportShow: 查看server上export的目录(这个接口是在client端调用的)

    nfsDevShow    : 查看当前的nfs设备(这个接口也是在client端调用的)

    nfsHelp     : nfs相关帮助信息

    netHelp     : net相关帮助信息

以上。需了解详细信息,可在帮助文档中搜索 NFS  、 nfsCommon 等关键字查看。

码完收工!

(吐槽一下CSDN的博客:登录很慢,我本来发在那里的,点击发布卡了半天,最后啥也没了,浪费我时间。。。)

记录一次vxworks下使用NFS组件的过程的更多相关文章

  1. VxWorks下USB驱动总结2

    3:USBD驱动详解 这一部分将要描述USBD(USB Host Driver)的典型应用.例如初始化,client注册,动态连接注册,设备配置,数据传输,同时还探讨了USBD内部设计的关键特性.这部 ...

  2. ubuntu 14.04LTS 环境下配置NFS服务

    简言之,NFS(Network FileSystem,网络文件系统)用于在不同机器,不同操作系统之间通过网络互相分享各自的文件.NFS设计之初就是为了在不同的系统间使用,所以它的通讯协议设计与主机及操 ...

  3. CentOS 5.5 下安装Countly Web Server过程记录

    CentOS 5.5 下安装Countly Web Server过程记录 1. 系统更新与中文语言包安装 2. 基本环境配置: 2.1. NodeJS安装 依赖项安装 yum -y install g ...

  4. 从后台绑定数据到ligerui 的comboBox下拉框组件

    这次来记录一下ligerUI的comboBox下拉框组件,ligerUI的API里也有相关描写叙述,上面都是前台写死数据,然后显示在组件中,我这次要说的是将后台的数据绑定到下拉框组件中,废话不多说. ...

  5. vxWorks下dosFs文件系统的创建

    .cdromFs:允许系统从按照ISO9660标准文件系统格式化的CD-ROM上读取设备: 通常文件系统驱动位于磁盘(块存取)设备驱动和IO系统之间,这一点在VxWorks中也不例外,但它在此基础上扩 ...

  6. Linux下的NFS快速配置教程与安全策略

    [51CTO专稿]在Linux下实现文件共享有多种方式,NFS就是其中之一.网络文件系统(NFS)协议是由Sun MicroSystem在20世纪80年代为了提供对共享文件的远程访问而设计和实现的.该 ...

  7. Java多线程21:多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask

    CyclicBarrier 接着讲多线程下的其他组件,第一个要讲的就是CyclicBarrier.CyclicBarrier从字面理解是指循环屏障,它可以协同多个线程,让多个线程在这个屏障前等待,直到 ...

  8. 自绘制HT For Web ComboBox下拉框组件

    传统的HTML5的下拉框select只能实现简单的文字下拉列表,而HTforWeb通用组件中ComboBox不仅能够实现传统HTML5下拉框效果,而且可以在文本框和下拉列表中添加自定义的小图标,让整个 ...

  9. CentOS6.5下搭建NFS文件服务器

    本文参考这里 CentOS下搭建NFS服务器总结 环境介绍: 1. 服务器: 192.168.0.100 2. 客户机: 192.168.0.101 安装软件包: 服务器和客户机都要安装nfs 和 r ...

随机推荐

  1. 7.Vue实例的生命周期

    1.Vue实例的生命周期: 什么是生命周期:从Vue实例创建.运行.到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期! 生命周期钩子 = 生命周期函数 = 生命周期事件 2. 主要的生命 ...

  2. 远程连接服务器数据库报错:Host ‘XXXXXX’ is blocked because of many connection errors

    原文:https://blog.csdn.net/li_li_lin/article/details/72764683 一.我遇到的问题描述 使用Navicat for mysql连接公司的服务器数据 ...

  3. net.exe和net1.exe的区别&联系.

    system32文件夹下有一个net.exe和net1.exe,一般做渗透的时候,很多情况下管理员只知道删除net.exe而遗漏net1.exe,导致我们能继续do evil..... 一直没弄明白它 ...

  4. 大数据之路week02 List集合的子类

    1:List集合的子类(掌握) (1)List的子类特点 ArrayList: 底层数据结构是数组,查询快,增删慢. 线程不安全,效率高. Vector: 底层数据结构是数组,查询快,增删慢. 线程安 ...

  5. java 基础:方法调用中的值传递是call by value,并且传递的是参数的值的拷贝,而不是引用

    public class TestExtends { public static void main(String[]args){ int s = 10; System.out.println(Sys ...

  6. python_面向对象——对象之间的关联关系

    1.将类中的对象关联起来(简单的方法) class Person: def __init__(self,name,age,sex): self.name = name self.age = age s ...

  7. ansible模块补充

    1.fetch模块, 将远程机器上的文件拉取到本地,以ip或者主机名生成目录,并保留原来的目录结构,与copy模块的功能相反. 主要参数 : dest  --  目标地址 src -- 源地址 例子 ...

  8. hdu5183Negative and Positive (NP))——手写Hash&&模板

    题意:问是否存在一段区间其加减交错和为K. 显然,我们可以用set保存前缀和,然后枚举一个端点查找.具体的 若在st1中查找 $t$,为 $sum-t=-k$,在st2中则是 $sum-t=k$. 注 ...

  9. 030_根据 md5 校验码,检测文件是否被修改

    #!/bin/bash#本示例脚本检测的是/etc 目录下所有的 conf 结尾的文件,根据实际情况,可以修改为其他目录或文件#本脚本在目标数据没有被修改时执行一次,当怀疑数据被人篡改,再执行一次#将 ...

  10. ue/um-editor实现word图片复制

    图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码 目前限chrome浏览器使用,但是项目要求需要支持所有的浏览器,包括Windows和macOS系统.没有办 ...