一种基于硬件抽象层的硬件驱动方法和装置
技术领域
本说明书实施例涉及操作系统技术领域,更具体地,涉及一种基于硬件抽象层的硬件驱动方法和装置。
背景技术
通用电子产品由硬件和软件两部分构成,硬件提供产品所依赖的硬件资源及其驱动实现;软件提供产品功能逻辑的实现。对于同一类产品,其产品功能和业务逻辑通常是一样的,我们希望即使产品的硬件发生改变,比如更换了硬件,不影响产品的软件功能,即不需要重新开发或只需少量开发该产品业务软件功能。为达到该目的,需要在硬件和软件之间提供一个过渡层,也即硬件抽象层,它的作用是硬件变更带来的改动都在此过渡层中来适配,以达到上层业务软件对于硬件变更无感知或只需少量改动即可在新的硬件平台上运行。电子产品的核心部件是主处理器芯片(也称硬件平台),产品厂商为了提高对处理器供应商的溢价能力,往往会选择2-3家处理器厂商作为备选设计,由于产品功能不变,只是更换了硬件平台,为了产品业务软件的复用性和跨平台特性,需要引入硬件抽象层在业务软件和硬件平台之间做过渡。另外,硬件模块功能具有一般普遍性,例如所有的audio模块都会提供音频播放、音频格式设置、静音操作等,所有led模块都可以提供开关灯、设置灯效闪烁频率等功能,这种硬件模块的普遍性功能如果可以通过一套统一接口来操作访问,可大大降低产品的迭代开发成本。为此,安卓HAL提供一种高自由度的硬件抽象层框架,硬件厂商按照安卓HAL框架要求实现其驱动代码并以动态库形式在Android系统中被加载使用。在此方案中,不提供统一抽象的硬件操作接口,而是通过标准open/read/write来访问硬件资源。硬件厂商驱动以动态库形式提供,由Android系统加载解析动态库来获取驱动代码。然而,该框架并不适合例如嵌入式RTOS系统,其原因为,并非所有RTOS系统支持标准open/read/write操作,几乎所有RTOS系统不支持解析动态库。
因此,需要一种更有效的通过硬件抽象层的硬件驱动方案。
发明内容
本说明书实施例旨在提供一种更有效的通过硬件抽象层的硬件驱动方案,以解决现有技术中的不足。
为实现上述目的,本说明书一个方面提供一种基于硬件抽象层的硬件驱动方法,所述硬件抽象层位于操作系统中的上层软件与驱动层之间,预设有接口层、模块层和衔接层,其中,所述模块层中包括第一硬件模块、第一设备模块和第一方法模块,所述第一硬件模块中包括所述第一设备模块,所述第一设备模块中包括所述第一方法模块,其中,所述第一硬件模块与第一硬件类型相对应,所述第一设备模块与第一设备相对应,所述第一设备属于所述第一硬件类型,所述驱动层中包括所述第一设备的驱动程序,所述驱动程序包括第一驱动接口,所述方法由操作系统执行,包括:
从所述上层软件接收对接口层中第一接口的调用,所述第一接口至少包括:第一硬件模块的标识、第一设备模块的标识和第一方法模块的标识;
基于所述第一接口获取所述模块层中的第一方法模块,所述第一方法模块中包括与所述第一驱动接口对应的第一驱动标识;以及
通过所述衔接层基于所述第一驱动标识执行衔接方法,以调用所述第一驱动接口,以使得所述第一设备执行与所述第一方法对应的操作。
在一个实施例中,所述模块层中包括多个硬件模块,每个硬件模块的硬件模块标识被定义为全局变量,所述多个硬件模块通过如下步骤被分配到内存中:
通过编译器对预定义的“开始”全局变量和“结束”全局变量分别指定第一内存段和第三内存段,其中第一内存段和第三内存段通过各自的内存段标识表示;
通过编译器对每个硬件模块对应的硬件模块标识全局变量分别指定一个第二内存段,其中,每个第二内存段具有相应的内存段标识,其中,第二内存段中的内存段标识具有与硬件模块对应的内容;
通过编译器以字母顺序将第一内存段、多个第二内存段和第三内存段连续排列在内存中,其中,所述第一内存段、第二内存段和第三内存段各自的内存段标识使得,第一内存段被排列在各个第二内存段之前,第三内存段被排列在各个第二内存段之后。
在一个实施例中,各个第二内存段被预设有与相应的硬件模块对应的容量。
在一个实施例中,获取所述模块层中的第一方法模块包括,基于第一硬件模块的标识在位于第一内存段和第三内存段之间的内存段中获取存储第一硬件模块的内存段,以及,基于第一设备模块的标识和第一方法模块的标识,在存储第一硬件模块的内存段中获取所述第一方法模块。
在一个实施例中,所述衔接层预设有驱动标识与驱动接口的关联数据表,其中,通过所述衔接层基于所述第一驱动标识执行衔接方法包括,基于第一驱动标识和所述关联数据表,调用与第一驱动标识对应的第一驱动接口。
在一个实施例中,通过所述衔接层基于所述第一驱动标识执行衔接方法包括,通过所述衔接层将所述第一驱动标识作为消息发送给所述驱动层,以使得在所述驱动层中调用与所述第一驱动标识对应的第一驱动接口,其中,所述驱动层中预设有驱动标识与驱动接口的关联数据表。
在一个实施例中,所述操作系统为嵌入式RTOS系统。
在一个实施例中,所述第一设备的驱动程序具有静态库的形式或者为源代码。
本说明书另一方面提供一种基于硬件抽象层的硬件驱动装置,所述硬件抽象层位于操作系统中的上层软件与驱动层之间,预设有接口层、模块层和衔接层,其中,所述模块层中包括第一硬件模块、第一设备模块和第一方法模块,所述第一硬件模块中包括所述第一设备模块,所述第一设备模块中包括所述第一方法模块,其中,所述第一硬件模块与第一硬件类型相对应,所述第一设备模块与第一设备相对应,所述第一设备属于所述第一硬件类型,所述驱动层中包括所述第一设备的驱动程序,所述驱动程序包括第一驱动接口,所述装置部署在操作系统中,包括:
接收单元,配置为,从所述上层软件接收对接口层中第一接口的调用,所述第一接口至少包括:第一硬件模块的标识、第一设备模块的标识和第一方法模块的标识;
获取单元,配置为,基于所述第一接口获取所述模块层中的第一方法模块,所述第一方法模块中包括与所述第一驱动接口对应的第一驱动标识;以及
执行单元,配置为,通过所述衔接层基于所述第一驱动标识执行衔接方法,以调用所述第一驱动接口,以使得所述第一设备执行与所述第一方法对应的操作。
在一个实施例中,所述模块层中包括多个硬件模块,每个硬件模块的硬件模块标识被定义为全局变量,所述多个硬件模块通过分配装置被分配到内存中,所述分配装置包括:
第一指定单元,配置为,通过编译器对预定义的“开始”全局变量和“结束”全局变量分别指定第一内存段和第三内存段,其中第一内存段和第三内存段通过各自的内存段标识表示;
第二指定单元,配置为,通过编译器对每个硬件模块对应的硬件模块标识全局变量分别指定一个第二内存段,其中,每个第二内存段具有相应的内存段标识,其中,第二内存段中的内存段标识具有与硬件模块对应的内容;
排列单元,配置为,通过编译器以字母顺序将第一内存段、多个第二内存段和第三内存段连续排列在内存中,其中,所述第一内存段、第二内存段和第三内存段各自的内存段标识使得,第一内存段被排列在各个第二内存段之前,第三内存段被排列在各个第二内存段之后。
在一个实施例中,所述获取单元还配置为,基于第一硬件模块的标识在位于第一内存段和第三内存段之间的内存段中获取存储第一硬件模块的内存段,以及,基于第一设备模块的标识和第一方法模块的标识,在存储第一硬件模块的内存段中获取所述第一方法模块。
在一个实施例中,所述衔接层预设有驱动标识与驱动接口的关联数据表,其中,所述衔接单元还配置为,基于第一驱动标识和所述关联数据表,调用与第一驱动标识对应的第一驱动接口。
在一个实施例中,所述衔接单元还配置为,通过所述衔接层将所述第一驱动标识作为消息发送给所述驱动层,以使得在所述驱动层中调用与所述第一驱动标识对应的第一驱动接口,其中,所述驱动层中预设有驱动标识与驱动接口的关联数据表。
本说明书另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。
本说明书另一方面提供一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。
通过根据本说明书实施例的基于HAL层的硬件驱动方案,提供统一接口访问硬件资源,根据硬件模块特性,统一抽象定义驱动接口原型,硬件厂商按此原型独立实现,不依赖上层软件,达到多方独立开发、联合调试的目的,另外,利用编译器特性提供一种模块分散设计、统一加载的方法用来代替动态库加载方法。
附图说明
通过结合附图描述本说明书实施例,可以使得本说明书实施例更加清楚:
图1示出根据本说明书实施例的操作系统100的示意图;
图2示出根据本说明书实施例的一种基于硬件抽象层的硬件驱动方法;
图3示出了根据该实施例的LED硬件模块的示意图;
图4示出根据本说明书实施例的一种基于硬件抽象层的硬件驱动装置400。
具体实施方式
下面将结合附图描述本说明书实施例。
图1示出根据本说明书实施例的操作系统100的示意图。该操作系统100例如为嵌入式RTOS系统,其例如用于特定硬件的硬件平台中,该硬件平台中例如包括分别属于音频、视频、LED等模块的多个实体设备(芯片),例如属于音频模块的芯片包括麦克风芯片、音频播放芯片,属于LED模块的芯片包括第一LED芯片和第二LED芯片等等。为了使得该操作系统便于移植到不同的硬件平台,即在移植到不同的硬件平台时,不需要对业务软件进行更改,在本说明书实施例中,在系统100中提供硬件抽象层。如图1中所示,系统100包括上层软件11、硬件抽象层12和驱动层13。上层软件11包括平台软件和应用软件,硬件抽象层12位于上层软件11与驱动层13之间,用于衔接上层软件11和驱动层13,从而在硬件变更的情况下使得上层业务软件对于硬件变更基本无感知。如图中对硬件抽象层12的放大图示,硬件抽象层12中包括接口层121、模块层122和衔接层123。其中,接口层121向上层软件提供驱动硬件的接口,模块层122中包括多个模块,每个模块与一类硬件相对应,如音频模块(Audio)、视频模块(Video)、LED模块等等。从而通过在多个模块中找到与接口对应的驱动方法,可在衔接层中与驱动函数中相应的驱动接口衔接上,从而达到驱动相应硬件功能的目的。
可以理解,上述描述只是说明性的,而不用于限定本说明书实施例范围,例如,系统100不限于为嵌入式RTOS系统,而可以为任意需要连接硬件并驱动硬件的操作系统。
下文中将详细描述基于上述硬件抽象层驱动硬件的方法。
图2示出根据本说明书实施例的一种基于硬件抽象层的硬件驱动方法,所述硬件抽象层位于操作系统中的上层软件与驱动层之间,预设有接口层、模块层和衔接层,其中,所述模块层中包括第一硬件模块、第一设备模块和第一方法模块,所述第一硬件模块中包括所述第一设备模块,所述第一设备模块中包括所述第一方法模块,其中,所述第一硬件模块与第一硬件类型相对应,所述第一设备模块与第一设备相对应,所述第一设备属于所述第一硬件类型,所述驱动层中包括所述第一设备的驱动程序,所述驱动程序包括第一驱动接口,所述方法由操作系统执行,包括:
步骤S202,从所述上层软件接收对接口层中第一接口的调用,所述第一接口至少包括:第一硬件模块的标识、第一设备模块的标识和第一方法模块的标识;
步骤S204,基于所述第一接口获取所述模块层中的第一方法模块,所述第一方法模块中包括与所述第一驱动接口对应的第一驱动标识;以及
步骤S206,通过所述衔接层基于所述第一驱动标识执行衔接方法,以调用所述第一驱动接口,以使得所述第一设备执行与所述第一方法对应的操作。
如前文所述,所述模块层包括多个硬件模块,每个硬件模块对应于一类硬件,每个硬件模块中包括至少一个设备模块,其中,每个设备模块与一个实体设备相对应,每个设备模块中预设有至少一个方法模块,所述至少一个方法模块与针对相应的实体设备的至少一个操作分别对应,所述接口层提供针对每个方法模块的接口,所述衔接层用于衔接所述硬件抽象层与所述驱动层,所述驱动层包括各个实体设备的驱动程序。
如上文所述,这里,每个硬件模块对应于一类硬件,如音频模块对应于与音频相关的全部实体硬件,视频模块对应于与视频相关的全部实体硬件,LED模块对应于与LED相关的全部实体硬件,等等。所述设备模块对应于上述实体硬件,如音频播放芯片、LED芯片等等。一个硬件模块中可包括至少一个设备模块,例如,LED模块中可包括第一LED设备模块和第二LED设备模块。每个设备模块中可包括至少一个方法模块,该方法模块与针对该实体设备的至少一个操作相对应。例如,对于音频播放芯片,可进行的操作例如包括静音操作和放大音量操作,从而,在相应的设备模块中可包括静音方法模块和放大音量方法模块。所述各个模块可通过定义结构体的方式而获取。例如,对于音频模块,可通过如下代码进行定义:
struct audio_module{
struct hw_module_t common;
};
其中,hw_module_t为预先定义的基类结构体,音频模块通过继承该hw_module_t结构体,而具有hw_module_t结构体的全部属性。例如可将hw_module_t定义为:
Typedef struct hw_module_t{
uint 32_t tag;
uint 16_t module_api_version;
const char*id;
const char*name;
…
}hw_module_t
在一个实施例中,在上述硬件模块结构体中,可定义设备结构体,并可在设备结构体中定义方法结构体。图3示出了根据该实施例的LED硬件模块300的示意图,如图中所示,在LED硬件模块中,例如包括与两个实体设备LED1和LED2分别对应的LED1设备模块和LED2设备模块。在LED1设备模块中包括方法1模块和方法2模块,在LED2设备模块中也包括方法1模块和方法2模块,其中,方法1模块对应于打开LED1(或LED2)的操作,方法2模块对应于关闭LED1(或LED2)的操作。
在一个实施例中,可单独定义设备结构体,并通过在设备结构体中继承相应的硬件模块结构体,从而确定该设备结构体与该硬件模块结构体的从属关系,类似地,可单独定义方法结构体,并通过在方法结构体中继承相应的设备结构体,从而确定其从属关系。可以理解,所述各个模块不限于通过结构体的方式进行定义,例如,可通过数据表的形式确定所述各个模块之间的从属关系及键值关系等。
下面详细描述上述各个步骤。
在步骤S202,从所述上层软件接收对接口层中第一接口的调用,所述第一接口至少包括:第一硬件模块的标识、第一设备模块的标识和第一方法模块的标识。
在如上文所述例如以结构体的方式定义了各个模块之后,各个模块的模块标识即为相应的结构体名称,例如,“audio_module”为音频硬件模块(其例如为第一模块)的模块标识,“audio1_device”为第一音频设备模块(其例如为第一设备模块)的模块标识,其中,第一音频设备模块为音频硬件模块中包括的一个设备模块,“audio1_mute”为与audio1设备对应的静音方法模块(其例如为第一方法模块)的模块标识。这些模块标识的组合从而可提供在模块层中找到相应方法的接口。例如,当上层应用希望通过audio1设备实现静音的情况中,其可向硬件抽象层(HAL层)调用如下的第一接口:<audio_module><audio1_device><audio1_mute>,该接口的含义即为,对音频硬件中的audio1设备调用静音功能。也就是说,该接口层可提供对每个硬件模块中的每个设备模块中的每个方法的接口,通过基于硬件模块、设备模块和方法模块的层层嵌套的方式设置接口形式,从而可容易地找到相应的方法。
在步骤S204,基于所述第一接口获取所述模块层中的第一方法模块,所述第一方法模块中包括与所述第一驱动接口对应的第一驱动标识。
在接收上述第一接口之后,根据该第一接口,可在内存中获取相应的第一方法模块。
在一个实施例中,可通过编译器_attribute_函数将分散的各个硬件模块分配到指定的内存段。具体是,首先预定义“hal_start”和“hal_end”两个全局变量,并对其分别指定内存段。
例如,可通过以下代码分别对“hal_start”和“hal_end”两个全局变量分配内存段:
hal_start_attribute_((unused,section(“.hal_mod_1”)))
hal_end_attribute_((unused,section(“.hal_mod_3”))),
上面两行代码的作用为,将全局变量“hal_start”指定位于内存段hal_mod_1上,将全局变量“hal_end”指定位于内存段hal_mod_3上,其中“hal_mod_1”和“hal_mod_3”分别为相应内存段的名称。
各个硬件模块结构体被预先定义为全局变量,从而可通过同样地方式对各个硬件模块结构体指定内存段。例如,可通过如下代码对硬件模块audio_module和LED_module指定内存段:audio_module_attribute_((unused,section(“.hal_mod_2_audio”)))LED_module_attribute_((unused,section(“.hal_mod_2_LED”)))同样地,“hal_mod_2_audio”和“hal_mod_2_LED”分别为相应内存段的名称。
编译器对以上定义编译后将按自动字母编码顺序对它们进行排列,得到如表1所示的数据表:
表1
在获取该数据表之后,在进行图2所示方法中,为了获取接口中特定模块在内存中的存储位置,可首先查找内存中全局变量的存储位置,在确定全局变量“start”或“end”的位置之后,可在start和end各自内存段之间的各个内存段中,通过匹配模块名称即可找到对应的硬件模块的存储内存段。例如,通过确定内存段名称中存在audio的内存段(即hal_mod_2_audio)找到audio_module硬件模块的存储内存段。在一个实施例中,可对应于硬件模块对各个内存段设定相应的容量。例如,可将音频模块(audio_module)对应的内存段的容量设置为大于LED模块(LED_module)对应的内存段的容量。
通过上述存储方法,可自动地将分散设计的各个硬件模块有序地加载到一起,从而便于对特定模块的查找,也省去了程序员添加存储硬件模块和查找硬件模块的其它步骤。在操作系统更换硬件平台的情况中,在HAL层的模块层中,可自动根据新的平台中的硬件配置对其重新有序地存储,并具有相同的查找逻辑,从而减少了平台移植过程中的工作量。
可以理解,本说明书实施例中对硬件模块的存储不限于上述方式,例如,可通过通常的编译方式对各个硬件模块分配内存,并在数据表中记录下硬件模块及其对应的内存地址,从而在需要获取特定硬件模块的情况中,可通过该数据表找到特定硬件模块的存储地址,并在该存储地址获取所述特定硬件模块。
基于在步骤S202接收的第一接口,在通过上述方法获取了第一硬件模块(例如,音频模块)之后,可通过第一接口中的第一设备模块标识(例如audio1_device)在第一硬件模块中找到该第一设备模块,并通过第一接口中的第一方法模块标识(例如audio1_mute),在第一设备模块中找到该第一方法模块。每个方法模块中预设了与相应的设备的相应驱动接口对应的驱动标识。例如,在第一方法模块中,预设了与第一设备的静音驱动接口对应的驱动标识。该驱动标识为用于驱动硬件的中间变量,其可以为数值、文字、数值的形式等,其被通过数据表的形式与相应的驱动接口关联起来,从而可用于驱动相应的驱动接口。在一个实施例中,可对全部驱动程序中的各个接口顺序编号,从而,可通过数值作为驱动标识,例如,将驱动标识“1”设置为对应于音频硬件中的第一设备(audio1)的静音操作接口,将驱动标识“2”设置为对应于音频硬件中的第二设备(audio2)的音量放大操作接口,将驱动标识“3”设置为对应于LED硬件中的第一设备(LED1)的开操作接口等等。
在一个实施例中,可对各个设备的驱动程序的多个接口分别顺序编号,从而可通过数组作为驱动标识。例如,将驱动标识[1][1]设置为对应于音频硬件中的第一设备(audio1)的静音操作接口,将驱动标识[1][2]设置为对应于设备audio1的音量放大操作接口,将驱动标识[2][1]设置为对应于设备audio2的静音操作接口,将驱动标识[2][2]设置为对应于设备audio2的音量放大操作接口等等。也就是说,该驱动标识的第1位对应于设备标识,第2位对应于接口标识。在一个实施例中,还可以通过三元数组作为驱动标识,类似地,可将驱动标识的第1为对应于硬件模块标识,第2位对应于设备标识,第3位对应于接口标识。
在步骤S206,通过所述衔接层基于所述第一驱动标识执行衔接方法,以调用所述第一驱动接口,以使得所述第一设备执行与所述第一方法对应的操作。
所述衔接方法也即使得调用相应的驱动接口的方法,该衔接方法可通过多种不同的方法实现。
在一个实施例中,在衔接层预设有硬件的各个驱动接口,及关联驱动标识与驱动接口的数据表。从而,在获取驱动标识之后,可基于该数据表调用相应的驱动接口,从而实现相应的功能。通过该方法,硬件厂商可通过向HAL层提供各个驱动接口,从而实现对硬件各个相应功能的驱动,而无需了解本说明书实施例中的HAL的具体构造原理,而上层软件也不需要了解具体硬件的驱动接口,只需要调用HAL层提供的接口即可。即,HAL层起到了在上层软件与硬件驱动程序之间的过渡作用。所述硬件驱动程序可由厂商以静态库或源代码的形式提供以加载到操作系统中。
在一个实施例中,所述操作系统中预设有消息机制(OS Message),在包括各个驱动程序的驱动层中预设有驱动标识与驱动接口的关联数据表,从而,可在衔接层向驱动层发送包括驱动标识的消息,从而使得驱动层内部基于该驱动标识和所述关联数据表调用相应的驱动接口,从而实现对相应设备的相应功能的驱动。通过该方法,硬件厂商不需要向HAL层提供硬件的驱动接口,从而具有更大的自由度。
图4示出根据本说明书实施例的一种基于硬件抽象层的硬件驱动装置400,所述硬件抽象层位于操作系统中的上层软件与驱动层之间,预设有接口层、模块层和衔接层,其中,所述模块层中包括第一硬件模块、第一设备模块和第一方法模块,所述第一硬件模块中包括所述第一设备模块,所述第一设备模块中包括所述第一方法模块,其中,所述第一硬件模块与第一硬件类型相对应,所述第一设备模块与第一设备相对应,所述第一设备属于所述第一硬件类型,所述驱动层中包括所述第一设备的驱动程序,所述驱动程序包括第一驱动接口,所述装置部署在操作系统中,包括:
接收单元41,配置为,从所述上层软件接收对接口层中第一接口的调用,所述第一接口至少包括:第一硬件模块的标识、第一设备模块的标识和第一方法模块的标识;
获取单元42,配置为,基于所述第一接口获取所述模块层中的第一方法模块,所述第一方法模块中包括与所述第一驱动接口对应的第一驱动标识;以及
执行单元43,配置为,通过所述衔接层基于所述第一驱动标识执行衔接方法,以调用所述第一驱动接口,以使得所述第一设备执行与所述第一方法对应的操作。
在一个实施例中,每个硬件模块的硬件模块标识被定义为全局变量,所述多个硬件模块通过分配装置401被分配到内存中,所述分配装置包括:
第一指定单元44,配置为,通过编译器对预定义的“开始”全局变量和“结束”全局变量分别指定第一内存段和第三内存段,其中第一内存段和第三内存段通过各自的内存段标识表示;
第二指定单元45,配置为,通过编译器对每个硬件模块对应的硬件模块标识全局变量分别指定一个第二内存段,其中,每个第二内存段具有相应的内存段标识,其中,第二内存段中的内存段标识具有与硬件模块对应的内容;
排列单元46,配置为,通过编译器以字母顺序将第一内存段、多个第二内存段和第三内存段连续排列在内存中,其中,所述第一内存段、第二内存段和第三内存段各自的内存段标识使得,第一内存段被排列在各个第二内存段之前,第三内存段被排列在各个第二内存段之后。
在一个实施例中,所述获取单元42还配置为,基于第一硬件模块的标识在位于第一内存段和第三内存段之间的内存段中获取存储第一硬件模块的内存段,以及,基于第一设备模块的标识和第一方法模块的标识,在存储第一硬件模块的内存段中获取所述第一方法模块。
在一个实施例中,所述衔接层预设有驱动标识与驱动接口的关联数据表,其中,所述衔接单元43还配置为,基于第一驱动标识和所述关联数据表,调用与第一驱动标识对应的第一驱动接口。
在一个实施例中,所述衔接单元43还配置为,通过所述衔接层将所述第一驱动标识作为消息发送给所述驱动层,以使得在所述驱动层中调用与所述第一驱动标识对应的第一驱动接口,其中,所述驱动层中预设有驱动标识与驱动接口的关联数据表。
本说明书另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。
本说明书另一方面提供一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。
通过根据本说明书实施例的基于HAL层的硬件驱动方案,提供统一接口访问硬件资源,根据硬件模块特性,统一抽象定义驱动接口原型,硬件厂商按此原型独立实现,不依赖上层软件,达到多方独立开发、联合调试的目的,另外,利用编译器特性提供一种模块分散设计、统一加载的方法用来代替动态库加载方法。
需要理解,本文中的“第一”,“第二”等描述,仅仅为了描述的简单而对相似概念进行区分,并不具有其他限定作用。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执轨道,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执轨道的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。