96SEO 2026-02-19 17:20 13
系统平台驱动框架是系统驱动框架的重要组成部分它基于HDF驱动框架、操作系统适配层(OSAL,

layer)以及驱动配置管理机制为各类平台设备驱动的实现提供标准模型。
系统平台驱动(PlatformDriver)即平台设备驱动它用于驱动平台设备(PlatformDevice)为系统及外设驱动提供访接口。
这里的平台设备泛指I2C/UART等总线、以及GPIO/RTC等SOC片内硬件资源。
系统平台驱动框架为外设提供了标准的平台设备访问接口使其不必关注具体硬件及OS平台同时为平台设备驱动提供统一的适配接口使其只关注自身硬件的控制。
为实现这个目标OpenHarmony系统平台驱动框架满足如下特性
统一的平台设备访问接口对平台设备操作接口进行统一封装屏蔽不同SOC平台硬件差异以及不同OS形态差异。
统一的平台驱动适配接口为平台设备驱动提供统一的适配接口使其只关注自身硬件的控制而不必关注设备管理及公共业务流程。
提供设备注册、管理、访问控制等与SOC无关的公共能力。
OpenHarmony系统平台驱动框架主要由平台接口层、平台核心层以及平台适配层三个部分组成。
平台接口层以设备句柄加配套API的形式对外提供统一的、标准的访问接口。
设备句柄是DevHandle类型的实例通过不同设备模块提供的Open/Close方法进行获取、释放。
成功获取设备句柄后即可使用相应的API执行设备操作。
例如通过I2cTransfer完成一次I2C数据传输。
这是一种代理模式即接口层API不直接引用实际设备对象而是通过DevHandle作为代理间接访问设备而所有来自外设驱动的访问都建议走接口层以获得最佳的稳定性。
提供统一适配接口定义了标准的设备对象模型驱动程序仅需关注标准对象模型的适配。
抽取公共业务框架将不同设备模块的公共流程、算法加以抽取使得具体设备驱动更加轻薄。
驱动具体平台设备硬件并创建对应的设备模型对象注册到核心层纳入统一管理。
接口层用DevHandle类型的设备句柄表示一个平台设备对象然后针对不同类型设备提供一套标准的API方法用于设备访问。
那么设备句柄和真实的设备对象如何关联呢
drivers_hdf_core/framework/include/platform/platform_if.h:39
DevHandle;在内核态这个指针可以直接指向实际设备对象但是对于某些类型的平台设备需要在用户态提供同样的DevHandle类型及配套API而实际设备对象在内核空间导致无法直接获取和使用内核空间的地址。
DeviceManager的设备服务机制可以在用户态、内核态同时获取到设备服务而用户态同内核态通信的问题交由HDF
DeviceManager处理。
此时DevHandle只需要关联到这个设备服务即可而void*类型保证了足够的灵活性。
根据DevHandle和设备对象关联方式的不同接口层的设计有三种模式
使用范围在用户态和内核态同时提供API的设备类型DevHandle同设备对象的关联方式为
内核态关联到实际平台设备对象或其设备服务(在内核态两者可互相转换)
每一个设备对象会独立发布一个设备服务来处理外部访问服务收到API的访问请求之后通过提取请求参数并调用实际设备对象的相应内部方法。
同一类型的设备对象可能会很多例如I2C模块可能同时有十几个控制器。
如果采用独立服务的模式每一个控制器作为一个平台设备为其创建一个设备服务那么将会有十几个服务被创建不光要配置很多设备节点而且这些服务还会占用内存资源。
因此为一类设备对象创建一个平台设备管理器(PlatformManager)对象并同时对外发布一个管理器服务由这个管理器服务来统一处理外部访问。
当用户需要打开某个设备时先通过HDF
DeviceManager获取到管理器服务然后管理器服务根据用户指定参数查找到指定设备并返回一个设备描述符而这个描述符仍然可以由DevHandle类型表示。
用于不需要在用户态提供API的设备类型或者没有用户态、内核区分的OS系统其关联方式是DevHandle直接指向设备对象内核态地址。
而PlatformManager的实现比较自由它不需要实现设备服务只需做好某种类型的设备管理即可甚至在C语言中由于无法进行OOP编程很多模块直接将这个功能面向过程化了使得没有一个具体的结构体与之对应。
平台驱动框架为不同设备类型定义了标准的设备对象模型具体设备驱动只需要关注标准设备对象的适配即可
核心层会提供一系列内部方法用于设备的注册、注销设备对象的查找、获取、释放以及处理多线程访问。
例如当向核心层注册一个I2C控制器对象时使用I2cCntlrAdd当希望获取一个I2C控制器对象时通过I2cCntlrGet并指定控制器编号当不再使用这个对象时还需要通过I2cCntlrPut释放。
这样做的好处是将每一个具体的操作步骤高度抽象化减小同平台接口层及平台适配层的耦合面便于业务解耦、演进。
由于业务需求需要对I2cCntlr对象进行引用计数那么只需要修改I2cCntlrGet/Put这对方法的实现即可并不会影响平台接口层和平台适配层。
凡是跟特定硬件无关的业务逻辑都会被抽取到核心层例如RTC时钟的时间格式转换算法GPIO模块的线程中断实现等等。
适配层提供具体平台硬件设备的驱动按照核心层定义的模型创建设备对象并完成对象的初始化(包括必要的成员变量初始化以及钩子方法挂接以及相关的硬件初始化操作)最后使用核心层提供的注册方法将设备对象注册到核心层纳入统一管理。
UART模块适配的核心环节是UartHost对象的创建、初始化及注册。
UART模块采用的是独立服务模式要求每一个UartHost对象关联一个HDF设备服务。
vendor/hihope/rk3568/hdf_config/khdf/device_info/device_info.hcs:71
moduleName需要与驱动Entry中moduleName
serviceName必须要按照HDF_PLATFORM_UART_X的格式X为UART控制器编号
deviceMatchAttr用于配置控制器私有数据要与uart_config.hcs中对应控制器保持一致如不需要则忽略。
uart_config.hcs每一个UART控制器配置私有数据
如果控制器需要配置一些私有数据例如寄存器基地址初始化波特率等等可以在uart_config.hcs中配置该文件将在产品配置目录的hdf.hcs中导入具体路径可由产品自由配置。
vendor/hihope/rk3568/hdf_config/khdf/platform/rk3568_uart_config.hcs1
}hihope/rk3568/hdf_config/khdf/hdf.hcs1
platform/rk3568_watchdog_config.hcs5
platform/rk3568_uart_config.hcs6
platform/rk3568_spi_config.hcs9
audio/analog_headset_config.hcs20
vibrator/linear_vibrator_config.hcs23
vibrator/drv2605l_linear_vibrator_config.hcs24
lcd/lcd_config.hcs3).驱动的Entry结构
drivers_hdf_core\framework\sample\platform\uart\src\uart_sample.c
HDF_INIT(g_sampleUartDriverEntry);Bind方法调用UartHostCreate创建
drivers_hdf_coreframework\support\platform\include\uart\uart_core.h:
};drivers_hdf_core\framework\sample\platform\uart\src\uart_sample.c
UartHostCreate(device);uartHost-service.Dispatch
}drivers_hdf_core/framework/support/platform/src/uart/uart_core.c79
*)OsalMemCalloc(sizeof(*host));9394
}该方法中将UartHost对象同HdfDeviceObject进行关联
为HdfDeviceObject的service成员进行赋值使其指向UartHost的IDeviceIoService类型的成员对象同时为service成员的Dispatch方法赋值。
UartHostCreate函数设置host-device-service-Dispatch
最后SampleUartDriverBind函数使用uartHost-service.Dispatch
为HdfDeviceObject对象绑定IDeviceIoService类型的服务对象
UartHost和其IDeviceIoService类型的成员对象service可以相互转换
通过UartHost对象即可获取HdfDeviceObject对象
通过HdfDeviceObject对象即可间接获取UartHost对象(先获取service再转为host)
SampleUartDriverInit-AttachUartDevice-AddUartDevice-AddRemoveUartDev-register_driver-host-method
drivers_hdf_core\framework\sample\platform\uart\src\uart_sample.c
SampleUartHostGetBaud,.SetAttribute
};通过UartHostFromDevice从HdfDeviceObject对象获取之前关联的UartHost对象然后调用
AttachUartDevice方法完成host对象的初始化最后为host对象挂接钩子方法g_sampleUartHostMethod。
UART适配关键是在驱动Entry的Bind方法中创建UartHost对象而且是使用UartHostCreate创建。
这个创建动作同时也是注册的动作因为它将UartHost以HDF设备服务的形式同HdfDeviceObject进行绑定这样就完成了服务的发布HDF
Manager对设备服务的管理也就是对UartHost的管理核心层可以通过HDF提供的服务获取接口来访问UartHost。
UART适配采用独立服务模式每一个UartHost对象同时也是一个设备服务其优点是可以直接利用HDF
Manager进行管理缺点是需要在device_info.hcs为每一个UartHost对象定义设备节点。
drivers/hdf_core/framework/include/platform/uart_if.h
UART设置传输模式本文涉及的UART所有接口支持内核态及用户态使用。
UartOpen-UartGetObjGetByBusNum(port);-
DevSvcManagerClntGetService(name)
*)handle);UartGetObjGetByBusNum
调用DevSvcManagerClntGetService根据name“HDF_PLATFORM_UART_port”
(framework/sample/config/device_info/device_info.hcs)
调用host-method-Init即UartHostDevInituart_asr.c
sbuf);HdfSbufRecycle(sBuf);return
service-dispatcher-Dispatch(service-object,
NULL);HdfSbufRecycle(sBuf);return
}调用Dispatch接口进行写操作即SampleDispatch通过传输cmd
为UART_WRITE调用SampleDispatchWrite然后调用UartPl011Write调用底层代码进行传输数据。
drivers_hdf_core\framework\sample\platform\uart\src\uart_dispatch_sample.c
SampleDispatchWrite(uartDevice,
data);break;}default:break;}return
}drivers_hdf_core\framework\sample\platform\uart\include\uart_pl011_sample.h
drivers_hdf_core\framework\sample\platform\uart\dev\hello_uart_dev.c
drivers_hdf_core\framework\sample\platform\uart\dispatch\hello_uart_dispatch.c
strlen(info));UartClose(handle);return
https://gitee.com/openharmony/drivers_hdf_core.githttps://blog.csdn.net/HarmonyOS_666/article/details/140824175https://blog.csdn.net/maniuT/article/details/141064333https://blog.csdn.net/zxc95279527q/article/details/143062695
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback