一种Linux PCI网卡驱动检错方法及装置转让专利

申请号 : CN201610459440.2

文献号 : CN106095687B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李航

申请人 : 西安电子科技大学

摘要 :

本发明公开了一种Linux PCI网卡驱动检错方法及装置,涉及互联网信息处理技术领域。至少可以解决现有技术中,Linux内核升级后导致原版本PCI网卡驱动出错,需要靠人工定位原有PCI网卡驱动和Linux新版本内核不匹配的地方,存在费时费力,且容易出错的问题。主要技术方案包括:扫描待升级PCI网卡驱动,获取待升级PCI网卡驱动代码;根据内核版本差异点数据库,从所述待升级PCI网卡驱动代码中获取所述待升级PCI网卡驱动的差异点;将所述待升级PCI网卡驱动的差异点发送至PCI网卡驱动开发机。

权利要求 :

1.一种Linux PCI网卡驱动检错方法,其特征在于,包括:扫描待升级PCI网卡驱动,获取待升级PCI网卡驱动代码;

根据内核版本差异点数据库,从所述待升级PCI网卡驱动代码中获取所述待升级PCI网卡驱动的差异点;

将所述待升级PCI网卡驱动的差异点发送至PCI网卡驱动开发机;

所述内核版本差异点数据库包括下列差异点中的一个或多个:PCI网卡驱动的初始化,网卡打开,收包,发包,退出;

所述根据内核版本差异点数据库,从所述待升级PCI网卡驱动代码中获取所述待升级PCI网卡驱动的差异点,包括:根据所述内核版本差异点数据库,对所述待升级PCI网卡驱动代码与所述内核版本差异点数据库进行对比检测,从中获取所述待升级PCI网卡驱动的差异点。

2.一种Linux PCI网卡驱动检错装置,其特征在于,包括:获取单元,用于扫描待升级PCI网卡驱动,获取待升级PCI网卡驱动代码;

检测单元,用于根据内核版本差异点数据库,从所述待升级PCI网卡驱动代码中获取所述待升级PCI网卡驱动的差异点;

输出单元,用于将所述待升级PCI网卡驱动的差异点发送至PCI网卡驱动开发机;

所述内核版本差异点数据库包括下列差异点中的一个或多个:PCI网卡驱动的初始化,网卡打开,收包,发包,退出;

所述检测单元具体用于:

根据所述内核版本差异点数据库,对所述待升级PCI网卡驱动代码与所述内核版本差异点数据库进行对比检测,从中获取所述待升级PCI网卡驱动的差异点。

说明书 :

一种Linux PCI网卡驱动检错方法及装置

技术领域

[0001] 本发明涉及互联网信息处理技术领域,更具体的涉及一种Linux PCI网卡驱动检错方法及装置。

背景技术

[0002] Linux是一个一体化内核(monolithic kernel)系统,Linux内的设备驱动程序可以方便地以模块化(modularize)的形式设置,并在系统运行期间可直接装载或卸载。
[0003] Linux内核版本持续升级为PCI(英文为:Peripheral Interface Controller,中文简称:单片机)网卡驱动的维护带来困难,因为每次内核版本的变化可能会带来PCI网卡驱动与Linux内核接口的变化,导致原版本下的驱动程序在新版本内核下运行出现错误。为了使原版本的驱动能在新版本的内核下正常工作,需要对错误进行修复,而此时定位原版本驱动的错误点是一件耗时费力的工作。
[0004] 目前,对于PCI网卡驱动开发检错主要围绕在针对具体某个Linux内核版本上的某个PCI网卡驱动开发错误的检测,一般通过日志记录或sandbox方式完成;而不是针对当Linux内核升级后导致原版本PCI网卡驱动出错的处理。现有技术的缺点是:i.Linux内核是不断更新的,一旦更新,需要靠人工定位原有PCI网卡驱动和Linux新版本内核不匹配的地方。如:3.10内核中队pci_driver结构中增加了sriov_configure函数指针,若原驱动中不含该函数,那么新内核调用sriov_configure就会出错。而这样的信息还需要靠人工去阅读源码解决。
[0005] 综上所述,现有针对Linux内核升级后导致原版本PCI网卡驱动出错,需要靠人工定位原有PCI网卡驱动和Linux新版本内核不匹配的地方,存在费时费力,且容易出错的问题。

