一种基于Linux内核的用户态网卡自动探测方法

文档序号:6401756阅读:474来源:国知局
专利名称:一种基于Linux内核的用户态网卡自动探测方法
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于Linux内核的用户态网卡自动探测方法。
背景技术
在计算机中除CPU外的其它外装硬件设备是实现更多功能的工具,因而驱动程序在系统中所占的地位十分重要,一般当操作系统安装完毕后,还要安装硬件设备的驱动程序,如声卡、显卡、网卡等硬件设备,因为这些硬件设备的驱动无法集成在操作系统内,就需要另外安装驱动程序。在Linux系统中设备驱动分为用户态驱动和内核态驱动,其中用户态和内核态在系统中的结构与功能如图1所示。当一个任务(进程)执行系统调用而陷入内核代码中执行时,就称进程处于内核态,此时处理器处于特权级最高的(O级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称进程处于用户态,即此时处理器在特权级最低的(3级)用户代码中运行。用系统调用时进入内核态,Linux对硬件的操作只能在内核态,可以通过写驱动程序来控制,在用户态操作硬件会造成存储器清除。一般情况,系统调用运行在核心态,函数运行在用户态。目前对于网卡的用户态驱动加载已经屡见不鲜,其中一种方法是将网卡驱动编译进内核,在内核初始化驱动时将与驱动匹配的网卡设备信息保存,然后返回不再初始化网卡,在用户态初始化网卡时获取内核阶段保存的设备信息进行驱动加载,实现网卡的用户态自动探测及驱动加载。但是现有技术中还存在如下缺点:需要修改内核;需要提供在用户态无法直接调用的接口 ;使用Iinux中的标准接口定义,通过设备ioctl的方法对内核函数进行调用,这类接口的特点是如果频繁调用会影响性能,与内 核强相关且修改较多,不够灵便。

发明内容
(一)要解决的技术问题针对上述缺陷,本发明要解决的技术问题是如何能够减少对Linux内核的修改,对用户态网卡驱动实现如Linux内核一样的自动探测和加载。(二)技术方案为解决上述问题,本发明提供了一种基于Linux内核的用户态网卡自动探测方法,所述方法具体包括:S1:以文件形式保存Linux内核探测到的所有PCI设备的设备信息;S2:从所述所有PCI设备的设备信息中提取出网卡的设备信息;S3:保存所述网卡的设备信息,以供用户态初始化网卡驱动使用。进一步地,所述步骤SI具体包括:
Sll:在Linux内核启动过程中,执行添加的脚本,通过Linux命令挂载硬件设备中的存储设备,其中所述添加的脚本是启动Linux内核前预先编写完成的;S12:在所述步骤Sll中挂载的存储设备中通过Linux命令创建目录;S13:通过Linux指令将所述所有PCI设备的设备信息保存在所述目录下。进一步地,所述PCI设备的设备信息包括:总线编号、设备编号、功能编号、设备类别码、设备卖家ID号和设备类型。进一步地,所述步骤S2之前还包括:在用户态程序中以文件形式打开所述步骤SI中保存的PCI设备的设备信息。进一步地,所述步骤S2提取出网卡的设备信息具体包括:根据所述设备信息中的设备类别码在所述所有PCI设备中查找出网卡,并去提取网卡的其它设备信息。(三)有益效果本发明提供了一种基于Linux内核的用户态网卡自动探测方法,通过将内核探测到的所有PCI设备的设备信息,以文件形式保存,并在用户态驱动加载时打开该保存文件,从中提取出网卡的设备信息,对于用户态网卡实现自动探测、自动获取网卡信息,对内核只需做少量修改,可以避免多次修改内核影响设备性能,简单易行,提高操作系统的可靠性。


图1为用户态和内核态结构示意图;图2为本发明实施例中的一种基于Linux内核的用户态网卡自动探测方法的步骤流程 图3为本发明实施例中的一种基于Linux内核的用户态网卡自动探测方法中步骤SI的步骤流程图。
具体实施例方式下面结合附图和实施例,对本发明的具体实施方式
作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。本发明实施例中提供了一种基于Linux内核的用户态网卡自动探测方法,步骤流程如图2所示,具体包括以下步骤:步骤SI:以文件形式保存Linux内核探测到的所有PCI设备的设备信息。其中PCI设备的设备信息包括:总线编号、设备编号、功能编号、设备类别码、设备卖家ID号和设备类型。步骤SI的步骤流程如图3所示,具体包括以下步骤:步骤Sll:在Linux内核启动过程中,执行添加的脚本,通过Linux命令挂载硬件设备中的存储设备。其中添加的脚本是启动Linux内核前预先编写完成的,只是在启动Linux内核后才执行。步骤S12:在步骤Sll中挂载的存储设备中通过Linux命令创建目录。步骤S13:通过Linux指令将所有PCI设备的设备信息保存在目录下。

在Linux系统中使用Ispci指令来显示系统中所有PCI总线设备或连接在该总线上所有设备,如声卡、网卡等。一般输入Ispci指令后得到的显示格式为:00:19.0Class0200:8086:10ef 网卡设备00:10.lClass0880:8086:dl58 其他设备其中第一行的网卡设备信息具体含义为:00:19.0分别表示设备的总线编号、设备编号、功能编号;0200就是网卡的设备类别码;8086是intel的venID (设备卖家ID号);10ef就是Devid (设备类型)。同理第二行是其它PCI设备的设备信息。在Linux内核启动过程中,只需要添加一个小小脚本,在脚本中挂载(mount)硬件设备中的存储设备(如FLASH卡、CF卡),然后执行lspci>/cfcard/pcidev,将Ispci显示的设备信息以pcidev文件形式保存在挂载的存储设备目录下,这样就保存到了内核探测到的所有PCI设备信息。步骤S2:从所有PCI设备的设备信息中提取出网卡的设备信息。步骤S2之前还包括:在用户态程序中以文件形式打开步骤SI中保存的PCI设备的设备信息,对应的执行语句为:open ( ”/cfcard/pcidev”, O)。步骤S2提取出网卡的设备信息具体包括:根据设备信息中的设备类别码(ClassCode>0x0200在所有PCI设备中查找出网卡,并去提取网卡的其它设备信息,即根据网卡设备类别码0200提取出相应的总线 编号、设备编号、功能编号、设备卖家ID号和设备类型。步骤S3:保存网卡的设备信息,以供用户态初始化网卡驱动使用。将步骤S2中提取出来的网卡的设备信息保存起来(如保存到全局变量中),以实现需要的时候对网卡的用户态驱动实现自动探测和加载。通过上述方法,通过将内核探测到的所有PCI设备的设备信息,以文件形式保存,并在用户态驱动加载时打开该保存文件,从中提取出网卡的设备信息,对于用户态网卡实现自动探测、自动获取网卡信息,对内核只需做少量修改,可以避免多次修改内核影响设备性能,简单易行,提高操作系统的可靠性。以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
权利要求
1.一种基于Linux内核的用户态网卡自动探测方法,其特征在于,所述方法具体包括: 51:以文件形式保存Linux内核探测到的所有PCI设备的设备信息; 52:从所述所有PCI设备的设备信息中提取出网卡的设备信息; 53:保存所述网卡的设备信息,以供用户态初始化网卡驱动使用。
2.如权利要求1所述的方法,其特征在于,所述步骤SI具体包括: 511:在Linux内核启动过程中,执行添加的脚本,通过Linux命令挂载硬件设备中的存储设备,其中所述添加的脚本是启动Linux内核前预先编写完成的; 512:在所述步骤Sll中挂载的存储设备中通过Linux命令创建目录; 513:通过Linux指令将所述所有PCI设备的设备信息保存在所述目录下。
3.如权利要求1所述的方法,其特征在于,所述PCI设备的设备信息包括:总线编号、设备编号、功能编号、设备类别码、设备卖家ID号和设备类型。
4.如权利要求1所述的方法,其特征在于,所述步骤S2之前还包括:在用户态程序中以文件形式打开所述步骤SI中保存的PCI设备的设备信息。
5.如权利要求1或3所述的方法,其特征在于,所述步骤S2提取出网卡的设备信息具体包括:根据所述设备信息中的设备类别码在所述所有PCI设备中查找出网卡,并去提取网卡的其它设备信息 。
全文摘要
本发明公开了一种基于Linux内核的用户态网卡自动探测方法,保存Linux内核探测到的所有PCI设备的设备信息,从所有PCI设备的设备信息中提取出网卡的设备信息,保存网卡的设备信息,以供用户态初始化网卡驱动使用。本发明通过将内核探测到的所有PCI设备的设备信息,以文件形式保存,并在用户态驱动加载时打开该保存文件,从中提取出网卡的设备信息,对于用户态网卡实现自动探测、自动获取网卡信息,对内核只需做少量修改,可以避免多次修改内核影响设备性能,简单易行,提高操作系统的可靠性。
文档编号G06F11/34GK103246594SQ20131011979
公开日2013年8月14日 申请日期2013年4月8日 优先权日2013年4月8日
发明者高福亮, 李鹏 申请人:汉柏科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1