SD 通用类设备驱动
概述
SD 通用设备类驱动主要是供 SD 存储卡类设备驱动和 SDIO 类设备基础驱动使用,一般不会用到此类设备驱动注册,如果随着协议的发展有其他不属于以上类型的通用设备驱动,则需要使用此方法注册。
SD 通用类设备驱动注册
向 SDM 层注册 SD 通用类设备驱动只需要调用 API_SdmSdDrvRegister 函数即可,其原型如下:
#include <SylixOS.h>
INT API_SdmSdDrvRegister(SD_DRV *psddrv);
函数 API_SdmSdDrvRegister 原型分析:
- 此函数成功返回 ERROR_NONE ,失败返回 PX_ERROR 。
- psddrv 参数:通用类设备驱动对象指针。
需要填充的 SD_DRV 结构体其详细描述如下:
#include <SylixOS.h>
struct sd_drv {
LW_LIST_LINE SDDRV_lineManage; /* 驱动挂载链 */
CPCHAR SDDRV_cpcName;
INT (*SDDRV_pfuncDevCreate)(SD_DRV *psddrv, PLW_SDCORE_DEVICE psdcoredev, VOID **ppvDevPriv);
INT (*SDDRV_pfuncDevDelete)(SD_DRV *psddrv, VOID *pvDevPriv);
atomic_t SDDRV_atomicDevCnt;
VOID *SDDRV_pvSpec;
};
- SDDRV_lineManage:SDM 内部将注册的驱动以链表的形式管理起来。
- SDDRV_cpcName:驱动名称。
- SDDRV_pfuncDevCreate:驱动创建对应设备的方法。参数 psdcoredev 由 SDM 提供,输出参数 ppvDevPriv 保存创建的设备私有数据。
- SDDRV_pfuncDevDelete:驱动删除对应设备的方法。参数 pvDevPriv 即为创建时的设备私有数据。上面的设备创建和删除方法的定义是很多系统中采用的形式,即驱动完成具体的工作和自身的数据处理,而 SDM 负责在何时使用驱动处理这些工作。
- SDDRV_atomicDevCnt:该驱动对应的设备计数,即当前有多少个设备在使用该驱动,此信息的主要用途是判断当前驱动是否能被删除。
- SDDRV_pvSpec:由 SDM 内部使用,驱动程序本身不关心该成员的意义。当前,SDM 内部使用此指针保存一个“驱动为它的设备分配设备单元号的【数据对象】”。
由于该种类设备驱动基本不会被用到,因此这里不做详细展开,如若有相关需求请直接参考 SD 存储卡类设备驱动和 SDIO 类设备基础驱动的注册,以上两个设备在操作系统中的目录是“libsylixos/SylixOS/system/device/sdcard/client/”。