发明内容

[0006] 本发明实施例提供一种Linux PCI网卡驱动检错方法及装置,至少可以解决现有技术中,针对Linux内核升级后导致原版本PCI网卡驱动出错,需要靠人工定位原有PCI网卡驱动和Linux新版本内核不匹配的地方,存在费时费力,且容易出错的问题。
[0007] 本发明实施例提供一种Linux PCI网卡驱动检错方法,所述方法包括:
[0008] 扫描待升级PCI网卡驱动,获取待升级PCI网卡驱动代码;
[0009] 根据内核版本差异点数据库,从所述待升级PCI网卡驱动代码中获取所述待升级PCI网卡驱动的差异点;
[0010] 将所述待升级PCI网卡驱动的差异点发送至PCI网卡驱动开发机。
[0011] 优选地,所述内核版本差异点数据库包括下列差异点中的一个或多个:
[0012] PCI网卡驱动的初始化,网卡打开,收包,发包,退出;
[0013] 所述根据内核版本差异点数据库,从所述待升级PCI网卡驱动代码中获取所述待升级PCI网卡驱动的差异点,包括:
[0014] 根据内核版本差异点数据库,对所述待升级PCI网卡驱动代码与所述内核版本差异点数据库进行对比检测,从中获取待升级PCI网卡驱动的差异点。
[0015] 本发明实施例还提供一种Linux PCI网卡驱动检错装置,包括:
[0016] 获取单元,用于扫描待升级PCI网卡驱动,获取待升级PCI网卡驱动代码;
[0017] 检测单元,用于根据内核版本差异点数据库,从所述待升级PCI网卡驱动代码中获取所述待升级PCI网卡驱动的差异点;
[0018] 输出单元,用于将所述待升级PCI网卡驱动的差异点发送至PCI网卡驱动开发机。
[0019] 优选地,所述内核版本差异点数据库包括下列差异点中的一个或多个:
[0020] PCI网卡驱动的初始化,网卡打开,收包,发包,退出;
[0021] 所述检测单元具体用于:
[0022] 根据内核版本差异点数据库,对所述待升级PCI网卡驱动代码与所述内核版本差异点数据库进行对比检测,从中获取待升级PCI网卡驱动的差异点。
[0023] 在本发明实施例中,提供一种Linux PCI网卡驱动检错方法及装置,包括:扫描待升级PCI网卡驱动,获取待升级PCI网卡驱动代码;根据内核版本差异点数据库,从所述待升级PCI网卡驱动代码中获取所述待升级PCI网卡驱动的差异点;将所述待升级PCI网卡驱动的差异点发送至PCI网卡驱动开发机。上述方法中,通过将待升级网卡驱动与差异点数据库进行对比,从中获取待升级网卡驱动中包括的差异点数据,然后将获取的差异点数据发送至网卡驱动开发机,解决现有需要靠人工定位原有PCI网卡驱动和Linux新版本内核不匹配的地方,由于该方法通过对比获取差异点,在提高定位速度的同时,减少了出错率。

附图说明

[0024] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0025] 图1为本发明实施例提供的一种Linux PCI网卡驱动检错方法流程示意图;
[0026] 图2为本发明实施例提供的一种Linux PCI网卡驱动检错装置结构示意图。

具体实施方式

[0027] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0028] 图1为本发明实施例提供的一种Linux PCI网卡驱动检错方法流程示意图。本发明实施例可以应用于互联网中,具体的,互联网可以包括有终端和网络侧,终端可以是手机、平板电脑、笔记本电脑等。
[0029] 如图1所示,本发明实施例提供的一种Linux PCI网卡驱动检错方法流程示意图,该方法包括以下步骤:
[0030] 步骤101,扫描待升级PCI网卡驱动,获取待升级PCI网卡驱动代码;
[0031] 步骤102,根据内核版本差异点数据库,从所述待升级PCI网卡驱动代码中获取所述待升级PCI网卡驱动的差异点;
[0032] 步骤103,将所述待升级PCI网卡驱动的差异点发送至PCI网卡驱动开发机。
[0033] 需要说明的是,本发明实施例所提供的一种Linux PCI网卡驱动检错方法,需要先连接网络,然后才能执行上述步骤。
[0034] 在步骤101中,扫描待升级PCI网卡驱动,获取待升级PCI网卡驱动代码,具体包括,PCI网卡驱动源码采集器通过预先配置好的配置信息,扫描待升级的Linux服务器,通过ftp连接,从服务器中下载PCI网卡驱动代码。
[0035] 在实际应用中,预先配置好的信息可以是Linux Server IP地址,PCI驱动源码目录。
[0036] 在步骤102中,根据内核版本差异点数据库,从所述待升级PCI网卡驱动代码中获取所述待升级PCI网卡驱动的差异点。
[0037] 在本发明实施例中,内核版本的差异点数据库主要记录以下差异点数据:
[0038] i.PCI网卡驱动的初始化;
[0039] ii.网卡打开;
[0040] iii.收包;
[0041] iv.发包;
[0042] v.退出;
[0043] vi.其它。
[0044] 需要说明的是,上述差异点数据库所包括的差异点,可以包括上述全部差异点,也可以只包括部分差异点,在本发明实施例中,对差异点数据库内包括的差异点不做具体的限定。
[0045] 具体地,根据内核版本差异点数据库,对所述待升级PCI网卡驱动代码与所述内核版本差异点数据库进行对比检测,从中获取待升级PCI网卡驱动的差异点。
[0046] 举例来说,PCI网卡驱动错误检测器检测时,首先通过扫描该网卡驱动代码,提取出这六类代码的特征点,如:Linux 2.2内核PCI网卡驱动初始化模块函数名为init_module,然后再比对差异点数据库中对应类别的代码,如(2.6.25module_init),从而检测出init_module在升级到2.6.25后不应该使用。
[0047] 在步骤103中,将所述待升级PCI网卡驱动的差异点发送至PCI网卡驱动开发机。
[0048] 本发明实施例中,通过将待升级网卡驱动与差异点数据库进行对比,从中获取待升级网卡驱动中包括的差异点数据,然后将获取的差异点数据发送至网卡驱动开发机,解决现有需要靠人工定位原有PCI网卡驱动和Linux新版本内核不匹配的地方,由于该方法通过对比获取差异点,在提高定位速度的同时,减少了出错率。
[0049] 为了清楚说明本发明实施例提供的一种Linux PCI网卡驱动检错方法,以下以Linux PCI网卡驱动检错方法为例,介绍本发明实施例提供的一种LinuxPCI网卡驱动检错方法。
[0050] Linux PCI网卡驱动检错方法实施案例:
[0051] 1、差异点数据库的内容:
[0052] 在实际应用中,PCI网卡驱动的编写用到如下4类接口:
[0053] 1)驱动与上层Linux内核对接接口:
[0054] 例如:module_init,pci_register_driver,register_netdev,net_device(注:net_device是一个数据结构,它主要提供了驱动和上层Linux内核之间对接的函数指针,因而,也认为它是一种接口)等。
[0055] 2)资源分配接口:
[0056] 例如:alloc_etherdev,request_irq,pci_alloc_consistent等[0057] 3)NAPI模式下的收发包接口:
[0058] 例如:netif_rx_schedule_prep,__netif_rx_schedule等
[0059] 4)锁接口:
[0060] 例如:spin_lock_irqsave,spin_unlock_irqrestore
[0061] 每类接口对应一张数据库表格。需要指出的是:这些接口分为4张表格进行存储,而不是放在1张表格中,是为了后续功能扩展的需要。
[0062] 现以NAPI模式下的收发报接口表为例说明差异点数据库是如何使用的:
[0063] 表1:NAPI界面表
[0064]
[0065] 如表1所示,其中,num域是对接口的编号,对于一类接口中的某个特定接口其编号唯一。name是接口名称,prototype是接口签名,它的形式是用(版本号,接口签名)的形式给出。其中NULL代表该版本下该接口不存在。
[0066] 在扫描时,PCI网卡错误检错器会提取上述数据库表格中每类接口中的每个接口名称,然后扫描PCI驱动源码,检查该版本是否用到了该接口,如果用到了,从prototype中提取出该接口中的当前版本的接口签名,以及目标版本的接口签名,如果有差异,如:若升级的目标内核版本号是:2.6.30,而当前版本号是2.6.25,驱动中使用了__netif_rx_schedule接口,而通过比对表1中的信息,可知2.6.30中没有__netif_rx_schedule接口,此时,将报错。所有的报错将形成一份报告,其格式详见下面的第4步。
[0067] 2、配置网卡驱动源码采集器的配置信息:
[0068] 1)输入Linux Server IP地址列表及PCI驱动源码目录
[0069] 例如:
[0070] 192.168.1.7
[0071] /usr/src/linux/drivers/net/pcnet32.c
[0072] 192.168.1.8
[0073] /usr/src/linux/drivers/net/pcnet32.c
[0074] 2)输入PCI驱动维护者的邮件地址
[0075] 2-1)开始扫描:
[0076] 内部实现过程:网卡驱动源码采集器将连接远程Linux服务器,下载PCI网卡驱动代码并扫描。
[0077] 扫描方法是:与内建的差异点数据库进行比对,识别出错误点。
[0078] 2-2)形成报告:
[0079] 报告是一个张表格,其表头如下表2所示:
[0080] 表2:报告表头
[0081]
[0082] 3、将报告发送到PCI驱动维护者的邮箱中。
[0083] 基于同一发明构思,本发明实施例提供了一种Linux PCI网卡驱动检错装置,由于该装置解决技术问题的原理与一种Linux PCI网卡驱动检错方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。
[0084] 图2为本发明实施例提供的一种Linux PCI网卡驱动检错装置结构示意图,如图2所示,本发明实施例提供的一种Linux PCI网卡驱动检错装置包括:获取单元201,检测单元202和输出单元203。
[0085] 获取单元201,用于扫描待升级PCI网卡驱动,获取待升级PCI网卡驱动代码;
[0086] 检测单元202,用于根据内核版本差异点数据库,从所述待升级PCI网卡驱动代码中获取所述待升级PCI网卡驱动的差异点;
[0087] 输出单元203,用于将所述待升级PCI网卡驱动的差异点发送至PCI网卡驱动开发机。
[0088] 优选地,所述内核版本差异点数据库包括下列差异点中的一个或多个:
[0089] PCI网卡驱动的初始化,网卡打开,收包,发包,退出;
[0090] 所述检测单元202具体用于:
[0091] 根据内核版本差异点数据库,对所述待升级PCI网卡驱动代码与所述内核版本差异点数据库进行对比检测,从中获取待升级PCI网卡驱动的差异点。
[0092] 应当理解,以上一种Linux PCI网卡驱动检错装置包括的单元仅为根据实现的功能进行的逻辑划分,实际应用中,可以进行上述单元的叠加或拆分。并且该实施例提供的装置所实现的功能与上述实施例提供的一种Linux PCI网卡驱动检错方法一一对应,对于该装置所实现的更为详细的处理流程,在上述方法实施例一中已做详细描述,此处不再详细描述。
[0093] 本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0094] 本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0095] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0096] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0097] 尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
[0098] 显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。