openMPM源码分析(七)

用来装载DSP的镜像的主程序在:src/clien/mpmcmdif.c中,对应的/bin/mpmcl的源码。下面开始分析。
一、参数个数和内容的分析。
     1.通过argc的值和!strcmp(argv[x],"CMD");来进行判断(当模式串匹配时strcmp返回为0,故在if条件判断中要使用 !strcmp() )。
     2.具体参数的内容在函数void print_help(char * progname);中体现。
 
二、装载DSP镜像函数 mpm_load();
     1.函数原型:int mpm_load(const char* slave_name,const char *file_name,int * error_code)
     根据注释:此处的file那么就是DSP image。
     2.函数内容:抛开变量先不看,又是一连串7个if语句,他们做的事情如下:
          a.判断slave_name和file_name是否为空。
          b.slave_name的长度不得超过最大长度32(MPM_MAX_NAME_LENGTH)
          c.char *realpath(const char*path,char*resolved_path)将path所指的相对路径转换为绝对路径存储在resolved_path所指的数组或指针中。
          d.msg_alloc(c2s,strlen(resolved_path)+1);为c2s指针分配并初始化一个(sizeof(c2s)+strlen(resolved_path))长度的空间,令c2s->length=strlen(resolved_path)
          注:c2s指针和s2c指针分别指向client_to_server_msg_t和server_to_client_msg_t结构体。
          对c2s指针初始化:
                    1.由于是mpm_load()函数,所以c2s->cmd=mpm_cmd_load;
                    2.初始化c2s->slave_name
                    3.初始化c2s->length

          e.函数:int send_n_recv_msg(char* send_data, int send_data_length, char** recv_data, int * recv_data_length);
               函数内部做了两层封装,底层是用socket实现,而该函数完成了发送和接收两个功能。其实就是对s2c和c2s这两个指针的内容进行交互。

          f.经过上步s2c指针指向内容的成员变量经过了初始化,对s2c指针及其内容进行判断(指针是否为空等)。
          g.根据s2c指针所指向的内容获取相关的信息(error信息,length信息)

     3.close_n_exit:释放临时指针。
                    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值