CN115562731A - 微内核架构的设备驱动方法、装置、电子设备和存储介质 - Google Patents
微内核架构的设备驱动方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN115562731A CN115562731A CN202110734252.7A CN202110734252A CN115562731A CN 115562731 A CN115562731 A CN 115562731A CN 202110734252 A CN202110734252 A CN 202110734252A CN 115562731 A CN115562731 A CN 115562731A
- Authority
- CN
- China
- Prior art keywords
- thread
- equipment
- node
- main thread
- rpc
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本公开实施例涉及微内核架构的设备驱动方法、装置、电子设备和存储介质。本公开的至少一个实施例中,采用驱动主线程和设备子线程的主从线程架构模式,在操作系统启动时,仅启动驱动主线程,而不启动设备子线程,减少设备子线程对系统资源的消耗;并且,驱动主线程和设备子线程通过RPC方式提供设备驱动服务,具体地,当驱动主线程接收到的第一RPC消息为设备启动请求后,驱动主线程再启动设备节点的设备子线程,进而由设备子线程确定接收到的第二RPC消息为设备操作请求后,对设备节点进行对应的操作,解决目前的微内核架构中,应用无法直接调用设备驱动的问题。
Description
技术领域
本公开实施例涉及计算机技术领域,具体涉及一种微内核架构的设备驱动方法、装置、电子设备和非暂态计算机可读存储介质。
背景技术
操作系统(Operation System,OS)是管理计算机硬件与软件资源的计算机程序。系统调用是操作系统的最小功能单位,系统调用将操作系统分为内核态(可以理解为内核空间)和用户态(可以理解为用户空间)。内核是操作系统的一种特殊的软件程序,直接运行在硬件上,可以理解为连接应用程序和硬件的桥梁,用于控制计算机的硬件资源,例如协调中央处理单元(Central Processing Unit,CPU)资源、分配内存资源并提供稳定的环境供应用程序运行。用户态可以理解为提供应用程序运行的空间。为了使应用程序访问到内核管理的资源,例如CPU资源、内存资源、I/O(Input/Output,输入/输出)资源,内核需提供一组通用的访问接口,这些接口即为系统调用。
目前,操作系统的内核架构有两种:宏内核架构和微内核架构。图1示出了宏内核的架构示意图和微内核架构示意图,由图1可见,在宏内核架构中组件、应用和设备驱动运行于内核态,因此,组件和应用可以直接调用设备驱动。而在微内核架构中,设备驱动运行于用户态,例如运行于进程1中,组件和应用运行于用户态的进程2中,这样,组件和应用无法直接调用设备驱动,为此,亟需提供一种微内核架构的设备驱动方案。
发明内容
为了解决现有技术存在的至少一个问题,本公开的至少一个实施例提供了一种微内核架构的设备驱动方法、装置、电子设备和非暂态计算机可读存储介质。
第一方面,本公开实施例提出一种微内核架构的设备驱动方法,其中,操作系统响应启动指令而启动驱动主线程,且不启动设备子线程,该设备驱动方法包括:
驱动主线程通过RPC服务接收第一RPC消息;
驱动主线程确定第一RPC消息为设备启动请求后,启动对应的设备节点的设备子线程;
设备子线程在启动后通过RPC服务接收第二RPC消息;
设备子线程确定第二RPC消息为设备操作请求后,对设备节点进行对应的设备操作。
在一些实施例中,驱动主线程通过RPC服务接收第一RPC消息之前,该设备驱动方法还包括:
驱动主线程注册并启动主线程RPC服务;
驱动主线程在启动主线程RPC服务后,注册一个或多个设备节点的RPC服务并将注册每个设备节点。
在一些实施例中,驱动主线程确定第一RPC消息为设备启动请求后,启动对应的设备节点的设备子线程,包括:
驱动主线程确定第一RPC消息为设备启动请求后,打开设备启动请求对应的设备节点;
驱动主线程在打开设备节点后,启动设备节点的设备子线程。
在一些实施例中,驱动主线程确定第一RPC消息为设备启动请求后,启动对应的设备节点的设备子线程,包括:
驱动主线程确定第一RPC消息为设备启动请求后,调用操作系统提供的创建线程API,以创建设备启动请求对应的设备节点的设备子线程。
在一些实施例中,该设备驱动方法还包括:
设备子线程在启动后打开对应的设备节点;
设备子线程在打开设备节点后,且确定第二RPC消息为设备操作请求后,对设备节点进行对应的设备操作。
在一些实施例中,注册一个或多个设备节点的RPC服务并将注册每个设备节点,包括:
驱动主线程扫描驱动列表,得到一个或多个设备类型以及每个设备类型对应的设备节点;
驱动主线程注册每个设备节点的RPC服务;
驱动主线程在注册每个设备节点的RPC服务后注册每个设备节点。
在一些实施例中,注册每个设备节点包括:
向第一VFS库注册每个设备节点,其中,第一VFS库为驱动主线程所在进程的VFS库;或,向PM进程注册每个设备节点。
在一些实施例中,设备启动请求由应用进程通过如下方式发送:
应用进程在第二VFS库中查找待启动的设备节点是否已注册,其中,第二VFS库为应用进程的VFS库;若未注册,则应用进程查找主线程RPC服务;
应用进程基于主线程RPC服务向驱动主线程发送设备启动请求。
在一些实施例中,应用进程查找主线程RPC服务的同时还查找待启动的设备节点的RPC服务;
应用进程接收到驱动主线程反馈的设备启动结果后,若设备启动结果为成功,则应用进程基于待启动的设备节点的RPC服务向设备子线程发送设备操作请求。
在一些实施例中,驱动主线程在PM进程中注册并启动主线程RPC服务;应用进程在PM进程中查找主线程RPC服务。
在一些实施例中,该设备驱动方法还包括:
驱动主线程确定第一RPC消息为设备关闭请求后,结束对应的设备节点的设备子线程;
驱动主线程在结束对应的设备节点的设备子线程后,关闭设备节点。
第二方面,本公开实施例还提出一种微内核架构的设备驱动装置,其中,该设备驱动装置包括:驱动主线程和设备子线程;操作系统响应启动指令而启动驱动主线程,且不启动设备子线程;
驱动主线程,用于通过RPC服务接收第一RPC消息,并确定第一RPC消息为设备启动请求后,启动对应的设备节点的设备子线程;
设备子线程,用于在启动后通过RPC服务接收第二RPC消息,并确定第二RPC消息为设备操作请求后,对设备节点进行对应的设备操作。
第三方面,本公开实施例还提出一种电子设备,包括:处理器和存储器;所述处理器通过调用所述存储器存储的程序或指令,用于执行如第一方面所述微内核架构的设备驱动方法的步骤。
第四方面,本公开实施例还提出一种非暂态计算机可读存储介质,用于存储程序或指令,所述程序或指令使计算机执行如第一方面所述微内核架构的设备驱动方法的步骤。
可见,本公开的至少一个实施例中,采用驱动主线程和设备子线程的主从线程架构模式,在操作系统启动时,仅启动驱动主线程,而不启动设备子线程,减少设备子线程对系统资源的消耗;并且,驱动主线程和设备子线程通过RPC方式提供设备驱动服务,具体地,当驱动主线程接收到的第一RPC消息为设备启动请求后,驱动主线程再启动设备节点的设备子线程,进而由设备子线程确定接收到的第二RPC消息为设备操作请求后,对设备节点进行对应的操作,解决目前的微内核架构中,应用无法直接调用设备驱动的问题。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1是宏内核的架构示意图和微内核架构示意图;
图2是本公开实施例提供的一种微内核架构的设备驱动方法的流程图;
图3是本公开实施例提供的一种启动设备子线程的流程图;
图4是本公开实施例提供的另一种启动设备子线程的流程图;
图5是本公开实施例提供的一种微内核架构的设备驱动方法的交互图;
图6是本公开实施例提供的一种微内核架构的设备驱动装置的示例性框图;
图7是本公开实施例提供的一种电子设备的示例性框图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面结合附图和实施例对本公开作进一步的详细说明。可以理解的是,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。此处所描述的具体实施例仅仅用于解释本公开,而非对本公开的限定。基于所描述的本公开的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本公开保护的范围。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
微内核是一种能够提供必要服务的操作系统内核,其中,必要服务包括但不限于任务、线程、交互进程通信(IPC,Inter-Process Communication)以及内存管理等。所有服务(包括设备驱动)运行于用户态,而处理这些服务同处理其他的任何一个程序一样,因为每个服务只是在自己的地址空间运行。
为了解决现有技术存在的至少一个问题,本公开的至少一个实施例提供了一种微内核架构的设备驱动方法、装置、电子设备和非暂态计算机可读存储介质,采用主从线程的架构模式对设备驱动加载方式及设备驱动对外提供服务的应用程序编程接口(Application Programming Interface,API)进行了详细的设计。其中,设备驱动加载包括:设备节点的RPC服务注册和设备节点的注册。设备驱动对外提供的服务包括:设备启动请求(open)、设备关闭请求(close)和设备操作请求,其中,设备操作请求包括但不限于:写请求(write)、读请求(read)、输入/输出请求(ioctl)等。
本公开的至少一个实施例中,采用驱动主线程和设备子线程的主从线程架构模式,在操作系统启动时,仅启动驱动主线程,而不启动设备子线程,减少设备子线程对系统资源的消耗;并且,驱动主线程和设备子线程通过RPC方式提供设备驱动服务,具体地,当驱动主线程接收到的第一RPC消息为设备启动请求后,驱动主线程再启动设备节点的设备子线程,进而由设备子线程确定接收到的第二RPC消息为设备操作请求后,对设备节点进行对应的操作,解决目前的微内核架构中,应用无法直接调用设备驱动的问题。
图2是本公开实施例提供的一种微内核架构的设备驱动方法的流程图。采用微内核架构的操作系统在启动时,例如操作系统接收到启动指令,启动指令例如用户按压开机按键而产生的指令,操作系统响应启动指令仅启动驱动主线程,而不启动设备子线程,减少设备子线程对操作系统软硬件资源的消耗。在一些实施例中,设备子线程可以有多个,每个设备子线程与一个设备节点对应,不论设备子线程有多少个,操作系统在启动时,均不启动这些设备子线程。
在操作系统启动驱动主线程后,在步骤201中,驱动主线程通过RPC服务接收第一RPC消息。
其中,RPC(Remote Procedure Call,远程过程调用)服务是微服务架构中不同进程之间进行交互的一种方式,虽然微服务架构中应用无法直接调用设备驱动,但是应用进程可以通过RPC方式向设备驱动所处的进程发送第一RPC消息,这样,驱动主线程可以通过RPC方式提供设备驱动服务。
在步骤202中,驱动主线程确定第一RPC消息为设备启动请求后,启动对应的设备节点的设备子线程。
驱动主线程通过RPC方式提供的设备驱动服务包括设备启动请求(open),这样,应用进程可以通过RPC方式向驱动主线程发送设备启动请求,在该设备启动请求中携带待启动的设备节点的信息。
驱动主线程确定接收到的第一RPC消息为设备启动请求后,可以基于该设备启动请求中携带的设备节点的信息,确定该设备启动请求对应的设备节点,进而启动对应的设备节点的设备子线程。
可见,设备子线程的启动是由驱动主线程来控制,当有应用进程需要使用某个设备节点时,驱动主线程才会启动该设备节点的设备子线程,这样,可以减少设备节点未被使用时,设备子线程对操作系统软硬件资源的消耗。
在步骤203中,设备子线程在启动后通过RPC服务接收第二RPC消息。
设备子线程在启动后,可以通过RPC方式提供设备驱动服务,设备驱动服务例如为设备操作请求,设备操作请求包括但不限于:写请求(write)、读请求(read)、输入/输出请求(ioctl)等。这样,应用进程可以通过RPC方式向设备子线程发送设备操作请求。
需要说明的是,设备子线程在启动后所接收的第二RPC消息均是针对该设备子线程所对应的设备节点。
在步骤204中,设备子线程确定第二RPC消息为设备操作请求后,对设备节点进行对应的设备操作。
若设备操作请求为写请求,则设备子线程对设备节点进行写操作;若设备操作请求为读请求,则设备子线程对设备节点进行写操作;若设备操作请求为输入/输出请求,则设备子线程对设备节点进行输入/输出操作。
可见,实施例中采用驱动主线程和设备子线程的主从线程架构模式,在操作系统启动时,仅启动驱动主线程,而不启动设备子线程,减少设备子线程对系统资源的消耗;并且,驱动主线程和设备子线程通过RPC方式提供设备驱动服务,具体地,当驱动主线程接收到的第一RPC消息为设备启动请求后,驱动主线程再启动设备节点的设备子线程,进而由设备子线程确定接收到的第二RPC消息为设备操作请求后,对设备节点进行对应的操作,解决目前的微内核架构中,应用无法直接调用设备驱动的问题。
在一些实施例中,驱动主线程通过RPC服务接收第一RPC消息之前,驱动主线程需要先注册并启动主线程RPC服务,进而才能通过主线程RPC服务接收第一RPC消息。
驱动主线程在注册并启动主线程RPC服务后,可以注册一个或多个设备节点的RPC服务并注册每个设备节点。在一些实施例中,驱动主线程可以扫描驱动列表,得到一个或多个设备类型以及每个设备类型对应的设备节点,进而注册每个设备节点的RPC服务并注册每个设备节点。这样,任一设备子线程在启动后可以通过该设备子线程对应的设备节点的RPC服务接收第二RPC消息。
在一些实施例中,驱动主线程确定第一RPC消息为设备启动请求后,有多种方式启动对应的设备节点的设备子线程。
例如,图3为本公开实施例提供的一种启动设备子线程的流程图。在步骤301中,驱动主线程接收设备启动请求。该步骤中,驱动主线程等待接收第一RPC消息,当驱动主线程确定接收的第一RPC消息为设备启动请求后,执行步骤302。
在步骤302中,驱动主线程打开设备启动请求对应的设备节点。该步骤中,驱动主线程可以基于设备启动请求中携带的设备节点的信息(例如设备节点的名称),确定对应的设备节点,进而打开该设备节点。在一些实施例中,驱动主线程通过将ops(操作方法)指针指向ops结构体的成员:open,也即ops->open,以打开该设备节点。
在步骤302中,驱动主线程在打开设备节点后,启动设备节点的设备子线程。由于设备子线程是在设备节点打开后才启动,因此,设备子线程在启动后可以直接通过RPC服务接收第二RPC消息。
又例如,图4为本公开实施例提供的另一种启动设备子线程的流程图。步骤401与图3中的步骤301相同,不再赘述。
在步骤402中,驱动主线程调用操作系统提供的创建线程API(),以创建设备启动请求对应的设备节点的设备子线程。本实施例中,与图3实施例不同的是,驱动主线程在接收到设备启动请求后,不是先打开设备节点再启动设备节点的设备子线程,而是直接调用创建线程API来创建设备节点的设备子线程。
在步骤403中,设备子线程在启动后打开对应的设备节点。与图3实施例不同的是,设备节点并非由驱动主线程打开,而是由设备子线程打开。具体地,设备子线通过将ops(操作方法)指针指向ops结构体的成员:open,也即ops->open,以打开该设备节点。
设备子线程在打开设备节点后,且确定第二RPC消息为设备操作请求后,对设备节点进行对应的设备操作。
在一些实施例中,驱动主线程注册每个设备节点时,可以向第一VFS(VirtualFile System,虚拟文件系统)库注册每个设备节点,其中,第一VFS库为驱动主线程所在进程的VFS库;或者,驱动主线程可以向PM(Pass Manager,路径管理)进程注册每个设备节点。
在一些实施例中,应用进程在第二VFS库中查找待启动的设备节点是否已注册,其中,第二VFS库为应用进程的VFS库;若未注册,则应用进程查找主线程RPC服务。在一些实施例中,主线程RPC服务由驱动主线程在PM进程中注册并启动,因此,应用进程在PM进程中查找主线程RPC服务,PM进程将查询结果反馈给应用进程。
应用进程查找到主线程RPC服务后,可以基于主线程RPC服务向驱动主线程发送设备启动请求。
在一些实施例中,应用进程查找主线程RPC服务的同时还可以查找待启动的设备节点的RPC服务。在一些实施例中,主线程RPC服务由驱动主线程在PM进程中注册并启动,设备节点的RPC服务也由驱动主线程在PM进程中注册,因此,应用进程在PM进程中查找主线程RPC服务以及待启动的设备节点的RPC服务,PM进程将查询结果反馈给应用进程。
应用进程接收到驱动主线程反馈的设备启动结果后,若设备启动结果为成功,则应用进程基于待启动的设备节点的RPC服务向设备子线程发送设备操作请求。
在一些实施例中,驱动主线程通过RPC方式提供的设备驱动服务包括设备关闭请求(open),这样,应用进程可以通过RPC方式向驱动主线程发送设备关闭请求,在该设备启动请求中携带待关闭的设备节点的信息或者设备启动结果,以便驱动主线程可以确定设备关闭请求对应的设备节点。
驱动主线程确定第一RPC消息为设备关闭请求后,结束对应的设备节点的设备子线程。驱动主线程在结束对应的设备节点的设备子线程后,关闭设备节点。在一些实施例中,驱动主线程通过将ops(操作方法)指针指向ops结构体的成员:close,也即ops->close,以关闭该设备节点。
结合以上各方法实施例的描述,图5是本公开实施例提供的一种微内核架构的设备驱动方法的交互图,需要说明的是,图5仅为本公开的一些实施例,而非全部实施例。
在图5中,为了便于描述,仅示出一个设备子线程,本领域技术人员可以理解,设备子线程可以有多个,且交互流程类似。
在图5中,采用微内核架构的操作系统在启动时,例如操作系统接收到启动指令,启动指令例如用户按压开机按键而产生的指令,操作系统响应启动指令仅启动驱动主线程,而不启动设备子线程,减少设备子线程对操作系统软硬件资源的消耗。
在图5中,驱动主线程启动后,在PM进程中注册并启动主线程RPC服务,并且在PM进程中注册设备节点的RPC服务以及注册设备节点。在完成以上注册工作后,驱动主线程可以等待RPC消息。
在图5中,应用进程在第二VFS库中查找待启动的设备节点是否已注册,其中,第二VFS库为应用进程的VFS库;若未注册,则应用进程在PM进程中进行RPC服务查询,RPC服务查询包括查找主线程RPC服务和待启动的设备节点的RPC服务。
PM进程将查询结果反馈给应用进程,其中,查询结果中包括:主线程RPC服务信息和待启动的设备节点的服务信息。应用进程在获取到查询结果后,基于主线程RPC服务向驱动主线程发送设备启动请求,设备启动请求中携带设备节点的信息(例如设备节点的名称)。
在图5中,驱动主线程接收到设备启动请求后,基于设备启动请求中携带的设备节点的信息,确定对应的设备节点,进而通过将ops(操作方法)指针指向ops结构体的成员:open,也即ops->open,以打开该设备节点。
驱动主线程在打开设备节点后,启动设备节点的设备子线程,并将设备启动结果反馈给应用进程。由于设备子线程是在设备节点打开后才启动,因此,设备子线程在启动后可以直接等待RPC消息。
在图5中,应用进程接收到驱动主线程反馈的设备启动结果后,若设备启动结果为成功,则应用进程基于待启动的设备节点的RPC服务向设备子线程发送设备操作请求。
设备子线程接收到设备操作请求后,对设备节点进行对应的设备操作。若设备操作请求为写请求,则设备子线程对设备节点进行写操作;若设备操作请求为读请求,则设备子线程对设备节点进行写操作;若设备操作请求为输入/输出请求,则设备子线程对设备节点进行输入/输出操作。
在图5中,应用进程可以向驱动主线程发送设备关闭请求,在该设备启动请求中携带待关闭的设备节点的信息或者设备启动结果,以便驱动主线程可以确定设备关闭请求对应的设备节点。
驱动主线程接收到设备关闭请求后,结束对应的设备节点的设备子线程。驱动主线程在结束对应的设备节点的设备子线程后,通过将ops(操作方法)指针指向ops结构体的成员:close,也即ops->close,以关闭该设备节点。
可见,图5所示的微内核架构的设备驱动方法的交互流程,采用驱动主线程和设备子线程的主从线程架构模式,在操作系统启动时,仅启动驱动主线程,而不启动设备子线程,减少设备子线程对系统资源的消耗;并且,驱动主线程和设备子线程通过RPC方式提供设备驱动服务,具体地,当驱动主线程接收到设备启动请求后,驱动主线程再启动设备节点的设备子线程,进而由设备子线程基于接收到的设备操作请求,对设备节点进行对应的操作,解决目前的微内核架构中,应用无法直接调用设备驱动的问题。
图6是本公开实施例提供的一种微内核架构的设备驱动装置,该设备驱动装置包括:驱动主线程61和设备子线程62。采用微内核架构的操作系统响应启动指令而启动驱动主线程61,且不启动设备子线程62。该设备驱动装置可以包括多个设备子线程62,每个设备子线程62与一个设备节点对应。
驱动主线程61,用于通过RPC服务接收第一RPC消息,并确定第一RPC消息为设备启动请求后,启动对应的设备节点的设备子线程62。
设备子线程62,用于在启动后通过RPC服务接收第二RPC消息,并确定第二RPC消息为设备操作请求后,对设备节点进行对应的设备操作。
在一些实施例中,驱动主线程61,还用于通过RPC服务接收第一RPC消息之前,注册并启动主线程RPC服务,并在启动主线程RPC服务后,注册一个或多个设备节点的RPC服务并将注册每个设备节点。
在一些实施例中,驱动主线程61确定第一RPC消息为设备启动请求后,启动对应的设备节点的设备子线程62,具体包括:确定第一RPC消息为设备启动请求后,打开设备启动请求对应的设备节点;在打开设备节点后,启动设备节点的设备子线程62。
在一些实施例中,驱动主线程61确定第一RPC消息为设备启动请求后,启动对应的设备节点的设备子线程62,具体包括:确定第一RPC消息为设备启动请求后,调用操作系统提供的创建线程API,以创建设备启动请求对应的设备节点的设备子线程62。
在一些实施例中,设备子线程62在启动后打开对应的设备节点,在打开设备节点后,且确定第二RPC消息为设备操作请求后,对设备节点进行对应的设备操作。
在一些实施例中,驱动主线程61注册一个或多个设备节点的RPC服务并将注册每个设备节点,具体包括:扫描驱动列表,得到一个或多个设备类型以及每个设备类型对应的设备节点;注册每个设备节点的RPC服务;并在注册每个设备节点的RPC服务后注册每个设备节点。
在一些实施例中,驱动主线程61注册每个设备节点,具体包括:向第一VFS库注册每个设备节点,其中,第一VFS库为驱动主线程所在进程的VFS库;或,向PM进程注册每个设备节点。
在一些实施例中,设备启动请求由应用进程通过如下方式发送:
应用进程在第二VFS库中查找待启动的设备节点是否已注册,其中,第二VFS库为应用进程的VFS库;若未注册,则应用进程查找主线程RPC服务;应用进程基于主线程RPC服务向驱动主线程发送设备启动请求。
在一些实施例中,应用进程查找主线程RPC服务的同时还查找待启动的设备节点的RPC服务。应用进程接收到驱动主线程反馈的设备启动结果后,若设备启动结果为成功,则应用进程基于待启动的设备节点的RPC服务向设备子线程发送设备操作请求。
在一些实施例中,驱动主线程61在PM进程中注册并启动主线程RPC服务。应用进程在PM进程中查找主线程RPC服务。
在一些实施例中,驱动主线程61还用于确定第一RPC消息为设备关闭请求后,结束对应的设备节点的设备子线程62;驱动主线程61在结束对应的设备节点的设备子线程62后,关闭设备节点。
以上各装置实施例的细节可参考各方法实例的细节,为避免重复,不再赘述。
图7是本公开实施例提供的一种电子设备的结构示意图。如图7所示,电子设备包括:至少一个处理器71、至少一个存储器72和至少一个通信接口73。电子设备中的各个组件通过总线系统74耦合在一起。通信接口73,用于与外部设备之间的信息传输。可理解地,总线系统74用于实现这些组件之间的连接通信。总线系统74除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但为了清楚说明起见,在图7中将各种总线都标为总线系统74。
可以理解,本实施例中的存储器72可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。
在一些实施方式中,存储器72存储了如下的元素,可执行单元或者数据结构,或者他们的子集,或者他们的扩展集:操作系统和应用程序。
其中,操作系统,包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础任务以及处理基于硬件的任务。应用程序,包含各种应用程序,例如媒体播放器(Media Player)、浏览器(Browser)等,用于实现各种应用任务。实现本公开实施例提供的微内核架构的设备驱动方法的程序可以包含在应用程序或操作系统中。
在本公开实施例中,处理器71通过调用存储器72存储的程序或指令,具体的,可以是应用程序中存储的程序或指令,处理器71用于执行本公开实施例提供的微内核架构的设备驱动方法各实施例的步骤。
本公开实施例提供的微内核架构的设备驱动方法可以应用于处理器71中,或者由处理器71实现。处理器71可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器71中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器71可以是通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
本公开实施例提供的微内核架构的设备驱动方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件单元组合执行完成。软件单元可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器72,处理器71读取存储器72中的信息,结合其硬件完成方法的步骤。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员能够理解,本公开实施例并不受所描述的动作顺序的限制,因为依据本公开实施例,某些步骤可以采用其他顺序或者同时进行。另外,本领域技术人员能够理解,说明书中所描述的实施例均属于可选实施例。
本公开实施例还提出一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行如微内核架构的设备驱动方法各实施例的步骤,为避免重复描述,在此不再赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本公开的范围之内并且形成不同的实施例。
本领域的技术人员能够理解,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
虽然结合附图描述了本公开的实施方式,但是本领域技术人员可以在不脱离本公开的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
Claims (12)
1.一种微内核架构的设备驱动方法,其中,操作系统响应启动指令而启动驱动主线程,且不启动设备子线程,所述方法包括:
所述驱动主线程通过RPC服务接收第一RPC消息;
所述驱动主线程确定所述第一RPC消息为设备启动请求后,启动对应的设备节点的设备子线程;
所述设备子线程在启动后通过RPC服务接收第二RPC消息;
所述设备子线程确定所述第二RPC消息为设备操作请求后,对所述设备节点进行对应的设备操作。
2.根据权利要求1所述的方法,其中,所述驱动主线程通过RPC服务接收第一RPC消息之前,所述方法还包括:
所述驱动主线程注册并启动主线程RPC服务;
所述驱动主线程在启动所述主线程RPC服务后,注册一个或多个设备节点的RPC服务并将注册每个所述设备节点。
3.根据权利要求1所述的方法,其中,所述驱动主线程确定所述第一RPC消息为设备启动请求后,启动对应的设备节点的设备子线程,包括:
所述驱动主线程确定所述第一RPC消息为设备启动请求后,打开所述设备启动请求对应的设备节点;
所述驱动主线程在打开所述设备节点后,启动所述设备节点的设备子线程。
4.根据权利要求1所述的方法,其中,所述驱动主线程确定所述第一RPC消息为设备启动请求后,启动对应的设备节点的设备子线程,包括:
所述驱动主线程确定所述第一RPC消息为设备启动请求后,调用所述操作系统提供的创建线程API,以创建所述设备启动请求对应的设备节点的设备子线程。
5.根据权利要求4所述的方法,其中,所述方法还包括:
所述设备子线程在启动后打开对应的设备节点;
所述设备子线程在打开所述设备节点后,且确定所述第二RPC消息为设备操作请求后,对所述设备节点进行对应的设备操作。
6.根据权利要求2所述的方法,其中,所述注册一个或多个设备节点的RPC服务并将注册每个所述设备节点,包括:
所述驱动主线程扫描驱动列表,得到一个或多个设备类型以及每个所述设备类型对应的设备节点;
所述驱动主线程注册每个所述设备节点的RPC服务;
所述驱动主线程在注册每个所述设备节点的RPC服务后注册每个所述设备节点。
7.根据权利要求2所述的方法,其中,所述设备启动请求由应用进程通过如下方式发送:
所述应用进程在第二VFS库中查找待启动的设备节点是否已注册,其中,所述第二VFS库为所述应用进程的VFS库;若未注册,则所述应用进程查找主线程RPC服务;
所述应用进程基于所述主线程RPC服务向所述驱动主线程发送所述设备启动请求。
8.根据权利要求7所述的方法,其中,所述应用进程查找主线程RPC服务的同时还查找所述待启动的设备节点的RPC服务;
所述应用进程接收到所述驱动主线程反馈的设备启动结果后,若所述设备启动结果为成功,则所述应用进程基于所述待启动的设备节点的RPC服务向所述设备子线程发送所述设备操作请求。
9.根据权利要求1所述的方法,其中,所述方法还包括:
所述驱动主线程确定所述第一RPC消息为设备关闭请求后,结束对应的设备节点的设备子线程;
所述驱动主线程在结束对应的设备节点的设备子线程后,关闭所述设备节点。
10.一种微内核架构的设备驱动装置,其中,所述装置包括:驱动主线程和设备子线程;操作系统响应启动指令而启动所述驱动主线程,且不启动所述设备子线程;
所述驱动主线程,用于通过RPC服务接收第一RPC消息,并确定所述第一RPC消息为设备启动请求后,启动对应的设备节点的设备子线程;
所述设备子线程,用于在启动后通过RPC服务接收第二RPC消息,并确定所述第二RPC消息为设备操作请求后,对所述设备节点进行对应的设备操作。
11.一种电子设备,包括:处理器和存储器;
所述处理器通过调用所述存储器存储的程序或指令,用于执行如权利要求1至9任一项所述方法的步骤。
12.一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行如权利要求1至9任一项所述方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110734252.7A CN115562731A (zh) | 2021-06-30 | 2021-06-30 | 微内核架构的设备驱动方法、装置、电子设备和存储介质 |
PCT/CN2022/102981 WO2023274376A1 (zh) | 2021-06-30 | 2022-06-30 | 微内核架构的设备驱动方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110734252.7A CN115562731A (zh) | 2021-06-30 | 2021-06-30 | 微内核架构的设备驱动方法、装置、电子设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115562731A true CN115562731A (zh) | 2023-01-03 |
Family
ID=84692553
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110734252.7A Pending CN115562731A (zh) | 2021-06-30 | 2021-06-30 | 微内核架构的设备驱动方法、装置、电子设备和存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN115562731A (zh) |
WO (1) | WO2023274376A1 (zh) |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3212007B2 (ja) * | 1993-04-26 | 2001-09-25 | インターナショナル・ビジネス・マシーンズ・コーポレーション | オペレーティング・システム環境の起動方法およびシステム |
CN101980170B (zh) * | 2010-10-20 | 2012-09-05 | 北京星网锐捷网络技术有限公司 | 一种微内核系统中软件模块的通信方法、系统及装置 |
CN109117253B (zh) * | 2017-06-26 | 2022-05-24 | 阿里巴巴集团控股有限公司 | 一种微内核调度的方法和装置 |
CN107368342B (zh) * | 2017-08-10 | 2020-08-14 | 北京元心科技有限公司 | 驱动硬件扩展模块的方法、装置及终端设备 |
CN110764825B (zh) * | 2018-07-27 | 2021-02-09 | 华为技术有限公司 | 一种开机方法及终端设备 |
-
2021
- 2021-06-30 CN CN202110734252.7A patent/CN115562731A/zh active Pending
-
2022
- 2022-06-30 WO PCT/CN2022/102981 patent/WO2023274376A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
WO2023274376A1 (zh) | 2023-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111176802B (zh) | 任务处理方法、装置、电子设备及存储介质 | |
RU2630171C2 (ru) | Способ начальной загрузки компьютерной системы с множеством центральных процессоров | |
US7673131B2 (en) | Booting an operating system in discrete stages | |
US8321655B2 (en) | Execution parallelism in extensible firmware interface compliant systems | |
US20050273729A1 (en) | Information processor and file processing method | |
WO2019019380A1 (zh) | 混合app的页面导航方法、装置、终端和存储介质 | |
CN113360257B (zh) | 一种基于bios的信息操作方法、装置、存储介质及设备 | |
CN113094111B (zh) | 设备以及设备的启动方法 | |
US10719347B2 (en) | Control apparatus, container starting method, and program | |
CN112698888A (zh) | 应用程序的组件化、组件调用和组件初始化方法及其装置 | |
CN113885967A (zh) | 一种小程序的启动方法、装置、设备及介质 | |
CN114047960A (zh) | 操作系统运行方法及装置、电子设备和存储介质 | |
CN111338829B (zh) | 远程过程调用服务的调用方法及装置 | |
US20110066836A1 (en) | Operating system booting method, computer, and computer program product | |
CN112925718A (zh) | 调用栈回溯方法、装置、设备和介质 | |
US11010144B2 (en) | System and method for runtime adaptable applications | |
CN110045997B (zh) | 基础功能模块的对象初始化方法、装置、设备和存储介质 | |
CN115562731A (zh) | 微内核架构的设备驱动方法、装置、电子设备和存储介质 | |
CN114764354B (zh) | 基于paas的依赖管理方法、装置、电子设备及介质 | |
WO2015184902A1 (zh) | 一种智能分屏的并发处理方法及相应的智能终端 | |
US20220365822A1 (en) | Data Processing Method and Computer Device | |
CN108829460A (zh) | 车载终端快速启动的方法、装置及车载终端 | |
CN112764822A (zh) | 操作系统启动方法、装置、设备及介质 | |
CN111143021A (zh) | 一种显示驱动加载方法、装置、芯片、主板及电子设备 | |
KR20080069453A (ko) | 실시간 운영 체제 시스템의 외부 입력 처리 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |