内核驱动模块的加载方法、系统、设备、介质及芯片与流程

文档序号:33506612发布日期:2023-03-18 02:06阅读:223来源:国知局
内核驱动模块的加载方法、系统、设备、介质及芯片与流程

1.本发明涉及内核驱动模块加载技术领域,尤其涉及一种内核驱动模块的加载方法、系统、设备、介质及芯片。


背景技术:

2.linux(一种操作系统)原生社区通过ko化(ko为内核模块的编译产物),将内核的一些功能移动到内核外面,需要的时候插入内核,不需要的时候卸载。安卓平台由于gki(通用内核映像)架构的引入,导致跟厂商相关的内核驱动模块只能以ko的方式通过用户空间的init(一种进程)进程来加载。
3.目前,内核驱动模块的加载都是单线程的,由于内核驱动模块之间的加载依赖等因素,无法简单地使用多线程直接进行加载,否则可能会出现线程死锁。但随着需求的增多,对应的内核驱动模块的数量也在增多,导致设备启动时内核驱动模块加载耗时较长的问题。


技术实现要素:

4.本发明要解决的技术问题是为了克服现有技术中采用单线程的方式加载内核驱动模块,导致加载耗时较长的缺陷,提供一种内核驱动模块的加载方法、系统、设备、介质及芯片。
5.本发明是通过下述技术方案来解决上述技术问题:
6.本发明提供一种内核驱动模块的加载方法,所述加载方法包括:
7.获取待加载的所述内核驱动模块;
8.将有关联关系的所述内核驱动模块分为若干个驱动模块组,其中,相互之间有关联关系的所述内核驱动模块分到同一个所述驱动模块组中;
9.通过若干个线程分别对对应的所述驱动模块组中的所述内核驱动模块进行加载,其中,每一个所述驱动模块组对应一个线程。
10.较佳地,所述关联关系包括依赖关系,所述将有关联关系的所述内核驱动模块分为若干个驱动模块组的步骤包括:
11.将相互之间有依赖关系的所述内核驱动模块分到同一个所述驱动模块组中。
12.较佳地,所述关联关系包括业务关系,所述将有关联关系的所述内核驱动模块分为若干个驱动模块组的步骤还包括:
13.将相互之间有业务关系的所述内核驱动模块分到同一个所述驱动模块组中。
14.较佳地,所述通过若干个线程对所述驱动模块组中的所述内核驱动模块进行加载的步骤之前还包括:
15.将无关联关系的所述内核驱动模块分为一个或者若干个所述驱动模块组。
16.较佳地,所述加载方法还包括:
17.确定所述内核驱动模块的优先级;
18.按照优先级从高到低的顺序依次加载所述内核驱动模块。
19.较佳地,所述确定所述内核驱动模块的优先级的步骤包括:
20.在同一个所述驱动模块组中,对于有依赖关系的第一内核驱动模块和第二内核驱动模块,若所述第一内核驱动模块依赖于所述第二内核驱动模块,则确定所述第二内核驱动模块的优先级高于所述第一内核驱动模块。
21.较佳地,所述确定所述内核驱动模块的优先级的步骤包括:
22.基于所述内核驱动模块的配置文件,确定所述内核驱动模块的优先级。
23.本发明还提供一种内核驱动模块的加载系统,所述加载系统包括:
24.获取模块,用于获取待加载的所述内核驱动模块;
25.分组模块,用于将有关联关系的所述内核驱动模块分为若干个驱动模块组,其中,相互之间有关联关系的所述内核驱动模块分到同一个所述驱动模块组中;
26.加载模块,用于通过若干个线程分别对对应的所述驱动模块组中的所述内核驱动模块进行加载,其中,每一个所述驱动模块组对应一个线程。
27.较佳地,所述关联关系包括依赖关系,所述分组模块还用于将相互之间有依赖关系的所述内核驱动模块分到同一个所述驱动模块组中。
28.较佳地,所述关联关系包括业务关系,所述分组模块还用于将相互之间有业务关系的所述内核驱动模块分到同一个所述驱动模块组中。
29.较佳地,所述分组模块还用于将无关联关系的所述内核驱动模块分为一个或者若干个所述驱动模块组。
30.较佳地,所述加载系统还包括:
31.优先级确定模块,用于确定所述内核驱动模块的优先级;
32.所述加载模块还用于按照优先级从高到低的顺序依次加载所述内核驱动模块。
33.较佳地,所述优先级确定模块还用于在同一个所述驱动模块组中,对于有依赖关系的第一内核驱动模块和第二内核驱动模块,若所述第一内核驱动模块依赖于所述第二内核驱动模块,则确定所述第二内核驱动模块的优先级高于所述第一内核驱动模块。
34.较佳地,所述优先级确定模块还用于基于所述内核驱动模块的配置文件,确定所述内核驱动模块的优先级。
35.本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述的内核驱动模块的加载方法。
36.本发明还提供一种芯片,应用于电子设备,所述芯片用于执行上述的内核驱动模块的加载方法。
37.本发明还提供一种芯片模组,应用于电子设备,包括收发组件和芯片,所述芯片用于执行上述的内核驱动模块的加载方法。
38.本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的内核驱动模块的加载方法。
39.在符合本领域常识的基础上,各优选条件,可任意组合,即得本发明各较佳实施例。
40.本发明的积极进步效果在于:通过多个线程加载内核驱动模块,倍数缩短了加载
时间,提高了加载效率;同时基于模块之间的关联关系对模块进行分组,将有关联关系的模块分到同一组中,按照优先级由高到低的顺序依次加载,避免了线程死锁的问题发生,保证了多线程加载的顺利进行;进而提高了设备启动的效率,改善了产品的性能。
附图说明
41.图1为本发明实施例1的内核驱动模块的加载方法的流程图。
42.图2为本发明实施例1的内核驱动模块的加载方法的一具体实施方式的流程图。
43.图3为本发明实施例2的内核驱动模块的加载系统的第一模块示意图。
44.图4为本发明实施例2的内核驱动模块的加载系统的第二模块示意图。
45.图5为本发明实施例3的电子设备的结构示意图。
具体实施方式
46.下面通过实施例的方式进一步说明本发明,但并不因此将本发明限制在所述的实施例范围之中。
47.实施例1
48.本实施例提供一种内核驱动模块的加载方法,参见图1,该加载方法包括以下步骤:
49.s1、获取待加载的内核驱动模块;
50.s2、将有关联关系的内核驱动模块分为若干个驱动模块组,其中,相互之间有关联关系的内核驱动模块分到同一个驱动模块组中;
51.s3、通过若干个线程分别对对应的驱动模块组中的内核驱动模块进行加载,其中,每一个驱动模块组对应一个线程。
52.具体地,步骤s1获取待加载的内核驱动模块列表。对于一个特定的软件版本,此列表包含了需要加载哪些内核驱动模块,如果有时序的要求,还包含模块加载的优先级。此列表由开发人员手动配置。
53.步骤s2将有关联关系的内核驱动模块分为若干个驱动模块组,将相互之间有关联关系的内核驱动模块分到同一组中。将内核驱动模块按照其关联关系进行分组是本技术的关键点:由于内核驱动模块之间的依赖关系,一个模块要在其依赖的模块加载完成之后才能加载,若简单将所有待加载的模块分到多个线程中直接加载,很可能会出现线程死锁的问题,从而导致加载失败。因此,需要根据编译时的编译逻辑和内核驱动模块列表中的信息,梳理出模块之间的关联关系,将有关联关系的模块分到同一组中。
54.需要说明的是,对其他没有关联关系的内核驱动模块,可以通过一个线程加载,也可以分组通过多线程加载。
55.步骤s3通过若干个线程分别对对应的驱动模块组中的内核驱动模块进行加载,一个线程对应加载一个驱动模块组中的各个模块。
56.在本方案中,根据关联关系将内核驱动模块分成若干组,并采用多线程的方式进行加载,一方面可以提高加载效率,使得加载耗时倍数级减小;另一方面又避免了线程死锁的问题,保证加载的顺利进行。
57.在一可实施的方案中,关联关系包括依赖关系,步骤s2包括:
58.将相互之间有依赖关系的内核驱动模块分到同一个驱动模块组中。
59.具体地,先根据内核驱动模块的编译依赖关系解析出内核驱动模块的依赖关系列表,由depmod(一种检测模块相依性的工具)来完成该解析。
60.例如,依赖关系列表中模块之间的依赖关系可以用下述方式表示:
61./vendor/lib/modules/*.ko:/vendor/lib/modules/**.ko
[0062]“.ko”表示内核驱动模块文件,冒号后面表示前者依赖的模块,没有依赖则冒号后为空。
[0063]
将相互之间有依赖关系的模块分到同一组中,并将有依赖的模块后加载。
[0064]
在本方案中,通过将相互之间有依赖关系的内核驱动模块分到同一组,可以避免因加载依赖导致的线程死锁问题,保证多线程加载的可靠性。
[0065]
在一可实施的方案中,关联关系包括业务关系,步骤s2包括:
[0066]
将相互之间有业务关系的内核驱动模块分到同一个驱动模块组中。
[0067]
具体地,根据内核驱动模块之间的业务关系,如audio(音频)、wifi(无线通信)、bt(比特流)、usb(通用串行总线)等,将有业务关系的模块分到同一组中。例如,实现某一个功能,需要加载snd-soc-*1.ko,
……
,snd-soc-*n.ko这n个内核驱动模块,则将这n个内核驱动模块分到同一个组中,由同一个线程进行加载。
[0068]
在本方案中,通过将相互之间有业务关系的内核驱动模块分到同一组,可以提高多线程加载的合理性和有效性。
[0069]
需要说明的是,内核驱动模块之间的关联关系不限于上述的依赖关系和业务关系,还包括其他影响多线程下载的关联关系。
[0070]
在一可实施的方案中,步骤s3之前还包括:
[0071]
将无关联关系的内核驱动模块分为一个或者若干个驱动模块组。
[0072]
具体地,无关联关系的模块可以分到一个组中,通过一个线程进行加载,也可以分为多组,通过多个线程进行加载。
[0073]
在本方案中,通过将无关联关系的模块分组多线程加载,可以进一步提高加载的效率。
[0074]
在一可实施的方案中,该加载方法还包括:
[0075]
确定内核驱动模块的优先级;
[0076]
按照优先级从高到低的顺序依次加载内核驱动模块。
[0077]
具体地,优先级较高的模块先加载,优先级较低的模块后加载。优先级由模块之间的依赖关系、时序等因素共同确定。
[0078]
在本方案中,通过以优先级顺序依次加载内核驱动模块,可以避免线程死锁的问题,保证加载的顺利进行。
[0079]
在一可实施的方案中,确定内核驱动模块的优先级的步骤包括:
[0080]
在同一个驱动模块组中,对于有依赖关系的第一内核驱动模块和第二内核驱动模块,若第一内核驱动模块依赖于第二内核驱动模块,则确定第二内核驱动模块的优先级高于第一内核驱动模块。
[0081]
具体地,若a.ko依赖于b.ko,则b.ko的优先级高于a.ko,即b.ko先于a.ko加载。
[0082]
进一步地,若a.ko依赖于k.ko和f.ko,而b.ko依赖于k.ko,则a.ko、b.ko、k.ko、
f.ko分到同一个驱动模块组中,且k.ko和f.ko的优先级高于a.ko,同时k.ko的优先级也高于b.ko,加载优先级可以是k.ko》b.ko》f.ko》a.ko。
[0083]
在本方案中,通过确认相互有依赖关系的内核驱动模块之间的优先级,可以保证被依赖的模块先加载,进而避免线程死锁的问题,保证加载的顺利进行。
[0084]
在一可实施的方案中,确定内核驱动模块的优先级的步骤包括:
[0085]
基于内核驱动模块的配置文件,确定内核驱动模块的优先级。
[0086]
具体地,该配置文件基于不同版本的软件,由开发人员手动配置。为确保一些关键模块优先完成加载,要给其配置较高的优先级。
[0087]
在本方案中,通过内核驱动模块的配置文件确定各个模块加载的优先级,可以保证关键模块优先完成加载,进而提高加载方式的可靠性。
[0088]
参见图2,下面以一具体的实施方式说明本实施例提供的内核驱动模块的加载方法的实现过程:
[0089]
根据编译时生成的module.load(内核驱动模块加载列表)以及modules.dep(依赖关系列表)配置文件,梳理当前设备上的内核驱动模块之间的依赖关系。并根据依赖关系、业务关系等关联关系对内核驱动模块进行分类,有关联关系的模块分到同一组中(关联驱动1、
……
、关联驱动n),无关联关系(无依赖的驱动)分为一组或者若干组。在init进程中,通过多个线程对对应的驱动模块组中的内核驱动模块进行加载。等待所有的子线程加载完成,执行其他启动流程。
[0090]
本实施例提供的内核驱动模块的加载方法,通过多个线程加载内核驱动模块,倍数缩短了加载时间,提高了加载效率;同时基于模块之间的依赖关系、业务关系等关联关系对模块进行分组,将有关联关系的模块分到同一组中,按照优先级由高到低的顺序依次加载,避免了线程死锁的问题发生,保证了多线程加载的合理性和可靠性。
[0091]
实施例2
[0092]
本实施例提供一种内核驱动模块的加载系统,参见图3,该加载系统包括:
[0093]
获取模块21,用于获取待加载的内核驱动模块;
[0094]
分组模块22,用于将有关联关系的内核驱动模块分为若干个驱动模块组,其中,相互之间有关联关系的内核驱动模块分到同一个驱动模块组中;
[0095]
加载模块23,用于通过若干个线程分别对对应的驱动模块组中的内核驱动模块进行加载,其中,每一个驱动模块组对应一个线程。
[0096]
在本方案中,根据关联关系将内核驱动模块分成若干组,并采用多线程的方式进行加载,一方面可以提高加载效率,使得加载耗时倍数级减小;另一方面又避免了线程死锁的问题,保证加载的顺利进行。
[0097]
在一可实施的方案中,关联关系包括依赖关系,分组模块22还用于将相互之间有依赖关系的内核驱动模块分到同一个驱动模块组中。
[0098]
在本方案中,通过将相互之间有依赖关系的内核驱动模块分到同一组,可以避免因加载依赖导致的线程死锁问题,保证多线程加载的可靠性。
[0099]
在一可实施的方案中,关联关系包括业务关系,分组模块22还用于将相互之间有业务关系的内核驱动模块分到同一个驱动模块组中。
[0100]
在本方案中,通过将相互之间有业务关系的内核驱动模块分到同一组,可以提高
多线程加载的合理性和有效性。
[0101]
在一可实施的方案中,分组模块22还用于将无关联关系的内核驱动模块分为一个或者若干个驱动模块组。
[0102]
在本方案中,通过将无关联关系的模块分组多线程加载,可以进一步提高加载的效率。
[0103]
在一可实施的方案中,参见图4,加载系统还包括:
[0104]
优先级确定模块24,用于确定内核驱动模块的优先级;
[0105]
加载模块23还用于按照优先级从高到低的顺序依次加载内核驱动模块。
[0106]
在本方案中,通过以优先级顺序依次加载内核驱动模块,可以避免线程死锁的问题,保证加载的顺利进行。
[0107]
在一可实施的方案中,优先级确定模块24还用于在同一个驱动模块组中,对于有依赖关系的第一内核驱动模块和第二内核驱动模块,若第一内核驱动模块依赖于第二内核驱动模块,则确定第二内核驱动模块的优先级高于第一内核驱动模块。
[0108]
在本方案中,通过确认相互有依赖关系的内核驱动模块之间的优先级,可以保证被依赖的模块先加载,进而避免线程死锁的问题,保证加载的顺利进行。
[0109]
在一可实施的方案中,优先级确定模块24还用于基于内核驱动模块的配置文件,确定内核驱动模块的优先级。
[0110]
在本方案中,通过内核驱动模块的配置文件确定各个模块加载的优先级,可以保证关键模块优先完成加载,进而提高加载方式的可靠性。
[0111]
由于本实施例提供的内核驱动模块的加载系统与实施例1提供的内核驱动模块的加载方法原理相同,故在此不再赘述。
[0112]
本实施例提供的内核驱动模块的加载系统,通过多个线程加载内核驱动模块,倍数缩短了加载时间,提高了加载效率;同时基于模块之间的依赖关系、业务关系等关联关系对模块进行分组,将有关联关系的模块分到同一组中,按照优先级由高到低的顺序依次加载,避免了线程死锁的问题发生,保证了多线程加载的合理性和可靠性。
[0113]
实施例3
[0114]
本实施例提供了一种电子设备,图5为该电子设备的模块示意图。电子设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现实施例1的内核驱动模块的加载方法。图5显示的电子设备30仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
[0115]
如图5所示,电子设备30可以以通用计算设备的形式表现,例如其可以为服务器设备。电子设备30的组件可以包括但不限于:上述至少一个处理器31、上述至少一个存储器32、连接不同系统组件(包括存储器32和处理器31)的总线33。
[0116]
总线33包括数据总线、地址总线和控制总线。
[0117]
存储器32可以包括易失性存储器,例如随机存取存储器(ram)321和/或高速缓存存储器322,还可以进一步包括只读存储器(rom)323。
[0118]
存储器32还可以包括具有一组(至少一个)程序模块324的程序/实用工具325,这样的程序模块324包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
[0119]
处理器31通过运行存储在存储器32中的计算机程序,从而执行各种功能应用以及数据处理,例如本公开实施例1的内核驱动模块的加载方法。
[0120]
电子设备30也可以与一个或多个外部设备34(例如键盘、指向设备等)通信。这种通信可以通过输入/输出(i/o)接口35进行。并且,模型生成的设备30还可以通过网络适配器36与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图5所示,网络适配器36通过总线33与模型生成的设备30的其它模块通信。应当明白,尽管图中未示出,可以结合模型生成的设备30使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、raid(磁盘阵列)系统、磁带驱动器以及数据备份存储系统等。
[0121]
应当注意,尽管在上文详细描述中提及了电子设备的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
[0122]
实施例4
[0123]
一种芯片,应用于实施例3的电子设备,用于执行如实施例1的内核驱动模块的加载方法。
[0124]
实施例5
[0125]
一种芯片模组,应用于实施例3的电子设备,用于执行如实施例1的内核驱动模块的加载方法。
[0126]
实施例6
[0127]
本实施例提供了一种计算机可读存储介质,其上存储有计算机程序,程序被处理器执行时实现实施例1的内核驱动模块的加载方法。
[0128]
其中,可读存储介质可以采用的更具体可以包括但不限于:便携式盘、硬盘、随机存取存储器、只读存储器、可擦拭可编程只读存储器、光存储器件、磁存储器件或上述的任意合适的组合。
[0129]
在可能的实施方式中,本发明还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行实现实施例1的内核驱动模块的加载方法。
[0130]
其中,可以以一种或多种程序设计语言的任意组合来编写用于执行本发明的程序代码,程序代码可以完全地在用户设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户设备上部分在远程设备上执行或完全在远程设备上执行。
[0131]
虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1