00. 目录
01. 命令概述
ipcrm命令用来删除一个或更多的消息队列、信号量集或者共享内存标识。
02. 命令格式
用法:
ipcrm [options]
ipcrm <shm|msg|sem> <id> [...]
- 1
- 2
- 3
03. 常用选项
选项:
-m, --shmem-id <id> 按 id 号移除共享内存段
-M, --shmem-key <键> 按键值移除共享内存段
-q, --queue-id <id> 按 id 号移除消息队列
-Q, --queue-key <键> 按键值移除消息队列
-s, --semaphore-id <id> 按 id 号移除信号量
-S, --semaphore-key <键> 按键值移除信号量
-a, --all[=<shm|msg|sem>] 全部移除
-v, --verbose 解释正在进行的操作
-h, --help 显示此帮助并退出
-V, --version 输出版本信息并退出
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
04. 参考示例
4.1 通过id删除共享内存
[root@itcast ~]# ipcrm -m 262144
[root@itcast ~]#
- 1
- 2
4.2 通过key删除共享内存
[deng@itcast ~]$ ipcrm -M 0x55
- 1
4.3 通过id删除消息队列
[deng@itcast ~]$ ipcrm -q 252432
- 1
4.4 通过key删除消息队列
[deng@itcast ~]$ ipcrm -Q 0x88
- 1
4.5 通过id删除信号量
[deng@itcast ~]$ ipcrm -s 242438
- 1
4.6 通过key删除信号量
[deng@itcast ~]$ ipcrm -S 0x65
- 1
4.7 删除所有共享内存、信号量和消息队列
[deng@itcast ~]$ ipcrm -a
[deng@itcast ~]$
- 1
- 2
4.8 删除所有共享内存、信号量和消息队列,并且显示过程
[deng@itcast ~]$ ipcrm -v -a
正在移除共享内存段 id “262144”
正在移除共享内存段 id “393218”
- 1
- 2
- 3
05. 附录
概述
功能简介
SDIO(Secure Digital Input and Output)由SD卡发展而来,与SD卡统称为MMC(MultiMediaCard),二者使用相同的通信协议。SDIO接口兼容以前的SD卡,并且可以连接支持SDIO接口的其他设备。
运作机制
在HDF框架中,SDIO的接口适配模式采用独立服务模式(如图1)。在这种模式下,每一个设备对象会独立发布一个设备服务来处理外部访问,设备管理器收到API的访问请求之后,通过提取该请求的参数,达到调用实际设备对象的相应内部方法的目的。独立服务模式可以直接借助HDFDeviceManager的服务管理能力,但需要为每个设备单独配置设备节点,若设备过多可能增加内存占用。
独立服务模式下,核心层不会统一发布一个服务供上层使用,因此这种模式下驱动要为每个控制器发布一个服务,具体表现为:
- 驱动适配者需要实现HdfDriverEntry的Bind钩子函数以绑定服务。
- device_info.hcs文件中deviceNode的policy字段为1或2,不能为0。
SDIO模块各分层作用:
-
接口层提供打开SDIO设备、设置块的大小、读取数据、写数据、设置公共信息、获取公共信息、刷新数据、独占HOST、释放Host、使能SDIO功能设备、去使能SDIO功能设备、申请中断、释放中断关闭SDIO设备的接口。
-
核心层主要提供SDIO控制器的添加、移除及管理的能力,通过钩子函数与适配层交互。
-
适配层主要是将钩子函数的功能实例化,实现具体的功能。
图 1 SDIO独立服务模式结构图
约束与限制
SDIO模块API当前仅支持内核态调用。
开发指导
场景介绍
SDIO的应用比较广泛,目前,有许多手机都支持SDIO功能,并且很多SDIO外设也被开发出来,使得手机外接外设更加容易。常见的SDIO外设有WLAN、GPS、CAMERA、蓝牙等。当驱动开发者需要将SDIO设备适配到OpenHarmony时,需要进行SDIO驱动适配,下文将介绍如何进行SDIO驱动适配。
接口说明
为了保证上层在调用SDIO接口时能够正确的操作硬件,核心层在//drivers/hdf_core/framework/model/storage/include/mmc/mmc_sdio.h中定义了以下钩子函数。驱动适配者需要在适配层实现这些函数的具体功能,并与这些钩子函数挂接,从而完成接口层与核心层的交互。
SdioDeviceOps定义:
struct SdioDeviceOps {
int32_t (*incrAddrReadBytes)(struct SdioDevice *dev, uint8_t *data, uint32_t addr, uint32_t size);
int32_t (*incrAddrWriteBytes)(struct SdioDevice *dev, uint8_t *data, uint32_t addr, uint32_t size);
int32_t (*fixedAddrReadBytes)(struct SdioDevice *dev, uint8_t *data, uint32_t addr, uint32_t size, uint32_t scatterLen);
int32_t (*fixedAddrWriteBytes)(struct SdioDevice *dev, uint8_t *data, uint32_t addr, uint32_t size, uint32_t scatterLen);
int32_t (*func0ReadBytes)(struct SdioDevice *dev, uint8_t *data, uint32_t addr, uint32_t size);
int32_t (*func0WriteBytes)(struct SdioDevice *dev, uint8_t *data, uint32_t addr, uint32_t size);
int32_t (*setBlockSize)(struct SdioDevice *dev, uint32_t blockSize);
int32_t (*getCommonInfo)(struct SdioDevice *dev, SdioCommonInfo *info, uint32_t infoType);
int32_t (*setCommonInfo)(struct SdioDevice *dev, SdioCommonInfo *info, uint32_t infoType);
int32_t (*flushData)(struct SdioDevice *dev);
int32_t (*enableFunc)(struct SdioDevice *dev);
int32_t (*disableFunc)(struct SdioDevice *dev);
int32_t (*claimIrq)(struct SdioDevice *dev, SdioIrqHandler *irqHandler);
int32_t (*releaseIrq)(struct SdioDevice *dev);
int32_t (*findFunc)(struct SdioDevice *dev, struct SdioFunctionConfig *configData);
int32_t (*claimHost)(struct SdioDevice *dev);
int32_t (*releaseHost)(struct SdioDevice *dev);
};
c
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
评论记录:
回复评论: