本发明涉及一种自动更新linux系统所有外插卡设备驱动的方法,具体是说一种基于shell/python语言的自动更新linux下所有外插卡设备驱动的方法,属于计算机技术领域。
背景技术:
驱动程序是一种可以使计算机和硬件设备通信的特殊程序,其运行在操作系统的内核,相当于操作系统到硬件设备的接口,把硬件设备功能告诉操作系统,并且也将操作系统的指令传达给硬件设备。操作系统通过驱动程序这个接口可以控制硬件设备的工作,假如某硬件设备的驱动程序未能正确安装,便不能正常工作。驱动程序的安装是将一小块代码添加到操作系统中,其中包含有关设备信息等等信息数据。有了这些信息,操作系统就可以与硬件设备进行通信。
鉴于安全性,实验性、项目开发等原因,当前仍有大量的服务器不会接入互联网来进行工作。在这种情况下,服务器中外插pcie设备的驱动更新就会比较麻烦。
手动更新驱动时,首先要确定当前系统下驱动版本是否为最新,还需要确定所用服务器机型,linux系统的release等。如果系统还有多张外插卡的话,人员所耗费的人力会成倍的增加。
技术实现要素:
针对上述不足,本发明提供了一种自动更新linux系统所有外插卡设备驱动的方法,其能够自动更新当前linux系统所有外插卡设备的驱动版本,以达到节省测试时间和人力的目的。
本发明解决其技术问题采取的技术方案是:
本发明提供的一种自动更新linux系统所有外插卡设备驱动的方法,其特征是,首先提取系统信息并更新系统驱动版本库,然后判断当前驱动版本是否为最新,最后确定当前机型及os版本并进行驱动程序升级。
进一步地,所述系统信息通过shell脚本进行提取,所述系统驱动版本库采用python语言建立,当前驱动版本是否为最新采用python语言判断,所述驱动版本采用shell脚本进行确定当前机型及os版本并进行升级。
进一步地,所述方法包括以下具体步骤:
1)检测当前外插卡信息和驱动模块信息;
2)确定当前系统驱动版本信息与对应驱动版本库驱动信息并判断是否进行驱动最新;
3)根据机型、os版本、外插卡信息选择对应的最新驱动程序更新已安装驱动程序。
进一步地,所述步骤1)包括以下具体步骤:
11)获取外插卡信息与pci插槽的对应列表;
12)获取每个外插卡信息;
13)获取pci设备总线信息;
14)获取每个外插卡对应的pci插槽的pci编号和驱动模块信息;
15)获取每个外插卡的当前驱动版本信息和最新驱动版本信息并存储到系统驱动版本库。
进一步地,所述步骤2)包括以下具体步骤:
21)获取外插卡的当前驱动版本;
22)从当前驱动版本信息中提取机型、os版本和驱动类型参数;
23)查询系统驱动版本库中该外插卡对应的最新驱动版本;
24)判断当前驱动版本的版本号与最新驱动版本的版本号的大小,如果当前驱动版本低于最新驱动版本则确定该外插卡驱动需要升级并转入下一步;如果当前驱动版本高于最新驱动版本则将系统驱动版本库中该外插卡对应的最新驱动版本更新为当前驱动版本;
25)获取该外插卡对应的最新驱动程序。
进一步地,所述步骤3)包括以下具体步骤:
31)检测linux系统的机型、os类型和os版本号;
32)下载外插卡对应的最新驱动程序;
33)执行自动安装脚本进行更新外插卡最新驱动程序。
进一步地,所述系统驱动版本库包括linux系统的机型、os类型、os版本号和外插卡驱动模块,所述os类型包括但不限于redhat、centos、suse和ubuntu中的一种或多种,所述外插卡驱动模块包括但不限于igb、ixgb、qla2xxx和lpfc中的一种或多种。
本发明提供的另一种自动更新linux系统所有外插卡设备驱动的方法,其特征是,进行更新外插卡设备驱动前需要进行系统驱动版本库设计和驱动包安装包存储结构设计,所述方法包括以下步骤:
1)为每个驱动程序编写自动安装shell脚本;
2)扫描外插卡设备并检测驱动模块;
3)获取当前驱动版本和最新驱动版本;
4)如果当前驱动版本低于最新驱动版本则从系统驱动版本库中选择最新驱动程序并进行自动安装,否则直接进入下一步;
5)如果所有外插卡设备检测完成则进入下一步,否则转入步骤2)继续检测其它外插卡设备;
6)完成所有外插卡设备驱动更新,并重启系统。
进一步地,所述系统驱动版本库包括linux系统的机型、os类型、os版本号和外插卡驱动模块,所述os类型包括但不限于redhat、centos、suse和ubuntu中的一种或多种,所述外插卡驱动模块包括但不限于igb、ixgb、qla2xxx和lpfc中的一种或多种。
进一步地,所述扫描外插卡设备并检测驱动模块的过程包括以下具体步骤:
11)获取外插卡信息与pci插槽的对应列表;
12)获取每个外插卡信息;
13)获取pci设备总线信息;
14)获取每个外插卡对应的pci插槽的pci编号和驱动模块信息;
15)获取每个外插卡的当前驱动版本信息和最新驱动版本信息并存储到系统驱动版本库;
所述获取当前驱动版本和最新驱动版本的过程包括以下具体步骤:
21)获取外插卡的当前驱动版本;
22)从当前驱动版本信息中提取机型、os版本和驱动类型参数;
23)查询系统驱动版本库中该外插卡对应的最新驱动版本;
所述选择最新驱动程序并进行自动安装的过程包括以下步骤:
31)检测linux系统的机型、os类型和os版本号;
32)下载外插卡对应的最新驱动程序;
33)执行自动安装脚本进行更新外插卡最新驱动程序。
本发明的有益效果是:本发明通过python与shell之间的相互调用,尽量精简程序结构,避免命令重复运行。它通过shell提取系统信息,并用python进行处理。用python建立系统驱动版本库,以及判断当前驱动版本是否为最新,最后利用shell脚本实现确定当前机型及os版本,实现驱动自动化升级。
本发明利用shell和python语言实现了自动更新linux系统下驱动模块版本,不仅操作简单,自动化程度高,实用性较强,而且能够节省大量人力,极大地提高了人员工作效率以及服务器利用率,适用于当前所有版本linux系统。
本发明自动更新当前linux系统的驱动版本,节省测试时间和人力。一次性建立驱动版本库,之后只需要更新版本库文件,无需手动系统下更新。本发明能自动检测当前pcie插槽上的外插设备及其类型,自动识别机器型号及linuxosrelease,若外插卡驱动版本不是最新,会自动将其更新至版本库中的最新版本。
附图说明
下面结合说明书附图对本发明进行说明。
图1为本发明实施例1的方法流程图;
图2为本发明获取外插卡驱动信息的流程图;
图3为本发明检测当前驱动是否需要更新的流程图;
图4为本发明进行驱动程序升级的流程图;
图5为本发明的系统驱动版本库的框架示意图;
图6为本发明实施例2的方法流程图。
具体实施方式
为能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。
实施例1
如图1所示,本发明的一种自动更新linux系统所有外插卡设备驱动的方法,它首先提取系统信息并更新系统驱动版本库,然后判断当前驱动版本是否为最新,最后确定当前机型及os版本并进行驱动程序升级。进一步地,所述系统信息通过shell脚本进行提取,所述系统驱动版本库采用python语言建立,当前驱动版本是否为最新采用python语言判断,所述驱动版本采用shell脚本进行确定当前机型及os版本并进行升级。
进一步地,所述方法包括以下具体步骤:
1)检测当前外插卡信息和驱动模块信息。如图2所示,所述步骤1)包括以下具体步骤:
11)获取外插卡信息与pci插槽的对应列表;
12)获取每个外插卡信息;
13)获取pci设备总线信息;
14)获取每个外插卡对应的pci插槽的pci编号和驱动模块信息;
15)获取每个外插卡的当前驱动版本信息和最新驱动版本信息并存储到系统驱动版本库。
2)确定当前系统驱动版本信息与对应驱动版本库驱动信息并判断是否进行驱动最新。如图3所示,所述步骤2)包括以下具体步骤:
21)获取外插卡的当前驱动版本;
22)从当前驱动版本信息中提取机型、os版本和驱动类型参数;
23)查询系统驱动版本库中该外插卡对应的最新驱动版本;
24)判断当前驱动版本的版本号与最新驱动版本的版本号的大小,如果当前驱动版本低于最新驱动版本则确定该外插卡驱动需要升级并转入下一步;如果当前驱动版本高于最新驱动版本则将系统驱动版本库中该外插卡对应的最新驱动版本更新为当前驱动版本;
25)获取该外插卡对应的最新驱动程序。
3)根据机型、os版本、外插卡信息选择对应的最新驱动程序更新已安装驱动程序。如图4所示,
所述步骤3)包括以下具体步骤:
31)检测linux系统的机型、os类型和os版本号;
32)下载外插卡对应的最新驱动程序;
33)执行自动安装脚本进行更新外插卡最新驱动程序。
进一步地,如图5所示,所述系统驱动版本库包括linux系统的机型、os类型、os版本号和外插卡驱动模块,所述os类型包括但不限于redhat、centos、suse和ubuntu中的一种或多种,所述外插卡驱动模块包括但不限于igb、ixgb、qla2xxx和lpfc中的一种或多种。
本发明的实施例主要分为三部分:1)自动检测当前外插卡信息,驱动模块信息;2)确定当前系统驱动版本信息与对应驱动版本库驱动信息;3)根据机型、os版本、外插卡信息选择对应驱动进行安装。本发明的部分代码如下。
1)自动检测当前外插卡信息,驱动模块信息;
此脚本将pcie信息与驱动版本号对应起来,获取外插卡所需的驱动模块。
2)自动检测当前外插卡信息,驱动模块信息;
此部分模块用python语言完成。首先,version_request.py脚本来确定版本库中驱动最新版本号,然后用driver_compare.py脚本来对比驱动版本信息,确认驱动是否需要升级。
实施例2
如图6所示,本发明提供的另一种自动更新linux系统所有外插卡设备驱动的方法,它在进行更新外插卡设备驱动前需要进行系统驱动版本库设计和驱动包安装包存储结构设计,所述方法包括以下步骤:
1)为每个驱动程序编写自动安装shell脚本;
2)扫描外插卡设备并检测驱动模块;
3)获取当前驱动版本和最新驱动版本;
4)如果当前驱动版本低于最新驱动版本则从系统驱动版本库中选择最新驱动程序并进行自动安装,否则直接进入下一步;
5)如果所有外插卡设备检测完成则进入下一步,否则转入步骤2)继续检测其它外插卡设备;
6)完成所有外插卡设备驱动更新,并重启系统。
进一步地,如图5所示,所述系统驱动版本库包括linux系统的机型、os类型、os版本号和外插卡驱动模块,所述os类型包括但不限于redhat、centos、suse和ubuntu中的一种或多种,所述外插卡驱动模块包括但不限于igb、ixgb、qla2xxx和lpfc中的一种或多种。
本发明实施例2的具体操作步骤及实现过程如下:
1)完成驱动版本库的设计,本发明中用python字典作为版本库的框架,如图5所示,
具体结构体现在python字典中如下,自动提取相应版本方法:
2)完成驱动包安装包存储结构设计,与驱动版本库的结构基本一致。
3)为每个特定的驱动包编写自动化安装shell脚本。
4)执行auto_update.sh,程序调用driver_version.py检测最新驱动版本,以及调用driver_compare查看当前驱动是否为最新:
(1)判断当前驱动版本是否为最新版本:
(2)判断当前驱动版本是否超过版本库中驱动版本:
5)当版本需要更新时,输入yes;程序会自动调用driver_select.sh脚本,确定当前系统类型,os版本,并选择需要升级的模块驱动进行安装
6)驱动全部更新完毕,系统建议reboot。
本发明检测当前外插pcie设备及驱动模块版本信息,并将驱动版本与数据库进行对比,若驱动版本不为最新,则更新驱动;如果驱动版本是最新,则不进行处理。对每张外插卡进行迭代操作。更新完所有外插卡后重启系统即可。
本发明基于shell和python语言进行自动更新linux系统下驱动模块版本,适用于当前所有版本linux系统。
以上所述只是本发明的优选实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也被视为本发明的保护范围。