
一种Linux操作系统的设备驱动控制方法和装置的制作方法.docx
5页一种Linux操作系统的设备驱动控制方法和装置的制作方法专利名称:一种Linux操作系统的设备驱动控制方法和装置的制作方法技术领域:本申请涉及Linux操作系统的技术领域,特别是涉及ー种Linux操作系统的设备驱动控制方法,以及,ー种Linux操作系统的设备驱动控制装置背景技术:Linux操作系统,特别是其嵌入式系统,由于其源代码的可开发性、成本低廉、系统稳定可靠以及可裁剪等特点,如今成为主流的嵌入式操作系统之一,已被广泛应用于エ业制造、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类产品等众多领域Linux操作系统的应用离不开处理器硬件平台,大量、复杂的需求带来了各种各样处理器外围芯片设备的广泛应用,这样不可避免地需要开发这些外围芯片的驱动虽然Linux操作系统本身支持ー些常用的、标准的芯片设备,如常用的网ロ芯片、串ロ芯片等,但是所能支持的外围芯片种类毕竟是有限的,绝大多数的专用芯片的驱动程序是需要在Linux操作系统的基础上进行开发的由于Linux操作系统,特别是嵌入式Linux操作系统,大量应用的时间还不是很长,目前基于这个系统的设备驱动开发还不是很成熟,设计和开发多是为了满足小規模系统或短期产品,对于大規模系统或者长期产品来说,相关继承性和移植性较差,不能满足长期发展需要。
參照图1,其示出了现有技术中Linux操作系统的设备驱动开发的逻辑结构图,一般采用总线+设备+设备应用驱动架构,需要说明的是,其中所指的“设备”是指处理器外围芯片现有技术中,在驱动开发时将设备和设备的接ロ总线做为ー个整体进行开发,且都是在Linux操作系统的核心层下进行开发采用这种现有的Linux操作系统的设备驱动开发的逻辑结构,同一总线如果挂接多个设备,并且多个设备同时访问的话,总线互斥访问很难做到;同时现有技术把设备驱动开发的大部分工作都放在了 Linux核心层,使核心层功能越做越大,调试和维护也将越来越困难(核心层调试和定位很不方便),带来的潜在风险或隐患也越来越多;另一方面,设备和设备接ロ总线做为ー个整体来开发,这样会带来可移植性和可扩展性很差,比如,相同的总线挂接了另ー种设备,需要重新开发ー套设备驱动,同样,相同的设备挂接在不同的总线,也需要重新开发ー套设备驱动再者,在传统的Linux系统的设备驱动ホ吴型中,为了兼顾系统性能和I/O指令的特权操作要求,设备驱动往往与操作系统内核运行在同一个地址空间,具有内核的所有权限(例如,可以直接访问所有物理内存、任意访问和操作内核其他层等)。
一般而言,操作系统对运行在内核态的代码是无条件信任的,因此,设备驱动内ー个小小的bug,也将会导致一个系统范围内的故障另外,内核态驱动编程要遵循严格的限制,驱动开发、调试以及测试的工具匮乏,很难保证Linux系统的设备驱动的可靠性综上,现有Linux操作系统的设备驱动主要存在如下缺陷I)可维护性、可调试性以及稳定性较差由于现有技术将大部分设备驱动开发工作放在核心层实现,将不可避免地由于调试手段缺乏带来调试不方便、异常定位困难,且很容易造成Linux操作系统的崩溃2)可扩展性以及可移植性较差由于现有技术将设备和设备接ロ总线做为ー个整体开发,所以可扩展性和可移植性很差,将不利于系统软件的长期发展和建设3)同一总线多个设备同时访问互斥保护很难实现如果同一总线多个设备同时被访问,软件的互斥保护实现困难因此,目前本领域技术人员迫切需要解决的ー个技术问题为,创造性地提出ー种Linux操作系统的设备驱动控制机制,用以提高Linux操作系统的设备驱动可维护性、可调·试性以及稳定性,使Linux操作系统的设备驱动具有可扩展性以及可移植性,同时保证多个设备同时访问时的总线互斥访问发明内容本申请所要解决的技术问题是提供ー种Linux操作系统的设备驱动控制方法,用以提高Linux操作系统的设备驱动可维护性、可调试性以及稳定性,使Linux操作系统的设备驱动具有可扩展性以及可移植性,同时保证多个设备同时访问时的总线互斥访问。
相应的,本申请还提供了ー种Linux操作系统的设备驱动控制装置,用以保证上述方法的实现及应用为了解决上述问题,本申请公开了ー种Linux操作系统的设备驱动控制方法,包括注册总线的操作方法集;注册设备的操作方法集,所述设备的操作方法集包括,所述总线上挂接的各个设备对应的操作方法集;生成数据处理请求,所述数据处理请求中包括需访问设备的信息;获取所述需访问设备的内部控制信息和接ロ总线參数;根据所述接ロ总线參数调用所述需访问设备的设备操作方法集;根据所述接ロ总线參数调用所述需访问设备的总线操作方法集;采用所述需访问设备的内部控制信息,接ロ总线參数,以及,对应的设备操作方法集和总线操作方法集,处理所述数据处理请求,返回处理結果优选地,所述注册总线的操作方法集的步骤包括将各个总线控制器的操作方法集注册到总线注册接口中;所述总线控制器对应各条总线设置,其中,所述总线控制器的操作方法集包括总线控制器的标识,总线的读操作方法,以及,总线的写操作方法;所述注册设备的操作方法集的步骤包括将挂接在所述总线上的各个设备的操作方法集注册到设备注册接口中;其中,所述设备的操作方法集包括设备所挂接的总线控制器的标识,设备的读操作方法,以及,设备的写操作方法。
优选地,当存在多条同类总线时,所述总线控制器的操作方法集还包括次总线设备的个数,以及,总线的初始化操作方法;所述设备的操作方法集还包括设备所挂接的次总线设备的标识,以及,设备的初始化操作方法优选地,所述根据接ロ总线參数调用所述需访问设备的设备操作方法集的步骤包括 调用所述设备注册接ロ ;从所述设备操作方法集中查找所述接ロ总线參数对应的设备操作方法集;所述根据接ロ总线參数调用所述需访问设备的总线操作方法集的步骤包括调用所述总线注册接ロ ;从所述总线操作方法集中查找所述接ロ总线參数对应的总线控制器的操作方法集优选地,所述访问设备的接ロ总线參数包括,总线控制器的标识,设备所挂接的次总线设备的标识,设备的总线地址,以及,总线时序要求;所述访问设备的内部控制信息包括设备内部寄存器的信息优选地,所述Linux操作系统的设备驱动包括内核态的总线级访问层、用户态的设备总线适配层、用户态的设备管理层以及用户态的产品应用层的四层结构;所述内核态为Linux操作系统的内核态,所述用户态为Linux操作系统的用户态;所述注册总线的操作方法集的步骤,在内核态总线级访问层执行;所述注册设备的操作方法集的步骤,在用户态总线设备适配层执行;所述生成数据处理请求的步骤,在用户态产品应用层执行;所述获取需访问设备的内部控制信息和接ロ总线參数的步骤,在用户态设备管理层执行;所述根据接ロ总线參数调用所述需访问设备的设备操作方法集的步骤,在用户态设备总线适配层执行;所述根据接ロ总线參数调用所述需访问设备的总线操作方法集的步骤,在内核态总线级访问层执行;所述采用需访问设备的内部控制信息,接ロ总线參数,以及,对应的设备操作方法集和总线操作方法集,处理所述数据处理请求,返回处理结果的步骤,在内核态总线级访问层执行。
本申请还公开了ー种Linux操作系统的设备驱动控制装置,包括总线级访问模块、设备总线适配模块、设备管理模块以及产品应用模块,其中,所述总线级访问模块位于Linux操作系统的内核态,所述设备总线适配模块、设备管理模块以及产品应用模块位于Linux操作系统的用户态;其中,所述总线级访问模块包括以下子模块总线接ロ注册子模块,用于注册总线的操作方法集;总线接ロ调用子模块,用于根据所述接ロ总线參数调用所述需访问设备的总线操作方法集;处理子模块,用于采用所述需访问设备的内部控制信息,接ロ总线參数,以及,对应的设备操作方法集和总线操作方法集,处理所述数据处理请求,获得处理结果;第一传递子模块,用于将处理结果返回给所述总线设备适配模块;所述总线设备适配模块包括以下子模块设备接ロ注册子模块,用于注册设备的操作方法集,所述设备的操作方法集包括,所述总线上挂接的各个设备对应的操作方法集;设备接ロ调用子模块,用于根据所述接ロ总线參数调用所述需访问设备的设备操作方法集;第二传递子模块,用于将所述处理结果返回给设备管理模块;所述设备管理模块包括以下子模块參数获取子模块,用于获取所述需访问设备的内部控制信息和接ロ总线參数;第三传递子模块,用于将所述处理结果返回给产品应用模块; 所述产品应用模块包括以下子模块请求生成子模块,用于生成数据处理请求,所述数据处理请求中包括需访问设备的信息。
优选地,所述总线接ロ注册子模块进一歩包括总线接ロ配置単元,用于将各个总线控制器的操作方法集注册到总线注册接ロ中;所述总线控制器对应各条总线设置,其中,所述总线控制器的操作方法集包括总线控制器的标识,总线的读操作方法,以及,总线的写操作方法;所述设备接ロ注册子模块进一歩包括设备接ロ配置単元,用于将挂接在所述总线上的各个设备的操作方法集注册到设备注册接口中;其中,所述设备的操作方法集包括设备所挂接的总线控制器的标识,设备的读操作方法,以及,设备的写操作方法优选地,当存在多条同类总线时,所述总线控制器的操作方法集还包括次总线设备的个数,以及,总线的初始化操作方法;所述设备的操作方法集还包括设备所挂接的次总线设备的标识,以及,设备的初始化操作方法优选地,所述设备接ロ调用子模块进一歩包括第一注册接ロ调用单元,用于调用所述设备注册接ロ ;设备操作方法提取单元,用于从所述设备操作方法集中查找所述接ロ总线參数对应的设备操作方法集;所述总线接ロ调用子模块进一歩包括第二注册接ロ调用单元,用于调用所述总线注册接ロ ;总线操作方法提取单元,用于从所述总线操作方法集中查找所述接ロ总线參数对应的总线控制器的操作方法集。
优选地,所述访问设备的接ロ总线參数包括,总线控制器的标识,设备所挂接的次总线设备的标识,设备的总线地址,以及,总线时序要求;所述访问设备的内部控制信息包括设备内部寄存器的信息与现有技术相比,本申请包括以下优点I)本申请的Linux操作系统设备驱动架构将总线和设备分离,这样带来的好处是设备不随总线(包括处理器的不同)的不同而变化,扩展性和移植性较好2)本申请的Linux操作系统设备驱动架构将设备访问放在用户层(用户态)将总线级访问抽象出来且放于核心层实现,一方面可以屏蔽底层总线或控制器的差异,为用户层提供总线访问接ロ,另ー方面可以使核心层(内核态)功能简单化,可以减少内核态驱动实现功能太多带来的调试、异常定位等的困难或不方便以及潜在的不稳定;同时总线作为ー个独立部分,可以供多个设备同时访问,总线互斥保护能够很好地实现;而设备总线适配按照总线/设备时序通过总线访问接ロ来完成设备的访问,封装设备的一般读写访问接ロ,在用户层实现;设备管理完成设备的初始化、配置、控制等;而产品应用则根据具体产品的不同需求完成相应的接ロ适配3)本申请的Linux操作系统设备驱动架构将设备管理与产品应用分离,这种设计将避免随着不同产品对同一设备的不同需求的耦合,提高可移植性;并且,通过设计公共文件用来屏蔽不同Linux版本带来的某些系统函数或数据结构的变化以及模块公共功能,独立于各个模块,且供各个模块共同使用,从而可以提高不同Linux版本的可移植性。
图I是现有技术中的Linux操作系统的设备驱动架构的示意图;图2是本申请ー种Linux操作系统的设备驱动架构的示意图;图3是图2所示的Linux操作系统的设备驱动中总线级驱动设计架构的示意图;图4是图2所示的Linux操作系统的设备驱动中PCI/PCIE总线-设备访问架构的不意图;图5是图2所示的Linux操作系统的设备驱动中设备级驱动设计架构的示意图;图6是图2所示的Linux操作系统的设备驱动中设备管理层架构的示意图;图7是图2所示的Linux操作系统的设备驱动中产品应用层架构的示意图;图8是本申请的ー种Linux操作系统的设备驱动控制方法实施例的步骤流程图;图9是本申请的ー种Linux操作系统的设备。












