SS928(sd3403)之多核之间的通信
SS928是一个多核异构的平台具备4个a55,2个dsp和一个risc-v 最近在想如何使用其多核。发现sdk的中的好东西
IPCM(Inter-Processor Communication Module)用于多核之间的通信。
配置说明
配置文件目录: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). 编译安全函数库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
==================================================================================================================
虚拟文件系统设备节点操作
命令,参数及返回值等放在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).配置共享内存内存区域应该保证基址和长度都按4KBytes对齐.
2).需要一个主节点,一个或多个从节点,但最多支持8个节点.
3).消息发送长度不能大于1MBytes.
4).建立连接后,如果一端断开连接,则两端都等同断开,再次建立连接时需要两端都发起连接.
- 分享
- 举报
-
浏览量:10561次2022-11-10 18:07:40
-
浏览量:1739次2023-06-30 10:33:51
-
浏览量:4668次2024-05-28 16:26:51
-
2024-05-30 09:29:48
-
浏览量:6497次2022-11-10 14:33:49
-
浏览量:1167次2024-08-22 17:27:55
-
浏览量:1431次2023-10-28 16:08:09
-
浏览量:704次2023-11-24 16:28:24
-
浏览量:501次2024-09-13 17:34:13
-
浏览量:1384次2024-06-06 10:17:20
-
浏览量:3103次2024-03-14 14:15:25
-
浏览量:6215次2023-03-17 19:33:35
-
浏览量:2023次2022-11-18 20:55:29
-
浏览量:1593次2024-02-23 17:41:04
-
浏览量:3067次2023-04-01 13:01:00
-
浏览量:818次2023-09-09 13:40:42
-
浏览量:5972次2022-09-19 14:17:36
-
浏览量:2257次2022-12-13 16:59:00
-
浏览量:1683次2022-12-13 16:47:02
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
hpj
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明