SS928(sd3403)之多核之间的通信

SS928(sd3403)之多核之间的通信 hpj 2023-12-22 14:53:36 309

SS928是一个多核异构的平台具备4个a55,2个dsp和一个risc-v 最近在想如何使用其多核。发现sdk的中的好东西

IPCM(Inter-Processor Communication Module)用于多核之间的通信。

  1. 配置说明

    配置文件目录:arch/ss928v100/configs
    各个配置项说明如下:
    platform ,(如ss928v100)
    node_id ,节点编号(主节点为0)
    arch_type ,架构类型(根据平台选择)
    node_name, 节点名称
    os_type, OS类型(根据平台选择)
    top_role, 节点类型(master 或 slave, node_id为0时为master)
    ipcm_irq, 中断号
    cdev 支持设备节点操作,节点名为/dev/ipcm
    sharefs 支持共享文件系统功能
    virt_tty_role 支持虚拟调试终端类型(server或client)
    virt_tty_server_id 支持虚拟调试终端的server节点号(client配置)
    virt_tty_phys 支持虚拟调试终端共享内存基址(client配置)
    virt_tty_size 支持虚拟调试终端共享内存长度(client配置)
    shm_phys_XtoY, 配置的共享内存区域基址(从X发送到Y)
    shm_size_XtoY, 配置的共享内存区域大小(从X发送到Y)
    cross_compile,编译器
    cc_flags, 编译增加选项
    ld_flags, 链接增加选项
    kernel_dir, 依赖OS编译环境

==================================================================================================================

  1. 编译方法
    1). 编译安全函数库libsecurec-board.a

     # cd osdrv/componment
     # tar -xzf secure_c.tgz
     # cd secure_c/src
    
     # CC=aarch64-mix210-linux-gcc make lib CHECK_OPTION=check
     # cp ../lib/libsecurec.a ../../ipcm/class/virt-tty/app/libsecurec-board.a
    

2). 编译模块,执行以下操作
make PLATFORM=ss928v100 CFG=ss928v100_xxx_xxxxx_config all
ss928v100 为所要选择的平台,指定在arch/ss928v100
ss928v100_xxx_xxxxx_config 为所要选择的配置文件,指定在arch/ss928v100/configs.
linux 系统下 ko 编译
make PLATFORM=ss928v100 CFG=ss928v100_mp_linux_config all

liteos 下静态库的编译
    make PLATFORM=ss928v100 CFG=ss928v100_riscv_liteos_config all

注意:
    先要产生kernel_dir指定的OS依赖编译环境即需要先编译 linux;反之 liteos 需要解压成源码包并重命名为 "liteos"

    编译完成后,在out/node_num(num 表示节点编号)下面生成对应节点目录生成目标文件,.a文件或.ko文件等)

3). 清除编译信息,执行以下操作
make PLATFORM=ss928v100 CFG=ss928v100_xxx_xxxxx_config clean

清除编译整个信息,执行以下操作
make clean

==================================================================================================================

  1. 虚拟文件系统设备节点操作

    命令,参数及返回值等放在include/ipcm_userdev.h中,用户需要包含此头文件
    1). ss928v100 LiteOS调用_ipcm_vdd_init初始化,Linux用命令insmod ipcm.ko 加载
    2). 通过/dev/ipcm设备节点对IPCM进行操作
    a. open 打开设备节点/dev/ipcm
    b. ioctl 使用命令IPCM_IOC_ATTR_INIT初始化ipcm_handle_attr配置属性
    c. ioctl 使用命令IPCM_IOC_CONNECT/IPCM_IOC_TRY_CONNECT建立端口连接
    c. read/write 数据接收与发送(read支持select)
    d. ioctl 使用命令IPCM_IOC_DISCONNECT断开端口连接
    e. close 关闭设备节点

    struct ipcm_handle_attr 配置说明:


    成员 |说明
    __|_
    target |建立端口连接时用于配置目标节点ID
    port |建立端口连接时用于配置一个端口号(端口号支持0~1023)
    priority |优先级,配置为中断(HANDLEMSGPRIORITY,高优先级)或查询(HANDLEMSGNORMAL,低优先级)方式通信
    remoteids |用于获得各节点状态(1:就绪,0:离线).准备就绪的节点可以建立连接.
    __|__

    ioctl 命令说明:


    命令 |参数 |返回值 |说明
    __|_|_|_
    IPCMIOCCONNECT |struct ipcmhandleattr |0 |配置target、port建立端口连接,阻塞型
    IPCM_IOC_TRY_CONNECT |struct ipcm_handle_attr |0 |配置target、port建立端口连接,非阻塞型
    IPCMIOCCHECK |NULL |handle当前状态 |handle的状态为handlestate其中一种
    IPCMIOCDISCONNECT |NULL |0 |断开通信连接
    IPCMIOCGETLOCALID |NULL |本地设备ID |获得本地设备ID
    IPCMIOCGETREMOTEID |struct ipcmhandleattr |节点数 |获得节点个数及各节点状态
    IPCM_IOC_GET_REMOTE_STS |id |节点状态 |获得id号节点的就绪状态
    IPCM_IOC_ATTR_INIT |struct ipcm_handle_attr |0 |初始化一个handle节点配置属性
    __|__

==================================================================================================================

  1. 使用限制

1).配置共享内存内存区域应该保证基址和长度都按4KBytes对齐.
2).需要一个主节点,一个或多个从节点,但最多支持8个节点.
3).消息发送长度不能大于1MBytes.

4).建立连接后,如果一端断开连接,则两端都等同断开,再次建立连接时需要两端都发起连接.

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
hpj
红包 1 1 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
hpj
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区