CN102866966A - 一种Linux操作系统的设备驱动控制方法和装置 - Google Patents
一种Linux操作系统的设备驱动控制方法和装置 Download PDFInfo
- Publication number
- CN102866966A CN102866966A CN2012103117338A CN201210311733A CN102866966A CN 102866966 A CN102866966 A CN 102866966A CN 2012103117338 A CN2012103117338 A CN 2012103117338A CN 201210311733 A CN201210311733 A CN 201210311733A CN 102866966 A CN102866966 A CN 102866966A
- Authority
- CN
- China
- Prior art keywords
- bus
- equipment
- interface
- collection
- operation method
- 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.)
- Granted
Links
Images
Landscapes
- Bus Control (AREA)
Abstract
本申请提供了一种Linux操作系统的设备驱动控制方法和装置,其中,所述方法包括:注册总线的操作方法集;注册设备的操作方法集,所述设备的操作方法集包括,所述总线上挂接的各个设备对应的操作方法集;生成数据处理请求,所述数据处理请求中包括需访问设备的信息;获取所述需访问设备的内部控制信息和接口总线参数;根据所述接口总线参数调用所述需访问设备的设备操作方法集;根据所述接口总线参数调用所述需访问设备的总线操作方法集;采用所述需访问设备的内部控制信息,接口总线参数,以及,对应的设备操作方法集和总线操作方法集,处理所述数据处理请求,返回处理结果。本申请可以提高Linux操作系统的设备驱动可维护性、可调试性以及稳定性。
Description
技术领域
本申请涉及Linux操作系统的技术领域,特别是涉及一种Linux操作系统的设备驱动控制方法,以及,一种Linux操作系统的设备驱动控制装置。
背景技术
Linux操作系统,特别是其嵌入式系统,由于其源代码的可开发性、成本低廉、系统稳定可靠以及可裁剪等特点,如今成为主流的嵌入式操作系统之一,已被广泛应用于工业制造、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类产品等众多领域。
Linux操作系统的应用离不开处理器硬件平台,大量、复杂的需求带来了各种各样处理器外围芯片设备的广泛应用,这样不可避免地需要开发这些外围芯片的驱动。虽然Linux操作系统本身支持一些常用的、标准的芯片设备,如常用的网口芯片、串口芯片等,但是所能支持的外围芯片种类毕竟是有限的,绝大多数的专用芯片的驱动程序是需要在Linux操作系统的基础上进行开发的。
由于Linux操作系统,特别是嵌入式Linux操作系统,大量应用的时间还不是很长,目前基于这个系统的设备驱动开发还不是很成熟,设计和开发多是为了满足小规模系统或短期产品,对于大规模系统或者长期产品来说,相关继承性和移植性较差,不能满足长期发展需要。
参照图1,其示出了现有技术中Linux操作系统的设备驱动开发的逻辑结构图,一般采用总线+设备+设备应用驱动架构,需要说明的是,其中所指的“设备”是指处理器外围芯片。现有技术中,在驱动开发时将设备和设备的接口总线做为一个整体进行开发,且都是在Linux操作系统的核心层下进行开发。
采用这种现有的Linux操作系统的设备驱动开发的逻辑结构,同一总线如果挂接多个设备,并且多个设备同时访问的话,总线互斥访问很难做到;同时现有技术把设备驱动开发的大部分工作都放在了Linux核心层,使核心层功能越做越大,调试和维护也将越来越困难(核心层调试和定位很不方便),带来的潜在风险或隐患也越来越多;另一方面,设备和设备接口总线做为一个整体来开发,这样会带来可移植性和可扩展性很差,比如,相同的总线挂接了另一种设备,需要重新开发一套设备驱动,同样,相同的设备挂接在不同的总线,也需要重新开发一套设备驱动。
再者,在传统的Linux系统的设备驱动模型中,为了兼顾系统性能和I/O指令的特权操作要求,设备驱动往往与操作系统内核运行在同一个地址空间,具有内核的所有权限(例如,可以直接访问所有物理内存、任意访问和操作内核其他层等)。一般而言,操作系统对运行在内核态的代码是无条件信任的,因此,设备驱动内一个小小的bug,也将会导致一个系统范围内的故障。另外,内核态驱动编程要遵循严格的限制,驱动开发、调试以及测试的工具匮乏,很难保证Linux系统的设备驱动的可靠性。
综上,现有Linux操作系统的设备驱动主要存在如下缺陷:
1)可维护性、可调试性以及稳定性较差。
由于现有技术将大部分设备驱动开发工作放在核心层实现,将不可避免地由于调试手段缺乏带来调试不方便、异常定位困难,且很容易造成Linux操作系统的崩溃。
2)可扩展性以及可移植性较差。
由于现有技术将设备和设备接口总线做为一个整体开发,所以可扩展性和可移植性很差,将不利于系统软件的长期发展和建设。
3)同一总线多个设备同时访问互斥保护很难实现
如果同一总线多个设备同时被访问,软件的互斥保护实现困难。
因此,目前本领域技术人员迫切需要解决的一个技术问题为,创造性地提出一种Linux操作系统的设备驱动控制机制,用以提高Linux操作系统的设备驱动可维护性、可调试性以及稳定性,使Linux操作系统的设备驱动具有可扩展性以及可移植性,同时保证多个设备同时访问时的总线互斥访问。
发明内容
本申请所要解决的技术问题是提供一种Linux操作系统的设备驱动控制方法,用以提高Linux操作系统的设备驱动可维护性、可调试性以及稳定性,使Linux操作系统的设备驱动具有可扩展性以及可移植性,同时保证多个设备同时访问时的总线互斥访问。
相应的,本申请还提供了一种Linux操作系统的设备驱动控制装置,用以保证上述方法的实现及应用。
为了解决上述问题,本申请公开了一种Linux操作系统的设备驱动控制方法,包括:
注册总线的操作方法集;
注册设备的操作方法集,所述设备的操作方法集包括,所述总线上挂接的各个设备对应的操作方法集;
生成数据处理请求,所述数据处理请求中包括需访问设备的信息;
获取所述需访问设备的内部控制信息和接口总线参数;
根据所述接口总线参数调用所述需访问设备的设备操作方法集;
根据所述接口总线参数调用所述需访问设备的总线操作方法集;
采用所述需访问设备的内部控制信息,接口总线参数,以及,对应的设备操作方法集和总线操作方法集,处理所述数据处理请求,返回处理结果。
优选地,所述注册总线的操作方法集的步骤包括:
将各个总线控制器的操作方法集注册到总线注册接口中;所述总线控制器对应各条总线设置,其中,所述总线控制器的操作方法集包括:总线控制器的标识,总线的读操作方法,以及,总线的写操作方法;
所述注册设备的操作方法集的步骤包括:
将挂接在所述总线上的各个设备的操作方法集注册到设备注册接口中;其中,所述设备的操作方法集包括:设备所挂接的总线控制器的标识,设备的读操作方法,以及,设备的写操作方法。
优选地,当存在多条同类总线时,所述总线控制器的操作方法集还包括:次总线设备的个数,以及,总线的初始化操作方法;所述设备的操作方法集还包括:设备所挂接的次总线设备的标识,以及,设备的初始化操作方法。
优选地,所述根据接口总线参数调用所述需访问设备的设备操作方法集的步骤包括:
调用所述设备注册接口;
从所述设备操作方法集中查找所述接口总线参数对应的设备操作方法集;
所述根据接口总线参数调用所述需访问设备的总线操作方法集的步骤包括:
调用所述总线注册接口;
从所述总线操作方法集中查找所述接口总线参数对应的总线控制器的操作方法集。
优选地,所述访问设备的接口总线参数包括,总线控制器的标识,设备所挂接的次总线设备的标识,设备的总线地址,以及,总线时序要求;所述访问设备的内部控制信息包括设备内部寄存器的信息。
优选地,所述Linux操作系统的设备驱动包括内核态的总线级访问层、用户态的设备总线适配层、用户态的设备管理层以及用户态的产品应用层的四层结构;所述内核态为Linux操作系统的内核态,所述用户态为Linux操作系统的用户态;
所述注册总线的操作方法集的步骤,在内核态总线级访问层执行;
所述注册设备的操作方法集的步骤,在用户态总线设备适配层执行;
所述生成数据处理请求的步骤,在用户态产品应用层执行;
所述获取需访问设备的内部控制信息和接口总线参数的步骤,在用户态设备管理层执行;
所述根据接口总线参数调用所述需访问设备的设备操作方法集的步骤,在用户态设备总线适配层执行;
所述根据接口总线参数调用所述需访问设备的总线操作方法集的步骤,在内核态总线级访问层执行;
所述采用需访问设备的内部控制信息,接口总线参数,以及,对应的设备操作方法集和总线操作方法集,处理所述数据处理请求,返回处理结果的步骤,在内核态总线级访问层执行。
本申请还公开了一种Linux操作系统的设备驱动控制装置,包括:
总线级访问模块、设备总线适配模块、设备管理模块以及产品应用模块,其中,所述总线级访问模块位于Linux操作系统的内核态,所述设备总线适配模块、设备管理模块以及产品应用模块位于Linux操作系统的用户态;
其中,所述总线级访问模块包括以下子模块:
总线接口注册子模块,用于注册总线的操作方法集;
总线接口调用子模块,用于根据所述接口总线参数调用所述需访问设备的总线操作方法集;
处理子模块,用于采用所述需访问设备的内部控制信息,接口总线参数,以及,对应的设备操作方法集和总线操作方法集,处理所述数据处理请求,获得处理结果;
第一传递子模块,用于将处理结果返回给所述总线设备适配模块;
所述总线设备适配模块包括以下子模块:
设备接口注册子模块,用于注册设备的操作方法集,所述设备的操作方法集包括,所述总线上挂接的各个设备对应的操作方法集;
设备接口调用子模块,用于根据所述接口总线参数调用所述需访问设备的设备操作方法集;
第二传递子模块,用于将所述处理结果返回给设备管理模块;
所述设备管理模块包括以下子模块:
参数获取子模块,用于获取所述需访问设备的内部控制信息和接口总线参数;
第三传递子模块,用于将所述处理结果返回给产品应用模块;
所述产品应用模块包括以下子模块:
请求生成子模块,用于生成数据处理请求,所述数据处理请求中包括需访问设备的信息。
优选地,所述总线接口注册子模块进一步包括:
总线接口配置单元,用于将各个总线控制器的操作方法集注册到总线注册接口中;所述总线控制器对应各条总线设置,其中,所述总线控制器的操作方法集包括:总线控制器的标识,总线的读操作方法,以及,总线的写操作方法;
所述设备接口注册子模块进一步包括:
设备接口配置单元,用于将挂接在所述总线上的各个设备的操作方法集注册到设备注册接口中;其中,所述设备的操作方法集包括:设备所挂接的总线控制器的标识,设备的读操作方法,以及,设备的写操作方法。
优选地,当存在多条同类总线时,所述总线控制器的操作方法集还包括:次总线设备的个数,以及,总线的初始化操作方法;所述设备的操作方法集还包括:设备所挂接的次总线设备的标识,以及,设备的初始化操作方法。
优选地,所述设备接口调用子模块进一步包括:
第一注册接口调用单元,用于调用所述设备注册接口;
设备操作方法提取单元,用于从所述设备操作方法集中查找所述接口总线参数对应的设备操作方法集;
所述总线接口调用子模块进一步包括:
第二注册接口调用单元,用于调用所述总线注册接口;
总线操作方法提取单元,用于从所述总线操作方法集中查找所述接口总线参数对应的总线控制器的操作方法集。
优选地,所述访问设备的接口总线参数包括,总线控制器的标识,设备所挂接的次总线设备的标识,设备的总线地址,以及,总线时序要求;所述访问设备的内部控制信息包括设备内部寄存器的信息。
与现有技术相比,本申请包括以下优点:
1)本申请的Linux操作系统设备驱动架构将总线和设备分离,这样带来的好处是设备不随总线(包括处理器的不同)的不同而变化,扩展性和移植性较好。
2)本申请的Linux操作系统设备驱动架构将设备访问放在用户层(用户态)将总线级访问抽象出来且放于核心层实现,一方面可以屏蔽底层总线或控制器的差异,为用户层提供总线访问接口,另一方面可以使核心层(内核态)功能简单化,可以减少内核态驱动实现功能太多带来的调试、异常定位等的困难或不方便以及潜在的不稳定;同时总线作为一个独立部分,可以供多个设备同时访问,总线互斥保护能够很好地实现;而设备总线适配按照总线/设备时序通过总线访问接口来完成设备的访问,封装设备的一般读写访问接口,在用户层实现;设备管理完成设备的初始化、配置、控制等;而产品应用则根据具体产品的不同需求完成相应的接口适配。
3)本申请的Linux操作系统设备驱动架构将设备管理与产品应用分离,这种设计将避免随着不同产品对同一设备的不同需求的耦合,提高可移植性;并且,通过设计公共文件用来屏蔽不同Linux版本带来的某些系统函数或数据结构的变化以及模块公共功能,独立于各个模块,且供各个模块共同使用,从而可以提高不同Linux版本的可移植性。
附图说明
图1是现有技术中的Linux操作系统的设备驱动架构的示意图;
图2是本申请一种Linux操作系统的设备驱动架构的示意图;
图3是图2所示的Linux操作系统的设备驱动中总线级驱动设计架构的示意图;
图4是图2所示的Linux操作系统的设备驱动中PCI/PCIE总线-设备访问架构的示意图;
图5是图2所示的Linux操作系统的设备驱动中设备级驱动设计架构的示意图;
图6是图2所示的Linux操作系统的设备驱动中设备管理层架构的示意图;
图7是图2所示的Linux操作系统的设备驱动中产品应用层架构的示意图;
图8是本申请的一种Linux操作系统的设备驱动控制方法实施例的步骤流程图;
图9是本申请的一种Linux操作系统的设备驱动控制装置实施例的结构框图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
本申请的核心构思之一在于,提出一种基于总线与设备分离并跨层、设备与应用分离的Linux操作系统的设备驱动控制结构。具体而言,由于设备的接口总线决定了设备的访问方式,故据此可以将Linux操作系统的设备驱动划分为四大层,分别为总线级访问(位于核心层,即内核态)、设备总线适配、设备管理以及产品应用(位于用户层,即用户态),即形成如图2所示的总线与设备分离跨层,以及,设备管理与产品应用分离的驱动架构。
在图2中,将总线级访问抽象出来且放于核心层实现,一方面可以屏蔽底层总线或控制器的差异,为用户层提供总线访问接口,另一方面可以使内核态驱动简单清晰,同时总线作为一个独立部分,可以供多个设备同时访问,总线互斥保护能够很好地实现;而设备总线适配按照总线/设备时序通过总线访问接口来完成设备的访问,封装设备的一般读写访问接口,在用户层实现;设备管理完成设备的初始化、配置、控制等;而产品应用则根据具体产品的不同需求完成相应的接口适配。
需要说明的是,在本申请实施例中,所指“总线”包括一般的总线类型,如I2C(Inter-Integrated Circuit,两线式串行总线)、SPI(serial peripheralinterface,串行外围设备接口)、PCI(Peripheral Component Interconnect,外设部件互连标准)/PCIE(PCI express,快速PCI总线)、Local Bus(局部总线)等,还包括GPIO(General Purpose I/O,通用型输入输出)、MIIM(独立的串行接口管理)等广义的总线类型,访问设备时都要通过操作相应的设备挂接总线来完成。在本申请实施例中,所指“设备”指访问具体芯片设备,如EEPROM(电可擦可编程只读存储器),CPLD(一种用户根据各自需要而自行构造逻辑功能的数字集成电路)等。
概括而言,本申请实施例的Linux操作系统的设备驱动结构具有如下特点:
1)总线和设备分离,这样带来的好处是设备不随总线(包括处理器的不同)的不同而变化,扩展性和移植性较好。
2)设备访问放在用户层,使核心层功能简单化,可以减少内核态驱动实现功能太多带来的调试、异常定位等的困难或不方便以及潜在的不稳定;同时可以使用用户空间许多的开发工具和函数库,如gdb,glibc库等。
3)设备管理与产品应用分离,这种设计将避免随着不同产品对同一设备的不同需求的耦合,提高可移植性。
以下分别从总线级访问、设备总线适配、设备管理以及产品应用四个层面对本申请的Linux操作系统的设备驱动的内部结构进一步说明。
一、总线级访问:
参考图3所示的总线级驱动设计架构,其中,每一类总线的实现都包含Busses和Busses Core两部分功能,其中Busses负责实现和屏蔽具体不同总线控制器的差异以及访问接口,Busses Core通过调用总线访问接口,用来实现标准的字符驱动程序,其中包括为用户层提供设备文件标准接口。在实际中,如果同一块逻辑单板有多条总线/总线控制器,需要支持多个次总线设备。
公共文件用来屏蔽不同Linux操作系统的版本带来的某些系统函数或数据结构的变化以及层公共功能(如printk封装等),独立于各个层,可以提供给各个层共同使用,提高不同Linux操作系统版本的可移植性。
在Busses中每种总线控制器可以定义类似以下两个结构,用来描述该总线控制器的一些特性,例如:
参考图4所示的PCI/PCIE总线-设备访问架构,对于某些特殊的总线,如PCI/PCIE,Linux操作系统本身在初始化过程中已经完成了总线的扫描、设备空间的分配、中断的分配等工作,即这类总线不需要实现Busses内的功能,这里仅要求实现Busses Core中PCI/PCIE挂接设备的配置空间、MEM空间(存储空间)以及IO空间(输入输出空间)的一般访问接口即可,而它与具体所挂接的设备无关。在这种情况下,用户层的设备级访问可以通过给核心层PCI/PCIE总线访问传递必要的信息,如厂家ID、芯片ID等来达到访问该设备的目的。当然,核心层的总线级访问可以支持多实例或多设备访问。
二、设备总线适配:
参考图5所示的设备级驱动设计架构,Busses适配层或者公共代码完成设备文件标准接口的封装,如open、read、write以及ioctl等,同时内部实现总线互斥保护,通过这些接口,设备n将设备控制信息(如地址等信息)传递给内核态实现对设备的读写访问,并对设备管理层提供一般设备读写访问接口,不依赖于任何产品。
考虑到同一个设备在硬件设计时可能会使用不同的总线,为了做到设备管理层与具体设备所挂总线无关,本申请对此也进行了特别设计。
对于挂接在某种总线的设备,通过图5实现了这个设备的基于这种总线的特殊访问读写接口,然后将这类特殊访问读写接口注册到设备的通用访问接口中;其中,所述“注册”可以是函数指针赋值,也可以是添加到数据链表中,本申请对此不作限制。然后就可以在设备管理层使用这个通用访问接口实现对设备的初始化、配置、获取信息以及控制管理等。
在设备的访问中可以定义类似以下结构,用来描述该设备的普通访问特性,例如:
三、设备管理:
参考图6所示的设备管理层架构的示意图,通过“设备总线适配”提供的设备的一般读写访问接口,“设备管理”层可以实现设备的管理,如设备的初始化、配置、控制等。
四、产品应用:
参考图7所示的产品应用层架构的示意图,产品应用将设备管理适配到特定产品应用接口,使产品应用接口适配与设备驱动在架构和代码组织上分离。
基于图2至图7所示的Linux操作系统的设备驱动结构,参考图8,示出了本申请的一种Linux操作系统的设备驱动控制方法实施例的步骤流程图,具体可以包括以下步骤:
步骤101,注册总线的操作方法集;
所述步骤101可以在图2所示的内核态总线级访问层执行。在本申请的一种优选实施例中,所述步骤101可以为:
将各个总线控制器的操作方法集注册到总线注册接口中。
其中,所述总线控制器可以对应各条总线设置,所述总线控制器的操作方法集可以包括:总线控制器的标识,总线的读操作方法,以及,总线的写操作方法。当存在多条同类总线时,所述总线控制器的操作方法集还可以包括次总线设备的个数。当然,所述总线控制器的操作方法集的内容可由本领域技术人员按照实际情况设置,例如,还可以增加总线的初始化操作方法等,本申请对此无需加以限制。
在具体实现中,所述“注册”可以是函数指针赋值,也可以是添加到数据链表中,本申请对此不作限制。本步骤可以用于软件初始化的过程中。
结合图2,图3及说明书相关部分的说明可以得知,Busses可以实现不同总线控制器的访问接口,如以上提到的总线控制器的操作方法集busses*_adapter,这个操作方法集包括了该总线控制器的标识(名称,name)、同类总线控制器的个数(nr)、超时时间(timeout)以及该总线的读写方法busses*_algorithm,如总线的读操作方法(*read)和总线的写操方法作(*write)。
为了对用户态呈现通用的总线访问接口,所以不同的总线控制器Busses需要注册到总线的操作方法集Busses Core中,而注册的过程就是将Busses中的总线控制器的操作方法集busses*_adapter注册到总线的操作方法集busses_operation中。
总线的操作方法集busses_operation是一个节点列表或数组,每个节点对应某一种具体的总线控制器busses*_adapter,在总线控制器操作方法集的注册过程中,查找busses_operation中哪个节点空闲,就注册到该节点上。总线的操作方法集busses_operation对用户层呈现的是通用的访问接口,如read、write等接口,当用户层访问具体的总线控制器的操作方法,如*read、*write时,通过总线控制器的名称name参数在总线的操作方法集busses_operation列表或数组中查找对应的总线控制器操作方法集节点busses*_adapter中所对应的该总线的具体操作方法*read和*write。
内核态对用户态呈现的是设备文件标准接口,注册设备文件标准接口需要调用Linux操作系统函数,而该设备文件标准接口中的read、write等方法就是总线的操作方法集busses_operation中通用的操作方法read、write。
如果同一块电路板上有多条相同类型的总线控制器时,在总线操作方法集注册的过程中,通过更新busses*_adapter中的参数nr,即总线控制器的个数,来创建相应个数的次总线设备;用户态访问某一个次总线设备时,需要通知内核态该次总线设备的标识信息。
PCI/PCIE总线比较特殊,Linux操作系统在初始化过程中已经完成了总线的扫描与探测,并将扫描信息进行了记录。也就是说,通过设备的厂家ID和设备ID扫描记录的信息就可以获取到该设备所在PCI/PCIE总线地址等信息,然后通过这些总线地址等信息,就可以访问该设备。所以PCI/PCIE总线和其他总线的数据处理过程略有不同。对于这类总线不再需要Busses,只在Busses Core中提供该类总线的访问操作方法集busses_operation即可,即总线的操作方法集busses_operation中通用的操作方法read、write内部通过直接调用Linux操作系统函数来实现设备的配置空间、MEM空间以及IO空间的访问。
步骤102,注册设备的操作方法集,所述设备的操作方法集可以包括,所述总线上挂接的各个设备对应的操作方法集;
所述步骤102可以在图2所示的用户态总线设备适配层执行。在本申请的一种优选实施例中,所述步骤102可以为:
将挂接在所述总线上的各个设备的操作方法集注册到设备注册接口中。
其中,所述设备的操作方法集可以包括:设备所挂接的总线控制器的标识,设备所挂接的次总线设备的标识,设备的读操作方法,以及,设备的写操作方法。当存在多条同类总线时,所述设备的操作方法集还可以包括设备所挂接的次总线设备的标识。当然,所述设备的操作方法集的内容可由本领域技术人员按照实际情况设置,例如,还可以增加设备的初始化操作方法等,本申请对此无需加以限制。
由于相同的设备可能会挂接在不同的总线上,而为了使设备管理层和产品应用层中屏蔽掉这种差异,在用户态设备总线适配层的数据处理过程中,可以将挂接在某总线的设备的操作方法集dev*_adapter注册到设备的操作方法集dev_operation中。
其中,挂接在某总线的设备的操作方法集dev*_adapter可以包括设备所挂接的总线的名称name、设备所挂接的次总线号num以及超时时间timeout等参数,还有该总线类型的设备操作方法,如*read、*write等,而*read和*write内部可以封装设备驱动标准系统函数read、write等。
设备的操作方法集dev_operation是一个节点列表或数组,每个节点对应挂接在某一种总线的设备busses*_adapter,在设备注册过程中,查找dev_operation中哪个节点空闲,就注册到该节点上;而设备的操作方法集dev_operation对用户呈现的是通用的访问接口,如read、write等接口,当用户访问挂接在具体某一种总线上的设备*read、*write时,通过总线名称name参数在设备的操作方法集dev_operation列表或数组中查找具体对应的设备操作方法集节点dev*_adapter中所对应的该总线类型设备的具体操作方法*read和*write。
步骤103,生成数据处理请求,所述数据处理请求中包括需访问设备的信息;
所述步骤103可以在图2所示的用户态产品应用层执行。即在产品应用层会根据用户需求,生成相应的数据处理请求。需要说明的是,所述“用户需求”,并不单指实际用户发起的需求,还可以包括上层软件调用驱动形成的需求。
步骤104,获取所述需访问设备的内部控制信息和接口总线参数;
所述步骤104可以在图2所示的用户态设备管理层执行。其中,所述需访问设备的内部控制信息可以包括当前设备内部寄存器的信息,如需访问设备内部哪些寄存器的信息,所述需访问设备的内部控制信息可以从设备管理层获得。
作为本申请实施例具体应用的一种示例,所述访问设备的接口总线参数可以包括,总线控制器的标识(总线名称name),设备所挂接的次总线设备的标识,设备的总线地址,以及,总线时序要求(timeout)等;这部分参数可以由板卡的配置文件导入,也可以由板卡宏的方式定义,本申请对此不作限制。
步骤105,根据所述接口总线参数调用所述需访问设备的设备操作方法集和总线操作方法集;
所述步骤105中根据接口总线参数调用所述需访问设备的设备操作方法集可以在图2所示的用户态设备总线适配层执行;所述步骤105中根据接口总线参数调用所述需访问设备的总线操作方法集可以在图2所示的内核态总线级访问层执行。
在本申请的一种优选实施例中,所述步骤105可以包括如下子步骤:
子步骤S11,调用所述设备注册接口从所述设备操作方法集中查找所述接口总线参数对应的设备操作方法集;
子步骤S12,调用所述总线注册接口从所述总线操作方法集中查找所述接口总线参数对应的总线控制器的操作方法集。
具体而言,可以通过总线控制器的标识(总线名称name),在设备操作方法集dev_operation列表或数组中查找具体对应的设备操作方法集节点dev*_adapter中所对应的该总线类型设备的具体操作方法*read和*write,所述需访问设备的内部控制信息和接口总线参数可以通过其操作方法封装的系统函数read和write等传递给内核态的总线级访问层。由于设备操作方法集dev_operation和总线控制器的操作方法集busses*_adapter实质是函数调用的关系,因而本申请实施例中所指“传递”其实就是函数调用的关系。
设备管理层将具体设备内部控制实现,如需访问设备内部哪些寄存器等信息,通过设备操作方法集dev_operation通用访问接口的入口参数传递到设备总线适配层,设备总线适配层根据设备的接口总线参数(电路板硬件设计决定的,如总线名称name等),调用该总线类型的设备访问接口dev*_adapter,(具体就是查找dev_operation中哪个节点的名称满足要求),然后调用该节点的设备操作方法集dev*_adapter即可。
具体设备的操作方法集dev*_adapter内部会调用Linux提供的标准系统函数,如read、write等,通过这些函数的入口参数将以上信息汇总后传入内核层的总线级访问层,这种传递过程Linux叫做系统调用,也是一种函数调用关系。
步骤106,采用所述需访问设备的内部控制信息和对应的设备操作方法集,以及,所述需访问设备的接口总线参数和对应的总线操作方法集,处理所述数据处理请求,返回处理结果。
所述步骤106可以在图2所示的内核态总线级访问层执行。内核态总线级访问层获取到从用户态传递下来的述需访问设备的内部控制信息,接口总线参数,以及,对应的设备操作方法集后,通过总线操作方法集busses_operation完成数据处理请求,并返回处理结果给用户态设备总线适配层;用户态设备总线适配层获取到内核态返回的处理结果,并将它传递给向上层软件设备管理层;设备管理层获取到设备总线适配层返回的处理结果,并将它传递给向上层软件产品应用层,从而完成一次数据处理过程。
具体而言,内核态总线级访问层会获取到从用户态传递下来的接口总线参数,如总线名称name和次总线设备号,然后根据这些参数在总线操作方法集busses_operation列表或数组中查找具体对应的总线控制器操作集节点busses*_adapter中所对应的该总线的具体操作方法*read和*write;其次,从用户态还可以获取到总线上的设备参数,如设备在总线上的地址等参数,然后将这些参数传递给具体总线控制器的操作方法集*read或write,这样就可以通过总线操作命令达到访问设备的目的。
在注册标准总线设备以及创建次总线设备等过程中,要使用到Linux提供的系统函数,但是这些函数随着Linux版本的不同可能变化,在内核态数据处理过程中,使用对Linux系统函数进行封装过的公共文件,以解决Linux版本不同带来的数据处理差异。
为使本领域技术人员更好地理解本申请,以下结合图2示的Linux操作系统的设备驱动的四层结构,进一步清楚描述本申请的控制过程。
(1)在数据处理过程中,首先将总线和总线上的设备从数据处理过程中分开,并且将总线级访问在内核态处理完成,设备级访问在用户态处理完成。同时,考虑到同一设备在不同的电路板上接口总线不同,以及不同产品应用接口不同,用户态在设备总线适配、设备管理以及产品应用数据处理上也进行拆分。另外,在内核态数据处理过程中,使用对Linux系统函数进行封装过的公共文件,以解决Linux版本不同带来的数据处理差异。
(2)软件初始化过程中,内核态总线级访问层将具体总线操作busses*_adapter注册到通用总线注册接口中,这样就对用户态提供了该类总线通用的总线操作方法集busses_operation。busses_operation是一个节点列表或数组,每个节点对应某一种具体总线busses*_adapter,在总线注册过程中,查找busses_operation中哪个节点空闲,就注册到该节点上。
如果同一块电路板上有多条总线控制器时,在总线注册数据处理过程中,通过更新busses*_adapter中的参数nr,即总线控制器的个数,来创建相应个数的总线设备。
(3)软件初始化过程中,用户态总线设备适配层将具体设备操作dev*_adapter注册到通用设备注册接口中,这样就对上层软件设备管理层提供了该类设备通用的设备操作方法集dev_operation。dev_operation是一个节点列表或数组,每个节点对应某一种具体设备dev*_adapter,在设备注册过程中,查找dev_operation中哪个节点空闲,就注册到该节点。
(4)在控制管理过程中,某产品应用根据用户需求,下发请求命令给设备管理层,然后设备管理层根据用户请求,对应到具体设备内部控制实现,如需访问设备内部哪些寄存器等信息,然后将这部分信息通过通用的设备操作方法集dev_operation的入口参数传递给设备总线适配层;
(5)设备总线适配层首先根据设备的接口总线参数(电路板硬件设计决定的,如总线名称name等),调用该总线类型的设备访问接口dev*_adapter,然后将该设备内部控制信息(如需访问哪些设备内部寄存器等信息),以及设备的接口总线时序参数(如总线名称、次总线设备号、设备总线地址、总线时序要求等信息)汇总后,通过该设备的操作集dev*_adapter发送给内核态总线级访问层;
(6)内核态总线级访问层获取到从用户态传递下来的设备参数和总线参数后,首先根据总线名称name和总线号nr等信息查找通用总线操作方法集busses_operation中对应的具体的总线方法集busses*_adapter,然后通过具体总线操作方法集busses*_adapter完成访问用户的请求,并返回运行结果给用户态设备总线适配层;
(7)用户态设备总线适配层获取到内核态返回的用户请求结果,并将它传递给向上层软件设备管理层;
(8)设备管理层获取到设备总线适配层返回的用户请求结果,并将它传递给向上层软件产品应用层,从而完成一次访问过程。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和层并不一定是本申请所必须的。
参考图9,示出了本申请的一种Linux操作系统的设备驱动控制装置的结构框图,具体可以包括以下模块:
总线级访问模块81、设备总线适配模块82、设备管理模块83以及产品应用模块84,其中,所述总线级访问模块位于Linux操作系统的内核态11,所述设备总线适配模块、设备管理模块以及产品应用模块位于Linux操作系统的用户态10;
其中,所述总线级访问模块81可以包括以下子模块:
总线接口注册子模块811,用于注册总线的操作方法集;
总线接口调用子模块812,用于根据所述接口总线参数调用所述需访问设备的总线操作方法集;
处理子模块813,用于采用所述需访问设备的内部控制信息,接口总线参数,以及,对应的设备操作方法集和总线操作方法集,处理所述数据处理请求,获得处理结果;
第一传递子模块814,用于将处理结果返回给所述总线设备适配模块;
所述总线设备适配模块82可以包括以下子模块:
设备接口注册子模块821,用于注册设备的操作方法集,所述设备的操作方法集包括,所述总线上挂接的各个设备对应的操作方法集;
设备接口调用子模块822,用于根据所述接口总线参数调用所述需访问设备的设备操作方法集;
第二传递子模块823,用于将所述处理结果返回给设备管理模块;
所述设备管理模块83可以包括以下子模块:
参数获取子模块831,用于获取所述需访问设备的内部控制信息和接口总线参数;
第三传递子模块832,用于将所述处理结果返回给产品应用模块;
所述产品应用模块84包括以下子模块:
请求生成子模块841,用于生成数据处理请求,所述数据处理请求中包括需访问设备的信息。
在本申请的一种优选实施例中,所述总线接口注册子模块811可以进一步包括以下单元:
总线接口配置单元,用于将各个总线控制器的操作方法集注册到总线注册接口中;所述总线控制器对应各条总线设置,其中,所述总线控制器的操作方法集包括:总线控制器的标识,总线的读操作方法,以及,总线的写操作方法;
所述设备接口注册子模块821可以进一步包括以下单元:
设备接口配置单元,用于将挂接在所述总线上的各个设备的操作方法集注册到设备注册接口中;其中,所述设备的操作方法集包括:设备所挂接的总线控制器的标识,设备的读操作方法,以及,设备的写操作方法。
在具体实现中,当存在多条同类总线时,所述总线控制器的操作方法集还可以包括:次总线设备的个数,以及,总线的初始化操作方法;所述设备的操作方法集还可以包括:设备所挂接的次总线设备的标识,以及,设备的初始化操作方法。
在本申请的一种优选实施例中,所述设备接口调用子模块822可以进一步包括以下单元:
第一注册接口调用单元,用于调用所述设备注册接口;
设备操作方法提取单元,用于从所述设备操作方法集中查找所述接口总线参数对应的设备操作方法集;
所述总线接口调用子模块812可以进一步包括以下单元:
第二注册接口调用单元,用于调用所述总线注册接口;
总线操作方法提取单元,用于从所述总线操作方法集中查找所述接口总线参数对应的总线控制器的操作方法集。
在实际中,所述访问设备的接口总线参数可以包括,总线控制器的标识,设备所挂接的次总线设备的标识,设备的总线地址,以及,总线时序要求;所述访问设备的内部控制信息可以包括设备内部寄存器的信息。
对于图8所示装置实施例而言,由于其与图7所示的方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域内的技术人员应明白,本申请的实施例可提供为方法、装置、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本申请所提供的一种Linux操作系统的设备驱动控制方法,以及,一种Linux操作系统的设备驱动控制装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (11)
1.一种Linux操作系统的设备驱动控制方法,其特征在于,包括:
注册总线的操作方法集;
注册设备的操作方法集,所述设备的操作方法集包括,所述总线上挂接的各个设备对应的操作方法集;
生成数据处理请求,所述数据处理请求中包括需访问设备的信息;
获取所述需访问设备的内部控制信息和接口总线参数;
根据所述接口总线参数调用所述需访问设备的设备操作方法集;
根据所述接口总线参数调用所述需访问设备的总线操作方法集;
采用所述需访问设备的内部控制信息,接口总线参数,以及,对应的设备操作方法集和总线操作方法集,处理所述数据处理请求,返回处理结果。
2.根据权利要求1所述的方法,其特征在于,所述注册总线的操作方法集的步骤包括:
将各个总线控制器的操作方法集注册到总线注册接口中;所述总线控制器对应各条总线设置,其中,所述总线控制器的操作方法集包括:总线控制器的标识,总线的读操作方法,以及,总线的写操作方法;
所述注册设备的操作方法集的步骤包括:
将挂接在所述总线上的各个设备的操作方法集注册到设备注册接口中;其中,所述设备的操作方法集包括:设备所挂接的总线控制器的标识,设备的读操作方法,以及,设备的写操作方法。
3.根据权利要求2所述的方法,其特征在于,当存在多条同类总线时,所述总线控制器的操作方法集还包括:次总线设备的个数,以及,总线的初始化操作方法;所述设备的操作方法集还包括:设备所挂接的次总线设备的标识,以及,设备的初始化操作方法。
4.根据权利要求1或2或3所述的方法,其特征在于,所述根据接口总线参数调用所述需访问设备的设备操作方法集的步骤包括:
调用所述设备注册接口;
从所述设备操作方法集中查找所述接口总线参数对应的设备操作方法集;
所述根据接口总线参数调用所述需访问设备的总线操作方法集的步骤包括:
调用所述总线注册接口;
从所述总线操作方法集中查找所述接口总线参数对应的总线控制器的操作方法集。
5.根据权利要求4所述的方法,其特征在于,所述访问设备的接口总线参数包括,总线控制器的标识,设备所挂接的次总线设备的标识,设备的总线地址,以及,总线时序要求;所述访问设备的内部控制信息包括设备内部寄存器的信息。
6.根据权利要求1所述的方法,其特征在于,所述Linux操作系统的设备驱动包括内核态的总线级访问层、用户态的设备总线适配层、用户态的设备管理层以及用户态的产品应用层的四层结构;所述内核态为Linux操作系统的内核态,所述用户态为Linux操作系统的用户态;
所述注册总线的操作方法集的步骤,在内核态总线级访问层执行;
所述注册设备的操作方法集的步骤,在用户态总线设备适配层执行;
所述生成数据处理请求的步骤,在用户态产品应用层执行;
所述获取需访问设备的内部控制信息和接口总线参数的步骤,在用户态设备管理层执行;
所述根据接口总线参数调用所述需访问设备的设备操作方法集的步骤,在用户态设备总线适配层执行;
所述根据接口总线参数调用所述需访问设备的总线操作方法集的步骤,在内核态总线级访问层执行;
所述采用需访问设备的内部控制信息,接口总线参数,以及,对应的设备操作方法集和总线操作方法集,处理所述数据处理请求,返回处理结果的步骤,在内核态总线级访问层执行。
7.一种Linux操作系统的设备驱动控制装置,其特征在于,包括:
总线级访问模块、设备总线适配模块、设备管理模块以及产品应用模块,其中,所述总线级访问模块位于Linux操作系统的内核态,所述设备总线适配模块、设备管理模块以及产品应用模块位于Linux操作系统的用户态;
其中,所述总线级访问模块包括以下子模块:
总线接口注册子模块,用于注册总线的操作方法集;
总线接口调用子模块,用于根据所述接口总线参数调用所述需访问设备的总线操作方法集;
处理子模块,用于采用所述需访问设备的内部控制信息,接口总线参数,以及,对应的设备操作方法集和总线操作方法集,处理所述数据处理请求,获得处理结果;
第一传递子模块,用于将处理结果返回给所述总线设备适配模块;
所述总线设备适配模块包括以下子模块:
设备接口注册子模块,用于注册设备的操作方法集,所述设备的操作方法集包括,所述总线上挂接的各个设备对应的操作方法集;
设备接口调用子模块,用于根据所述接口总线参数调用所述需访问设备的设备操作方法集;
第二传递子模块,用于将所述处理结果返回给设备管理模块;
所述设备管理模块包括以下子模块:
参数获取子模块,用于获取所述需访问设备的内部控制信息和接口总线参数;
第三传递子模块,用于将所述处理结果返回给产品应用模块;
所述产品应用模块包括以下子模块:
请求生成子模块,用于生成数据处理请求,所述数据处理请求中包括需访问设备的信息。
8.根据权利要求7所述的装置,其特征在于,所述总线接口注册子模块进一步包括:
总线接口配置单元,用于将各个总线控制器的操作方法集注册到总线注册接口中;所述总线控制器对应各条总线设置,其中,所述总线控制器的操作方法集包括:总线控制器的标识,总线的读操作方法,以及,总线的写操作方法;
所述设备接口注册子模块进一步包括:
设备接口配置单元,用于将挂接在所述总线上的各个设备的操作方法集注册到设备注册接口中;其中,所述设备的操作方法集包括:设备所挂接的总线控制器的标识,设备的读操作方法,以及,设备的写操作方法。
9.根据权利要求8所述的装置,其特征在于,当存在多条同类总线时,所述总线控制器的操作方法集还包括:次总线设备的个数,以及,总线的初始化操作方法;所述设备的操作方法集还包括:设备所挂接的次总线设备的标识,以及,设备的初始化操作方法。
10.根据权利要求7或8或9所述的装置,其特征在于,所述设备接口调用子模块进一步包括:
第一注册接口调用单元,用于调用所述设备注册接口;
设备操作方法提取单元,用于从所述设备操作方法集中查找所述接口总线参数对应的设备操作方法集;
所述总线接口调用子模块进一步包括:
第二注册接口调用单元,用于调用所述总线注册接口;
总线操作方法提取单元,用于从所述总线操作方法集中查找所述接口总线参数对应的总线控制器的操作方法集。
11.根据权利要求10所述的装置,其特征在于,所述访问设备的接口总线参数包括,总线控制器的标识,设备所挂接的次总线设备的标识,设备的总线地址,以及,总线时序要求;所述访问设备的内部控制信息包括设备内部寄存器的信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210311733.8A CN102866966B (zh) | 2012-08-28 | 2012-08-28 | 一种Linux操作系统的设备驱动控制方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210311733.8A CN102866966B (zh) | 2012-08-28 | 2012-08-28 | 一种Linux操作系统的设备驱动控制方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102866966A true CN102866966A (zh) | 2013-01-09 |
CN102866966B CN102866966B (zh) | 2015-07-29 |
Family
ID=47445844
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210311733.8A Active CN102866966B (zh) | 2012-08-28 | 2012-08-28 | 一种Linux操作系统的设备驱动控制方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102866966B (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103853683A (zh) * | 2014-03-07 | 2014-06-11 | 山东超越数控电子有限公司 | 一种多串口数据通讯实现方法 |
CN105159696A (zh) * | 2015-07-09 | 2015-12-16 | 北京君正集成电路股份有限公司 | 一种独立于Linux内核的硬件驱动实现方法及装置 |
CN106844260A (zh) * | 2016-12-16 | 2017-06-13 | 广州致远电子股份有限公司 | 一种基于树形拓扑结构的设备管理方法 |
CN108427640A (zh) * | 2018-01-25 | 2018-08-21 | 南京翼辉信息技术有限公司 | 一种在用户态下调试驱动程序的方法 |
CN109840137A (zh) * | 2017-11-28 | 2019-06-04 | 大唐移动通信设备有限公司 | 一种操作系统移植方法和装置 |
CN110209605A (zh) * | 2019-05-31 | 2019-09-06 | 广州大学 | Pcie总线网卡的寄存器读写方法和计算设备 |
WO2020118567A1 (zh) * | 2018-12-12 | 2020-06-18 | 西安诺瓦电子科技有限公司 | 字符设备驱动方法、装置、系统和计算机可读介质 |
CN112306912A (zh) * | 2019-07-30 | 2021-02-02 | 西安诺瓦星云科技股份有限公司 | 串行接口设备驱动装置、嵌入式处理器和视频控制器 |
CN112463662A (zh) * | 2020-12-16 | 2021-03-09 | 福州创实讯联信息技术有限公司 | 一种用户态控制i2c设备的方法与终端 |
CN113778536A (zh) * | 2021-09-07 | 2021-12-10 | 浙江八达电子仪表有限公司时通电气分公司 | 一种嵌入Linux操作系统的集成式智能化操作装置 |
CN114020659A (zh) * | 2021-10-29 | 2022-02-08 | 浙江万胜智能科技股份有限公司 | 一种基于应用层驱动液晶显示的能源控制器系统 |
CN114546500A (zh) * | 2022-01-28 | 2022-05-27 | 郑州信大捷安信息技术股份有限公司 | 一种支持多设备的密码卡驱动实现方法和系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1687916A (zh) * | 2005-06-08 | 2005-10-26 | 北京飞天诚信科技有限公司 | 通用串行总线数据传输方法及其设备 |
CN1737780A (zh) * | 2004-08-19 | 2006-02-22 | 国际商业机器公司 | 从一个设备驱动程序向另一个传送信息的系统和方法 |
US20100180283A1 (en) * | 2005-12-05 | 2010-07-15 | Electronics And Telecommunications Research Institute | Method and apparatus for diagnosing operating system resources supporting usb device driver development in linux system |
-
2012
- 2012-08-28 CN CN201210311733.8A patent/CN102866966B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1737780A (zh) * | 2004-08-19 | 2006-02-22 | 国际商业机器公司 | 从一个设备驱动程序向另一个传送信息的系统和方法 |
CN1687916A (zh) * | 2005-06-08 | 2005-10-26 | 北京飞天诚信科技有限公司 | 通用串行总线数据传输方法及其设备 |
US20100180283A1 (en) * | 2005-12-05 | 2010-07-15 | Electronics And Telecommunications Research Institute | Method and apparatus for diagnosing operating system resources supporting usb device driver development in linux system |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103853683B (zh) * | 2014-03-07 | 2017-09-15 | 山东超越数控电子有限公司 | 一种多串口数据通讯实现方法 |
CN103853683A (zh) * | 2014-03-07 | 2014-06-11 | 山东超越数控电子有限公司 | 一种多串口数据通讯实现方法 |
CN105159696A (zh) * | 2015-07-09 | 2015-12-16 | 北京君正集成电路股份有限公司 | 一种独立于Linux内核的硬件驱动实现方法及装置 |
CN106844260A (zh) * | 2016-12-16 | 2017-06-13 | 广州致远电子股份有限公司 | 一种基于树形拓扑结构的设备管理方法 |
CN109840137B (zh) * | 2017-11-28 | 2021-01-22 | 大唐移动通信设备有限公司 | 一种跨核调度方法和装置 |
CN109840137A (zh) * | 2017-11-28 | 2019-06-04 | 大唐移动通信设备有限公司 | 一种操作系统移植方法和装置 |
CN108427640A (zh) * | 2018-01-25 | 2018-08-21 | 南京翼辉信息技术有限公司 | 一种在用户态下调试驱动程序的方法 |
WO2020118567A1 (zh) * | 2018-12-12 | 2020-06-18 | 西安诺瓦电子科技有限公司 | 字符设备驱动方法、装置、系统和计算机可读介质 |
CN110209605A (zh) * | 2019-05-31 | 2019-09-06 | 广州大学 | Pcie总线网卡的寄存器读写方法和计算设备 |
CN110209605B (zh) * | 2019-05-31 | 2021-09-07 | 广州大学 | Pcie总线网卡的寄存器读写方法和计算设备 |
CN112306912A (zh) * | 2019-07-30 | 2021-02-02 | 西安诺瓦星云科技股份有限公司 | 串行接口设备驱动装置、嵌入式处理器和视频控制器 |
CN112463662A (zh) * | 2020-12-16 | 2021-03-09 | 福州创实讯联信息技术有限公司 | 一种用户态控制i2c设备的方法与终端 |
CN112463662B (zh) * | 2020-12-16 | 2024-04-05 | 福州创实讯联信息技术有限公司 | 一种用户态控制i2c设备的方法与终端 |
CN113778536A (zh) * | 2021-09-07 | 2021-12-10 | 浙江八达电子仪表有限公司时通电气分公司 | 一种嵌入Linux操作系统的集成式智能化操作装置 |
CN114020659A (zh) * | 2021-10-29 | 2022-02-08 | 浙江万胜智能科技股份有限公司 | 一种基于应用层驱动液晶显示的能源控制器系统 |
CN114546500A (zh) * | 2022-01-28 | 2022-05-27 | 郑州信大捷安信息技术股份有限公司 | 一种支持多设备的密码卡驱动实现方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102866966B (zh) | 2015-07-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102866966B (zh) | 一种Linux操作系统的设备驱动控制方法和装置 | |
CN103150279B (zh) | 一种主机与基板管理控制器共享设备的方法 | |
TWI496076B (zh) | 上下文狀態管理技術 | |
CN106502930B (zh) | 基于windows平台的GPIO模拟串行接口的方法和装置 | |
US7895376B2 (en) | Hardware configuration information system, method, and computer program product | |
CN110502357A (zh) | 一种栈回溯方法、装置、介质和设备 | |
CN108304334B (zh) | 应用处理器和包括中断控制器的集成电路 | |
CN104021101A (zh) | 基于lpc1768平台的usb接口系统及实现方法 | |
US20210150325A1 (en) | Data processing method and apparatus, and related product | |
CN108062234A (zh) | 一种通过mailbox协议实现服务器主机访问BMC FLASH的系统及方法 | |
CN109754084A (zh) | 网络结构的处理方法、装置及相关产品 | |
CN100568210C (zh) | 一种用于图像处理器的pci适配器 | |
CN104750551B (zh) | 一种计算机系统及其自定义响应方法 | |
CN101356515B (zh) | 连接到多端口存储器的微处理器 | |
CN112052040A (zh) | 处理方法、装置、计算机设备和存储介质 | |
CN101281507A (zh) | Usb接口型dsp实时仿真开发系统 | |
CN109710322A (zh) | 通信设备复位方法、装置及系统 | |
US7680909B2 (en) | Method for configuration of a processing unit | |
CN105095149A (zh) | 一种片上系统参数的批处理方法和装置 | |
CN112073505B (zh) | 在云服务器上进行卸载的方法、控制装置、存储介质 | |
US11392406B1 (en) | Alternative interrupt reporting channels for microcontroller access devices | |
CN105117370B (zh) | 一种多协议密码算法处理器及片上系统 | |
Yu et al. | Transaction level platform modeling in systemc for multi-processor designs | |
WO2017180207A1 (en) | Hardware-assisted garbage collection | |
CN108733678B (zh) | 一种数据搜索的方法、装置和相关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |