OpenHarmony系统驱动HDF框架驱动介绍
OpenHarmony系统驱动实现流程
- 在device_info.hcs文件配置驱动信息,相当于dts树。
device0 :: deviceNode { policy = 2; priority = 60; preload = 0; permission = 0666; moduleName = "HDF_AUDIO"; deviceMatchAttr = "hdf_audio_driver_0"; serviceName = "hdf_audio_codec_primary_dev0"; }
policy:服务策略,控制对谁提供驱动服务
moduleName 这个名称和驱动实现的HdfDriverEntry 结构体中的moduleName 相同。
deviceMatchAttr :驱动的私有配置信息。
serviceName :这个是服务名称,最终会在/dev/节点下生成serviceName 的节点(生成节点的前提条件policy 配置为大于等于1)。
2. 实现与device_info.hcs文件中配置moduleName匹配的驱动
/* HdfDriverEntry definitions */struct HdfDriverEntry g_audioDriverEntry = { .moduleVersion = 1, .moduleName = "HDF_AUDIO", .Bind = AudioDriverBind, .Init = AudioDriverInit, .Release = AudioDriverRelease,};HDF_INIT(g_audioDriverEntry);
当g_audioDriverEntry中的moduleName 和device_info.hcs文件中的配置信息相同时,系统启动时就会执行Bind 函数,当Bind 函数执行成功时就会接着执行Init 函数。
当Bind 函数或和Init 执行失败时,系统会执行Release 函数。
Bind 函数内部实现服务的绑定。
Init 函数内部实现驱动模块的初始化。
Release 函数内部实现内存的释放。