驱动开发

    图 1 HDF框架管理驱动模型

    驱动开发步骤

    基于HDF框架进行驱动的开发主要分为两个部分,驱动实现和驱动配置,详细开发流程如下所示:

    1. 驱动实现

      驱动实现包含驱动业务代码和驱动入口注册,具体写法如下:

      • 驱动入口注册到HDF框架

        1. struct HdfDriverEntry g_sampleDriverEntry = {
        2. .moduleVersion = 1,
        3. .moduleName = "sample_driver",
        4. .Bind = HdfSampleDriverBind,
        5. .Init = HdfSampleDriverInit,
        6. .Release = HdfSampleDriverRelease,
        7. // 调用HDF_INIT将驱动入口注册到HDF框架中,在加载驱动时HDF框架会先调用Bind函数,再调用Init函数加载该驱动,当Init调用异常时,HDF框架会调用Release释放驱动资源并退出。
        8. HDF_INIT(g_sampleDriverEntry);
    1. 驱动编译

      • 驱动代码的编译必须要使用HDF框架提供的Makefile模板进行编译

      • 编译结果文件链接到内核镜像,添加到vendor目录下的hdf_vendor.mk里面,示例如下

        1. LITEOS_BASELIB += -lxxx #链接生成的静态库
        2. LIB_SUBDIRS += #驱动代码Makefile的目录
    1. 驱动配置

      驱动配置包含两部分,HDF框架定义的驱动设备描述和驱动的私有配置信息,具体写法如下:

      • 驱动设备描述(必选)

        HDF框架加载驱动所需要的信息来源于HDF框架定义的驱动设备描述,因此基于HDF框架开发的驱动必须要在HDF框架定义的device_info.hcs配置文件中添加对应的设备描述,驱动的设备描述填写如下所示

      • 驱动私有配置信息(可选)

        如果驱动有私有配置,则可以添加一个驱动的配置文件,用来填写一些驱动的默认配置信息,HDF框架在加载驱动的时候,会将对应的配置信息获取并保存在HdfDeviceObject 中的property里面,通过Bind和Init(参考)传递给驱动,驱动的配置信息示例如下:

        1. root {
        2. sample_version = 1;
        3. match_attr = "sample_config"; //该字段的值必须和device_info.hcs中的deviceMatchAttr值一致
        4. }
        5. }