(10)申请公布号 CN 102866966 A
(43)申请公布日 2013.01.09C N  102866966 A
*CN102866966A*
(21)申请号 201210311733.8
(22)申请日 2012.08.28
G06F 13/10(2006.01)
(71)申请人大唐移动通信设备有限公司
地址100191 北京市海淀区学院路29号
(72)发明人韩毅宏
(74)专利代理机构北京润泽恒知识产权代理有
限公司 11319
代理人
赵娟
(54)发明名称
一种Linux 操作系统的设备驱动控制方法和
装置
(57)摘要
本申请提供了一种Linux 操作系统的设备驱
动控制方法和装置,其中,所述方法包括:注册总
线的操作方法集;注册设备的操作方法集,所述
设备的操作方法集包括,所述总线上挂接的各个
设备对应的操作方法集;生成数据处理请求,所
述数据处理请求中包括需访问设备的信息;获取
所述需访问设备的内部控制信息和接口总线参红帽linux系统下载iso
数;根据所述接口总线参数调用所述需访问设备
的设备操作方法集;根据所述接口总线参数调用
所述需访问设备的总线操作方法集;采用所述需
访问设备的内部控制信息,接口总线参数,以及,
对应的设备操作方法集和总线操作方法集,处理
所述数据处理请求,返回处理结果。本申请可以提
高Linux 操作系统的设备驱动可维护性、可调试
性以及稳定性。
(51)Int.Cl.
权利要求书3页  说明书14页  附图7页
(19)中华人民共和国国家知识产权局(12)发明专利申请
权利要求书 3 页  说明书 14 页  附图 7 页
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所述的装置,其特征在于,所述访问设备的接口总线参数包括,总线控制器的标识,设备所挂接的次总线设备的标识,设备的总线地址,以及,总线时序要求;所述访问设备的内部控制信息包括设备内部寄存器的信息。
1/14页
一种Linux 操作系统的设备驱动控制方法和装置技术领域
[0001]
本申请涉及Linux 操作系统的技术领域,特别是涉及一种Linux 操作系统的设备
驱动控制方法,以及,一种Linux 操作系统的设备驱动控制装置。背景技术
[0002]
Linux 操作系统,特别是其嵌入式系统,由于其源代码的可开发性、成本低廉、系统
稳定可靠以及可裁剪等特点,如今成为主流的嵌入式操作系统之一,已被广泛应用于工业制造、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类产品等众多领域。
[0003] Linux 操作系统的应用离不开处理器硬件平台,大量、复杂的需求带来了各种各样处理器外围芯片设备的广泛应用,这样不可避免地需要开发这些外围芯片的驱动。虽然Linux 操作系统本身支持一些常用的、标准的芯片设备,如常用的网口芯片、串口芯片等,但是所能支持的外围芯片种类毕竟是有限的,绝大多数的专用芯片的驱动程序是需要在Linux 操作系统的基础上进行开发的。
[0004] 由于Linux 操作系统,特别是嵌入式Linux 操作系统,大量应用的时间还不是很长,目前基于这个系统的设备驱动开发还不是很成熟,设计和开发多是为了满足小规模系统或短期产品,对于大规模系统或者长期产品来说,相关继承性和移植性较差,不能满足长期发展需要。
[0005] 参照图1,其示出了现有技术中Linux 操作系统的设备驱动开发的逻辑结构图,一般采用总线+设备+设备应用驱动架构,需要说明的是,其中所指的“设备”是指处理器外围芯片。现有技术中,在驱动开发时将设备和设备的接口总线做为一个整体进行开发,且都是在Linux 操作系统的核心层下进行开发。
[0006] 采用这种现有的Linux 操作系统的设备驱动开发的逻辑结构,同一总线如果挂接多个设备,并且
多个设备同时访问的话,总线互斥访问很难做到;同时现有技术把设备驱动开发的大部分工作都放在了Linux 核心层,使核心层功能越做越大,调试和维护也将越来越困难(核心层调试和定位很不方便),带来的潜在风险或隐患也越来越多;另一方面,设备和设备接口总线做为一个整体来开发,这样会带来可移植性和可扩展性很差,比如,相同的总线挂接了另一种设备,需要重新开发一套设备驱动,同样,相同的设备挂接在不同的总线,也需要重新开发一套设备驱动。
[0007] 再者,在传统的Linux 系统的设备驱动模型中,为了兼顾系统性能和I/O 指令的特权操作要求,设备驱动往往与操作系统内核运行在同一个地址空间,具有内核的所有权限(例如,可以直接访问所有物理内存、任意访问和操作内核其他层等)。一般而言,操作系统对运行在内核态的代码是无条件信任的,因此,设备驱动内一个小小的bug ,也将会导致一个系统范围内的故障。另外,内核态驱动编程要遵循严格的限制,驱动开发、调试以及测试的工具匮乏,很难保证Linux 系统的设备驱动的可靠性。
[0008] 综上,现有Linux 操作系统的设备驱动主要存在如下缺陷:说  明  书CN 102866966 A