HarmonyOS工具链 HarmonyOS驱动加载过程分析
HDF(Hardware Driver Foundation)驱动架构,为驱动开发人员给予驱动架构工作能力,包含驱动载入、驱动服务项目管理和驱动信息体制。致力于搭建统一的驱动构架服务平台,为驱动开发人员给予更精确、更高效率的开发工具,务求保证一次开发设计,多系统布署。
一、HarmonyOS驱动简述
HarmonyOS驱动架构选用C语言面向对象设计实体模型搭建,根据服务平台解耦、核心解耦,来做到兼容不一样核心,统一平台基座的目地,进而协助开发人员完成驱动的“一次开发设计,多系统布署”。
为了更好地达到这一总体目标, HarmonyOS驱动架构给予了:
1、操作系统兼容层(OSAL,operating system abstraction layer):给予核心操作有关插口开展统一封裝,屏蔽掉不一样系统操作插口。
2、服务平台驱动插口:给予Board一部分驱动(比如:I2C/SPI/UART系统总线等服务平台資源)适用,另外对Board硬件配置操作插口开展统一的兼容抽象性,开发人员只需开发硬件配置抽象性插口,就可以得到增加Board一部分驱动适用。
3、驱动实体模型:朝向元器件驱动,给予普遍的驱动抽象性实体模型,关键达到2个目地:
● 给予规范化的元器件驱动,开发人员不用单独开发设计,根据配备就可以进行驱动的布署。
● 给予驱动实体模型抽象性,屏蔽掉驱动与不一样系统部件间的互动,促使驱动更具有实用性。
为了更好地进一步简单化HarmonyOS驱动开发设计,HarmonyOS驱动架构适用多种多样驱动载入方式:
● 适用驱动动态性载入和静态数据载入,解除驱动代码和架构间的立即代码依靠,促使驱动程序能够单独编译程序和布署;
● 适用按需动态性载入方式,防止机器设备驱动全量载入,可合理降低系统資源的占用。
文中关键剖析HarmonyOS驱动载入全过程,在宣布详细介绍以前,最先掌握HarmonyOS驱动构架的构成、原理和体制,进而掌握驱动载入的关键点。
官方网站有关详细介绍:https://device.harmonyos.com/cn/docs/develop/drive/oem_drive_hdfdev-0000001051715456
二、HarmonyOS驱动构架详细介绍
2.1 HarmonyOS驱动构架构成
图1 HarmonyOS驱动构架
HarmonyOS驱动构架关键由HDF驱动架构、驱动程序、驱动配备文件和驱动插口四个一部分构成。
1)HDF驱动架构给予统一的硬件平台管理,驱动载入管理及其机器设备连接点管理等作用。
驱动架构选用的是主从关系模式设计方案,由Device Manager和Device Host构成。
Device Manager给予了统一的驱动管理,Device Manager启动时依据Device Information给予驱动机器设备信息载入相对应的驱动Device Host,并控制Host进行驱动的载入。
Device Host给予驱动运行的自然环境,另外预设Host Framework与Device Manager开展协作,进行驱动载入和启用。依据业务流程的要求Device Host能够有好几个案例。
表明:
Device Host说白了便是驱动寄主,给予驱动运行的自然环境。
当驱动布署在用户态时,Device Host能够由单独的进程开展安装。
当驱动在布署在核心态时,Device Host仅表明逻辑性防护。
Device Host的区划标准:Device Host归属于一类机器设备汇聚,如Camera,Audio,Display等。
驱动程序是布署在一个Device Host或是布署在不一样的Device Host,关键考虑到驱动程序之间是不是存的业务流程耦合度,假如2个驱动程序之间存有依靠,能够考虑到将这一部分驱动程序布署在统一Host。
2)驱动程序完成驱动的实际作用,每一个驱动由一个或是好几个驱动程序构成,每一个驱动程序都相匹配着一个Driver Entry。Driver Entry关键进行驱动的复位和驱动插口关联作用。
3)驱动配备文件.hcs关键由机器设备信息(Device Information)和机器设备資源(Device Resource)构成。
Device Information进行机器设备信息的配备,如配备插口公布对策,驱动载入的方式等。Device Resource 进行机器设备資源的配备,如GPIO引脚、存储器等資源信息的配备。
4)驱动插口HDI(Hardware Driver interface )给予规范化的接口标准和完成,驱动架构给予IO Service和IO Dispatcher体制,促使不一样布署形状下驱动插口趋向方式一致。
当驱动布署在RTOS(Real-Time Operating System)汽车轻量化操作系统时,驱动插口和驱动程序之间选用的是Function Call方式启用,因而驱动插口仅给予界定,驱动插口完成由驱动程序给予。
2.2 HDF驱动架构原理
图2 HDF驱动架构原理
Device Manager给予了统一的驱动载入管理体制和驱动插口公布体制。
当Device Host自然环境载入过去进行时,Device Manager依据Device Information信息,要求Host载入相对应的驱动程序,Device Host在接到要求时,开展下列操作:
1)依据要求载入机器设备信息,查找并载入特定途径下驱动镜像系统或从特定段地址(section)查找驱动程序通道;
2)查找驱动机器设备描述符,配对相匹配的机器设备驱动;
3)当驱动配对取得成功时,载入特定驱动程序镜像系统;
4)Host Framework在驱动镜像系统载入取得成功后,启用驱动程序(Driver Entry)的关联插口和复位插口,完成与驱动程序的服务项目目标关联,另外复位机器设备驱动程序;
5)当Device Information配备中的服务项目对策规定对外开放曝露驱动插口时,驱动架构就将驱动程序的服务项目目标添加到对外开放公布的服务项目目标目录中,外界手机客户端程序就可以根据此目录来查询并浏览相对应的服务项目插口。
2.3 驱动插口工作方案
图3 驱动插口工作方案
驱动插口关键存有下列几类完成:
● 当驱动以核心部件布署时,手机客户端程序浏览驱动程序必须根据system call方式启用,驱动插口根据IO Service要求将信息根据system call方式启用到核心,并将信息派发到IO Dispatcher解决。
● 当驱动以用户态服务项目方式布署时,手机客户端进程浏览驱动进程必须根据IPC方式通讯,IO Service进行IPC通讯的手机客户端信息要求封裝,IO Dispacher进行驱动服务器端信息要求封裝,手机客户端信息根据IPC通讯抵达服务器端并分发送给IO Dispacher解决。
为了更好地使手机客户端和服务器端驱动启用方式基本一致,驱动架构给予IO Service和IO Dispatcher体制屏蔽掉启用消息传递方式的差别。
驱动插口完成统一选用远程启用方式,手机客户端驱动接口函数将要求编码序列化为运行内存数据信息,根据驱动架构给予的IO Service将信息发送到服务器端解决,服务器端在接到要求信息时根据IO Dispatcher体制将信息分发送给信息处理函数解决,处理函数将反序列化运行内存数据信息分析成相对应的要求。那样的保证益处是,开发人员只需重点关注插口的界定,不用太多的关心怎样完成不一样服务平台上插口兼容。
三、驱动载入全过程剖析
HarmonyOS驱动依据布署的不一样方式,存有二种驱动载入方式:
● 动态性载入方式:选用传统式的so(共享库)载入方式,驱动程序根据特定Symbol寻找驱动涵数通道开展载入。
● 静态数据载入方式:选用将驱动程序根据Scatter编译程序方式,编译程序到特定的Section,再根据浏览特定Section相匹配的地址,寻找驱动涵数通道开展载入。
下面融合一个Sample实例代码,解读驱动载入全过程,关键剖析静态数据载入方式下核心态驱动载入全过程。
3.1 完成驱动程序复位插口
在HDF驱动架构中,HdfDriverEntry目标被用于叙述一个驱动完成。
撰写一个简易的驱动,最先必须完成驱动程序 (Driver Entry)通道中的三个关键插口:
■ Bind插口:
完成驱动插口创建对象关联,假如必须公布驱动插口,会在驱动载入全过程中被启用,创建对象该插口的驱动服务项目并和DeviceObject关联。
■ Init插口:
完成驱动的复位,返回不正确将中断驱动载入步骤。
■ Release插口:
完成驱动的卸载,在该插口中释放出来驱动案例的硬件软件資源。
3.2 导出来驱动程序通道符号
完成驱动程序复位后,必须将驱动程序通道根据驱动申明宏导出来,那样驱动架构才可以在启动时鉴别到驱动程序的存有,驱动才可以被载入:
下面是完成基本原理:
图4 Driver Entry运行内存遍布
能够见到HDF_INIT宏是界定了一个“驱动控制模块名 HdfEntry”的符号放进“.hdf.driver” 所属section,该符号偏向的运行内存地址即是驱动程序通道建筑结构的地址。这一独特的section将用以开机启动时查找机器设备驱动。
3.3 添加机器设备配备
在机器设备相匹配的device_info.hcs添加sample驱动的配备:
在配备中界定的device将在载入全过程中造成一个机器设备案例,根据moduleName字段名特定机器设备相匹配的驱动名字,进而将机器设备与驱动关系起來。在其中,机器设备与驱动能够是一对多的关联,即能够完成一个驱动适用好几个同种类机器设备。
3.4 驱动启动全过程
大家添加的驱动是怎样强制执行的呢?简易而言,在系统启动时,驱动架构先启动,根据分析配备文件获得到机器设备目录,根据载入“.hdf.driver”段载入到驱动程序(Driver Entry)目录,随后解析xml机器设备目录与驱动程序目录开展配对,并载入配对取得成功的驱动。
驱动架构有两个关键管理者:
● DeviceManager:承担机器设备的管理,包含机器设备载入、卸载和查询等机器设备有关作用。
● DeviceServiceManager:承担管理机器设备公布的插口服务项目,给予插口服务项目的公布和查询等作用。
驱动载入关键由DeviceManager核心,最先DeviceManager要分析配备文件中的Host目录,依据Host目录中的信息来创建对象相匹配的Host目标。Host分析配备文件获得到关系的机器设备目录,解析xml机器设备目录去获得与之配对的驱动程序名字,随后根据驱动程序名字解析xml前边提及的“.hdf.driver” section得到驱动程序地址。
下面详细介绍实际全过程。
3.4.1 获得机器设备目录
图5 机器设备目录构造
配备文本编译程序后会变为二进制格式的配备文件,在其中机器设备有关信息被储放在一个用“hdf_manager”标识的device_info配备块中,host的内容以块的方式在device_info块中先后排序,host块中纪录了host名字、启动优先和机器设备目录信息。机器设备信息中的moduleName字段名将用以和驱动程序通道中的moduleName开展配对,进而为机器设备配对到恰当的驱动程序。
3.4.2 获得驱动程序目录
图6 驱动程序(DriverEntry)运行内存合理布局
HDF驱动架构根据驱动程序通道符号的地址集中化储放到一个独特的section来完成对驱动的数据库索引,这一section的开始和结尾插入了_hdf_drivers_start、_hdf_drivers_end2个独特符号,用以标识这一section的范畴,2个独特符号之间的数据信息即是驱动完成表针。
3.4.3 驱动程序载入步骤
图7 HDF驱动载入步骤
Device Manager解析xml机器设备目录,当查找到相匹配驱动完成时,为机器设备创建Device目标案例,假如机器设备配备中的policy字段名为必须对外开放公布驱动插口(SERVICE_POLICY_CAPACITY),那麼驱动的Bind插口将最先被启用,用以关系机器设备和服务项目案例。随后驱动的Init插口将被启用,用以进行驱动的有关复位工作中。假如驱动被卸载或是由于硬件配置等缘故Init插口返回不成功,Release将被启用,用以释放出来驱动申请办理的各种資源。
四、汇总
此次和大伙儿共享了HarmonyOS驱动的关键设计方案观念,关键剖析了核心态驱动载入的全过程,关于HarmonyOS驱动别的内容,事后会出现大量技术性文章内容向大伙儿不断共享,敬请关注。
版权声明:
作者:暴风侠
链接:https://xitongmac.com/jiaocheng/10052.html
来源:暴风侠_一键激活Win10_Win7系统_Win8系统
文章版权归作者所有,未经允许请勿转载。