CN110618822B - 无盘工作站启动阶段预安装网卡驱动的方法 - Google Patents
无盘工作站启动阶段预安装网卡驱动的方法 Download PDFInfo
- Publication number
- CN110618822B CN110618822B CN201910790595.8A CN201910790595A CN110618822B CN 110618822 B CN110618822 B CN 110618822B CN 201910790595 A CN201910790595 A CN 201910790595A CN 110618822 B CN110618822 B CN 110618822B
- Authority
- CN
- China
- Prior art keywords
- network card
- file
- driver
- information
- pnp
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种无盘工作站启动阶段预安装网卡驱动的方法,即利用网卡PNP功能在客户机无盘系统启动开始阶段获取到网卡的硬件ID并发送给服务端,服务端根据硬件ID下发网卡驱动程序及相关网卡信息给客户机,借由客户机无盘系统的网卡PNP功能完成网卡驱动的加载。本发明通过网卡PNP技术可以让多种客户机配置使用同一个镜像,减少服务端磁盘使用率,减少部署难度。
Description
技术领域
本发明属于计算机无盘启动技术领域,具体涉及一种无盘工作站启动阶段预安装网卡驱动的方法。
背景技术
无盘启动技术,一般是指通过网络下载系统镜像并启动的计算机,无盘工作站(Client)本身并没有硬盘,即本地是没有系统镜像的,系统镜像存储于服务端(Server)。Client通过其自身网卡Rom中的启动代码,使用DHCP协议获取IP地址,使用TFTP协议下载镜像或引导文件,构建镜像或引导文件的运行环境,使Client通过服务端的镜像启动,它并非传统的无盘工作站,因为使用该技术的PC在网络方式下的运行速度甚至比有盘还要快。
iPXE是一套开源的无盘启动技术,是在intel开发的PXE(Preboot ExecuteEnvironment,,预启动执行环境)基础上开发的,它提供了一个完整的PXE实现,增强了大部分功能;大多数网卡中都带有iPXE的Rom,即大多数网卡都支持无盘启动。.
UEFI(Unified Extensible Firmware Interface)是一种详细描述类型接口的标准,EFI则是intel为PC固件的体系结构、接口和服务提出的建议标准,其主要目的是为了提供一组在OS(Operating System)加载之前在所有平台上一致的、正确指定的启动服务,被看作是有近20多年历史的BIOS的继任者。UEFI则是在EFI1.10的基础上发展起来的,它的所有者已不再是intel,也被无盘网络技术所使用,目前大多数网卡也支持UEFI启动。
PNP(Plug-and-Play,即插即用)是现代操作系统中必不可少的一个特性,它通过物理设备和设备驱动程序的配合,可以在无需用户干预的情况下,自动并静默处理外部设备的接入和移除操作。即插即用功能只有在同时具备以下4个条件时才可以工作:即插即用的标准bios、即插即用的操作系统、即插即用的设备和即插即用的驱动程序。
自然语言处理是通过程序将一段人类语言转换成计算机命令,是人工智能领域的一种重要技术;语言是人类独有的能力,人们一直期望可以通过自然语言控制计算机,自然语言处理是计算机科学、人工智能、语言学关注计算机和人类语言之间相互作用的技术领域。
无盘工作站启动阶段预安装网卡驱动技术让计算机在无盘启动没有本地硬盘的环境下,解决网卡驱动的安装问题,让计算机在无盘环境中依然可以正常开机,使得网络在可用的状态下。
虽然以上技术发展迅速,但并不能适配到所有环境,功能也不健全;比如无盘启动并不能使不同的配置共用一个镜像,因为其无盘启动过程中并没有一套可以支持网卡PNP的技术,导致每一种配置就要对应一个镜像,既造成了服务端存储空间的浪费,又增加了批量部署的困难度。
另外,系统内核加载以后才能为对应的网卡安装对应的驱动,这个时候如果网卡驱动适配错误,客户机将没有网络;系统做网卡PNP时需要网络支持,而网络支持又需要网卡驱动,这问题上会有一个先后次序的矛盾。
发明内容
鉴于上述,本发明提供了一种无盘工作站启动阶段预安装网卡驱动的方法,该方法是一种基于iPXE或UEFI环境下的网卡PNP解决方案,旨在将网卡资源与镜像分离出去,并能根据Client网卡型号下载对应的网卡资源,从而解决多种配置的客户机可以使用同一个镜像启动。
一种无盘工作站启动阶段预安装网卡驱动的方法,即利用网卡PNP功能在客户机无盘系统启动开始阶段获取到网卡的硬件ID并发送给服务端,服务端根据硬件ID下发网卡驱动程序及相关网卡信息给客户机,借由客户机无盘系统的网卡PNP功能完成网卡驱动的加载。
所述网卡驱动程序及相关网卡信息也可以预先放置在安装目录中、或由用户自行导入、或从IDC服务端自动获取,同时用户也可以在服务端对网卡属性进行个性化设置和调整。
进一步地,在无盘启动过程中实现网卡PNP功能,首先要将网卡资源从镜像中分离出来,即要了解从网卡插入计算机到网卡可以工作的中间过程。
进一步地,无盘系统启动时会枚举每个总线下的设备,并建立设备链,进而为这些设备加载对应的设备驱动;在枚举设备过程中若碰到当前设备为总线设备,系统就会继续枚举该总线下的其他设备,一直会把所有的设备都枚举到,并尝试为其安装对应的设备驱动。
进一步地,网卡位于PCI总线下,其驱动程序包内包含网卡驱动程序以及对应的inf文件(设备设置信息文件),inf文件包含驱动名称和位置、驱动版本信息以及注册信息,系统在安装网卡驱动程序时会解析该inf文件,并将其复制到%SystemRoot%\inf目录下。
进一步地,所述inf文件中以节划分内容,节的顺序不是固定的,节的内容也不相同,因此需利用自然语言处理技术按一定的规则将整个inf文件中的信息转化成操作指令,并将编写好的inf解析代码以及网卡驱动程序存放于服务端。
因为Windows内核加载以后,在没有为网卡安装驱动前,网络是无法使用的,所以必须在Windows内核加载之前的环境中提前保存好网卡驱动,由于iPXE和Windows属于两个独立运行环境且各自独立管理自己的内存,如果只是把网卡驱动保存到iPXE内存中,就无法告诉Windows网卡驱动在内存中的地址;iPXE的物理内存上的前1M内存地址由bios所主导,但是这1M内存除去ROM等功能使用,剩余空间太小,放不下网卡驱动;由此,我们将网卡驱动程序包存放到4g高位空间,并将其地址存入到iPXE物理内存上的前1M内存空间内,并加上独有的标记信息。
进一步地,当Windows内核加载以后,利用系统程序netpnp64.sys从iPXE物理内存上的前1M内存空间内搜寻之前放入的标记信息,拿到网卡驱动程序包的存放地址,进而取得网卡驱动的inf文件。
进一步地,通过对inf文件进行解析,获取需要在注册表中填入的信息,确定在注册表中填入的位置,进而在注册表中添加启动的网卡信息,并将获取到的IP、子网掩码、网关、DNS等信息填入;就相当于告诉系统这里有一块可以使用的网卡,系统在枚举设备时就会为去启动这块网卡的驱动程序。
进一步地,无盘系统在安装网卡驱动时,先从注册表中读取驱动程序在硬盘上的位置,然后再加载驱动程序运行;系统要的是一个文件路径,而之前通过搜寻解析标记信息已知了网卡驱动程序包在内存中的位置,所以在制作镜像的过程中提前在对应硬盘位置放入一个假的驱动文件—iCafe8Net0.sys,即等同于一个过滤驱动,这样我们可以将真正的网卡驱动启动。
本发明通过网卡PNP技术可以让多种客户机配置使用同一个镜像,减少服务端磁盘使用率,减少部署难度。同时本发明可以随时更新和回退网卡驱动,例如在服务端存储多个版本的网卡驱动,根据系统选择最适合的版本,切换网卡驱动仅需要服务端几步点击操作即可实现;另外网卡有较多功能设置参数,同样本发明可以通过服务端的简单设置即可按策略同步到对应电脑,例如要开启某台客户机的网卡负载功能,不需要去开启客户机操作,仅需要在服务端设置页面中选择即可。
附图说明
图1为本发明方法的整体框架示意图。
图2为本发明方法中客户机的启动流程示意图。
图3为总线设备的树形结构示意图。
具体实施方式
为了更为具体地描述本发明,下面结合附图及具体实施方式对本发明的技术方案进行详细说明。
如图1所示,本发明网卡PNP功能可以在系统启动比较早的阶段获取到网卡的硬件ID,发送给服务端,服务端下发驱动文件及相关网卡信息给客户机,借由客户机无盘系统网卡PNP驱动完成网卡驱动的加载;网卡驱动文件及相关信息可以预先放置在安装目录中,也可以由用户自行导入,更可以从IDC服务端自动获取,同时用户也可以在服务端对网卡属性进行个性化设置和调整。
要实现无盘启动过程中的网卡PNP,第一步就是要将网卡资源从镜像中分离出来,分离就要了解从网卡插入到计算机到网卡可以工作的中间的过程。
总线是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束,总线一般呈树形结构,并且存在一个总线在另外一个总线下面,例如USB总线就在PCI总线下面,如图3所示。PCI总线是一种兼容性最强、功能最全的计算机总线,它可同时支持多组外围设备,且独立于CPU总线,为CPU及高速外围设备提供高性能、高吞吐量、低延迟的数据通路。
在系统启动时,它会枚举每个总线下的设备,并建立设备链,为其加载对应的设备驱动,如果该设备是总线设备,它就会继续枚举自己总线下的设备,一直会把所用的设备都枚举到,并尝试为其安装对应的设备驱动。
网卡一般都是在PCI总线下,对于windows系统而言,驱动程序包一般为设备驱动和对应的inf文件,inf(设备设置信息文件)包含系统windows组件用于安装设备支持的信息,此文件是必须具备,windows在安装驱动程序时会解析此inf文件,并将其复制到%SystemRoot%\inf目录下,该文件是PNP技术的关键;windows使用inf文件安装驱动程序,inf文件主要包括驱动名称和位置、驱动版本信息、注册信息。以下就是一个网卡的inf文件部分内容:
|;**COPYRIGHT(c)2007-2013 Realtek CORPORATION
;
;Realtek PCIe FE Family Controller
;Realtek PCI GBE Family Controller
;Realtek PCIe GBE Family Controller
;
[version]
Signature=″$Windows NT$″
Class=Net
ClassGUID={4d36e972-e325-11ce-bfc1-08002be10318}
Provider=%Realtek%
DriverVer=04/10/2013,7.072.0410.2013
CatalogFile.NT=rt64win7.cat
[Manufacturer]
%Realtek%=Realtek,NTamd64
[ControlFlags]
ExcludeFromSelect=*
[Realtek.NTamd64]
;8169 Cardbus Jumbo 7k
;remeber to remove from OEM INF list
%RTL8169.DeviceDesc%=R8169C7k.ndi,PCI\VEN_10EC&DEV_8169&SUBSYS_03351154
;8169 S-32
%SMC9452TX.DeviceDesc%=RTL8169.ndi,PCI\VEN_10EC&DEV_8169&SUBSYS_EE221113
;8169
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_10EC&DEV_8169&REV_10
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_10EC&DEV_8169&SUBSYS_816910EC
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_1432&DEV_9230&SUBSYS_92301432
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_1432&DEV_9230&SUBSYS_01051432
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_1432&DEV_9230&SUBSYS_96041432
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_10EC&DEV_8169&SUBSYS_ED0114EA
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_10EC&DEV_8169&SUBSYS_734E1371
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_10EC&DEV_8169&SUBSYS_320210BD
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_10EC&DEV_8169&SUBSYS_310210BD
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_10EC&DEV_8169&SUBSYS_311A1385
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_10EC&DEV_8169&SUBSYS_52001385
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_1737&DEV_1032&SUBSYS_00241737
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_16EC&DEV_0116&SUBSYS_011616EC
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_10EC&DEV_8169&SUBSYS_C1131259
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_10EC&DEV_8169&SUBSYS_C1121259
;8169 OEM IDs
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_10EC&DEV_8169&SUBSYS_102D147B;ABIT
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_10EC&DEV_8169&SUBSYS_102F147B;ABIT
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_10EC&DEV_8169&SUBSYS_1032147B;ABIT
%RTL8169.DeviceDesc%=RTL8169.ndi,PCI\VEN_10EC&DEV_8169&SUBSYS_1039147B;ABIT
inf中以节划分内容,节的顺序不是固定的,节的内容大多数也不相同;虽然,inf中不是完全的自然语言,但其中的词和语句格式多样,这就需要用到自然语言处理的技术,按一定的规则将整个inf中的信息转化成操作指令;了解了inf的作用并编写好inf解析代码,这样就可以将网卡的inf和驱动存放于服务端。
因为windows内核加载以后,在没有为网卡安装驱动前,网络是无法使用的,所以我们必须在windows内核加载之前的环境中提前保存好网卡驱动。ipxe和windows属于两个独立运行环境,ipxe和windows各自独立的管理自己的内存,如果只是把网卡驱动保存到ipxe内存中,我们无法告诉windows网卡驱动在内存中的地址;解决方法是:ipxe的物理内存上的前1M内存地址,由bios所主导,但是1M内存除去ROM等功能使用,剩余空间太小,放不下网卡驱动,于是我们将网卡驱动放到4g高位空间,并将其地址存入到这1M空间以内,并加上独有的标记信息。
windows内核加载以后,我们的驱动netpnp64.sys会从1M以内空间搜寻之前放入的标记信息,拿到网卡驱动存放的地址,进而取得网卡驱动文件inf文件;通过inf解析,获取需要在注册表中填入的信息,确定在注册表中填入的位置,在注册表中添加启动的网卡信息,并将获取到的ip、子网掩码、网关、dns等信息填入,就相当于告诉系统这里有一块可以使用的网卡,系统在枚举设备时就会为去启动这块网卡的驱动。
系统去安装网卡驱动时是先读取的注册表中驱动文件在硬盘上的位置,然后再加载驱动运行;系统要的是一个文件路径,而我们知道的是网卡驱动在内存中的位置,所以我们在制作镜像的过程中提前放入了一个假的驱动文件—iCafe8Net0.sys,可以认为是一个过滤驱动,这样我们可以将真正的网卡驱动启动。
以下我们通过一个实例对本发明技术方案进行详细说明,具体流程如图2所示:
(1)Win7/XP无盘镜像注册表中预先写入devscan、iCafe8Net服务相关的注册表项,Win10无盘镜像中注册表预先写入devscanDummy、iCafe8NetDummy等服务相关注册表项以及将相关Dummy驱动放置在镜像内。
(2)客户机开机获取网卡硬件ID、InstanceID、网卡PNP信息。
对于Win7/XP网络启动的客户机,Boot.com/iPXE会在实模式内存中保存一个CONFIG_DATA数据结构,开头由!CFG标记,调用UNDI接口获取BaseIo以及IntNumber。
(PXENV_UNDI_GET_INFORMATION)或者BusDevFunc(PXENV_UNDI_GET_NIC_TYPE)信息保存在dwBasePort以及wIRQ成员中;从服务端加载的WinLoader(Boot00X.dat)中的代码进行PCI硬件扫描,根据CONFIG_DATA数据结构中的dwBasePort以及wIRQ信息获取到网卡硬件ID,并根据网卡在PCI总线上的位置生成InstanceID,其后通过调用INT 13,0x5A实模式网络接口扩展,交由Boot.com/iPXE发送网卡硬件ID以及操作系统版本号给服务端(PKTTYPE_PNP_GET_DEV_INFO),并接收服务端返回的网卡PNP信息(PKTTYPE_PNP_GET_DEV_INFOR_ACK),其中包括了网卡设备名称、注册表文件列表、驱动服务文件及驱动服务名称列表。WinLoader根据获取注册表文件列表获取注册表文件内容,并将注册表文件数据、网卡硬件ID、网卡设备InstanceID及其名称、驱动服务名称列表信息保存在一个PCI_DEVICE_LIST数据结构中,该数据保存在虚拟内存空间中,其起始地址保存在实模式CONFIG_DATA数据结构的pBootDev成员中。
对于Win10网络启动的客户机,iPXE将通过扫描所有的PCI设备生成总线Bus设备链,通过UNDI接口(PXENV_UNDI_GET_NIC_TYPE)获取到网卡的硬件ID以及BusDevFunc,根据网卡BusDevFunc和之前扫描到的PCI总线设备链生成InstanceID。
iPXE根据服务端返回的网卡PNP信息下载网卡、PNP注册表文件、PNP驱动文件,并将网卡硬件ID、网卡PNP信息、网卡InstanceID、注册表文件、PNP驱动文件以及devscan等驱动文件放在Win10启动数据中,该数据位于高端内存中,其起始地址保存在实模式中MEM_BOOT_DRV_INFO数据结构中,以BDRV标记。
(3)客户机加载网卡PNP有关驱动。
Win7/XP启动时,WinLoader修改devscan服务加载顺序到最前,当系统Boot0阶段加载devscan服务时,WinLoader通过Hook的方式转而使用INT 13,0x5A实模式网络接口扩展,从服务端(或者SSD硬盘)读取devscan驱动文件;当系统加载iCafe8Net服务时,WinLoader使用同样的方式根据驱动文件信息从服务端(或SSD硬盘)读取对应的网卡驱动文件。
Win10启动时,内置在镜像中的devscanDummy驱动将会模拟出一个文件系统设备\\Device\\BootFS,然后从实模式内存中根据BDRV标记寻找Win10启动数据的内存地址,然后从物理内存中读取出网卡硬件ID、网卡PNP信息、网卡InstanceID、注册表文件、PNP驱动文件、devscan驱动,并将PNP驱动文件以及devscan驱动文件加载入文件系统设备中,通过Hook绕过系统的驱动签名认证,调用SystemLoadGdiDriverInSystemSpace接口加载文件系统设备中的驱动文件到内存中,获取到驱动入口点并记录下来。devscanDummy自身在执行完成后将会调用devscan驱动的入口点,iCafe8NetDummy将通过devscanDummy提供的接口获取到网卡驱动的入口点并执行其入口点。
(4)客户机进行网卡PNP相关处理。
Win7/XP系统利用devscan通过实模式CONFIG_DATA数据结构中pBootDev成员获取到PCI_DEVICE_LIST数据结构;devscan先通过查找注册表,找到一个网卡设备的Enum\PCI注册表项,获取其对应的Driver、NetCfgInstanceId、NetLuidIndex、UpperBind、FilterList用来作为网卡PNP时使用的注册表项,并删除原驱动与Driver的关联关系。
然后对注册表RegNtPreCreateKey、RegNtPreOpenKeyEx、RegNtPreCreate KeyEx操作进行监控,当系统打开HKEY_LOCAL_MACHINE\SYSTEM\Current ControlSet\Enum\PCI\下的对应网卡设备的键时(通过匹配网卡设备硬件ID以及InstanceID来确定),在系统读取相关注册表之前,进行网卡PNP注册表写入操作:首先修改\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\Network中Config数据中的原有镜像网卡设备指向为本机网卡设备,其次在网卡设备Enum\\PCI注册表项下写入Service、Driver等必要的注册表项(其中Service为iCafe8Net0,Driver为之前获取到的镜像中原有网卡设备所使用的Driver),在网卡设备Control\\Class\\%Driver%注册表项下写入对应所需要的注册表项(使用到之前获取到的镜像中原有网卡设备所使用的NetCfgInstanceId、NetLuidIndex、UpperBind、FilterList等),在\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\%NetCfgInstanc eId%\\Connection中写入设备实例地址,在\\Registry\\Machine\\SYSTEM\\Current ControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%NetCfgInstanceId%和\\Registr y\\Machine\\SYSTEM\\CurrentControlSet\\Services\\%NetCfgInstanceId%\\Paramet ers\\Tcpip中写入IP地址信息,最后将注册表文件中的DeviceHW段导入\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Enum\\PCI\\.....\\DeviceParamete rs项下,将Device段导入\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\Class\\%Driver%项下,完成网卡PNP注册表处理。
Win10系统devscan通过devscanDummy提供的接口获取到网卡硬件ID、网卡PNP信息、网卡InstanceID、注册表文件、PNP驱动文件并自行生成PCI_DEVICE_LIST数据结构;然后查找原有镜像内已有的网卡驱动,获取其硬件ID和InstanceID,通过Hook PCI总线服务的方式使得系统查询本机网卡设备硬件ID和InstanceID时返回镜像中原有网卡驱动的硬件ID和InstanceID,让系统误以为本机网卡已经被系统识别过;之后写入注册表的过程与Win7/XP系统相同,只不过监控的是原有镜像内已有的网卡驱动对应的注册表,同时还需要对网卡驱动Enum\\PCI注册表项下ConfigFlags值进行监控,防止系统将其修改为0以外的值。
(5)服务端处理流程:
5.1收到客户机发送来的请求(PKTTYPE_PNP_GET_DEV_INFO),获取到客户机网卡硬件ID以及操作系统版本号。
5.2根据客户机网卡硬件ID,读取LPNP目录下对应操作系统版本号的目录中(Win732位对应6.1_x86,Win764位对应6.1_x64,XP对应5.1_x86,Win1064位对应10.0_x64)PnpFirst.XML中的数据,按照规则匹配查找完整地网卡硬件ID,查看是否存在完整匹配网卡硬件ID的LPNP数据。
5.3如果存在对应的网卡驱动的LPNP数据,则直接跳转到步骤5.6;如果不存在对应的网卡驱动的LPNP数据,则根据PNP目录下对应操作系统版本号的目录中(Win732位对应6.1_x86,Win764位对应6.1_x64,XP对应5.1_x86,Win1064位对应10.0_x64)PnpFirst.XML中的数据,按照一定的规则匹配查找网卡硬件ID,查看是否存在对应的网卡驱动的PNP数据。
5.4如果存在对应的网卡驱动的PNP数据,则直接跳转到步骤5.5;如果不存在对应的网卡驱动的PNP数据,则发送PKTTYPE_QUERY_DRIVERLIST数据包,将硬件ID以及操作系统版本号上报给IDC端,IDC端返回PKTTYPE_QUERY_DRIVERLISTACK数据包,其中硬件驱动文件MD5值,服务端将根据这个MD5值发送PKTTYPE_QUERY_DRIVER数据包以及PKTTYPE_QUERY_DRIVERACK_ACK数据包,从IDC端根据MD5值获取对应的PNP文件,将该文件下载到\\Download\\目录下以AutoMatchPNP-<操作系统版本号><硬件ID号>命名,该文件数据中包含了一个网卡INF文件、一个或多个驱动文件。服务端将INF文件以及驱动文件从单个文件中分离出来,并分析INF文件,在对应操作系统的PNP目录下生成相应的PNP数据(多个注册表文件/驱动文件/Inf文件)并更新PNP目录下PnpFirst.XML/PnpSecond.XML中的索引信息(网卡硬件ID及对应的网卡名称、服务名称、驱动文件、注册表文件列表)。
5.5根据网卡硬件ID信息在对应操作系统LPNP目录下生成一个名为<VenDevID><SubVenDevID><RevisionID>的目录,根据PNP目录下PnpSecond.XML中对应该网卡的索引信息,将对应PNP目录下的对应该网卡的注册表文件、驱动文件以及Inf文件拷贝入该目录里面,并更新LPNP目录下PnpFirst.XML/PnpSecond.XML中的索引信息。
5.6服务端根据LPNP索引中的信息,发送网络包(PKTTYPE_PNP_GET_DEV_INFOR_ACK)给客户机,其中包含了网卡名称、网卡服务列表、驱动文件路径列表以及注册表文件路径列表(均为一个名叫total.all.reg的文件);当客户机请求对应文件大小(PKTTYPE_PNP_GET_FILE_INFOR)时,返回对应的文件大小信息(PKTTYPE_PNP_GET_FILE_INFOR_ACK);当客户机请求文件数据(PKTTYPE_PNP_READ_FILE_DATA)时,返回对应的文件数据(PKTTYPE_PNP_READ_FILE_DATA_ACK),文件数据均用UDP协议传输,支持一发一回以及一发多回方式。
(6)多服务器之间驱动同步流程:
6.1主服务器监视LPNP目录下的文件变更。
6.2主服务器默认每15秒进行一次LPNP同步处理,如果需要同步或者LPNP目录修改时间发生变化则通知副服务器进行LPNP同步。
6.3副服务器默认每15秒进行一次LPNP同步处理,如果需要同步则删除原有LPNP目录,从主服务器同步LPNP目录,并重新读取LPNP索引信息。
(7)用户更新驱动流程:
7.1客户可以通过控制台为未找到驱动的网卡指定一个Inf文件。
7.2服务端将会解析该Inf文件提取出对应该网卡的相关信息,在PNP目录中生成PNP数据,并更新PNP目录下PnpFirst.XML/PnpSecond.XML中的索引信息。
(8)IDC更新驱动流程:
首先解析出Inf文件中的所有的网卡信息,对于Inf文件中每个网卡,使用UploadPNP工具将网卡硬件ID、操作系统版本号、驱动版本号、网卡厂商名称上报给IDC端PKTTYPE_NETWORKCARD_DRIVERINDEX);然后将对应网卡硬件ID的驱动文件、注册表文件以及Inf文件打包为一个网卡PNP文件,并计算打包后文件的MD5值,将该MD5值上报给IDC端PKTTYPE_DRIVERFILE_INDEX);若IDC端不存在该MD5值的文件(根据PKTTYPE_DRIVERFILE_INDEXACK回包结果判断),则上传打包后的网卡PNP文件(PKTTYPE_DRIVERFILE_CONTENT)。
ControlServer服务端每12小时将会进行LPNP信息上报,解析LPNP目录下的PnpFirst.XML/PnpSecond.XML中的索引信息,对于索引中每个网卡,首先将网卡硬件ID、操作系统版本号、驱动版本号、网卡厂商名称上报给IDC端PKTTYPE_NETWORKCARD_DRIVERINDEX);然后将对应网卡硬件ID的驱动文件、注册表文件以及Inf文件打包为一个网卡PNP文件,并计算打包后文件的MD5值,将该MD5值上报给IDC端PKTTYPE_DRIVERFILE_INDEX);若IDC端不存在该MD5值的文件根据PKTTYPE_DRIVERFILE_INDEXACK回包结果判断),则上传打包后的网卡PNP文件(PKTTYPE_DRIVERFILE_CONTENT)。
(9)安装包打包流程:
首先解析出Inf文件中所有网卡信息,打包人员勾选该Inf文件中所需要的网卡,使用InfParse工具将解析Inf文件中对应网卡的PNP数据(多个注册表文件/驱动文件/Inf文件),并生成对应的PNP目录(以Inf文件名命名),将注册表文件、驱动文件、Inf文件写入该目录内,并更新PnpFirst.XML/PnpSecond.XML中的索引信息(网卡硬件ID及对应的网卡名称、服务名称、驱动文件、注册表文件列表)。
(10)网卡INF文件解析流程:
10.1将Inf文件按照INI文件Section:Key:Value的格式解析为三层树。
10.2根据本地语言将Inf中用%xxxxxx%形式表示的引用字符串用对应的[Strings.xxxxxxx]或者[Strings]节中(默认为[Strings])的字符替换。
10.3解析Inf文件最开头的[Version]节中的Signature、DriverVer、ClassGUID等键值,获取到设备类型、驱动版本信息。
10.4按照[Manufactures]-->[Models]-->[DDInstall]/[DDInstall.Service]/[DD Install.HW]-->[S ervice]/[AddReg]/[CopyFiles]的层次依次解析出设备发行商下每一个网卡设备对应操作系统的驱动服务信息、驱动文件名称、注册表等信息。
10.5将所有网卡设备信息生成索引记录在PnpFirst.XML/PnpSecond.XML中,生成对应该Inf文件的目录,将Inf文件以及驱动文件拷贝入目录中,并在目录中生成注册表文件。
(11)相关程序及其职能。
InfParse:负责Inf文件解析,生成服务端PNP目录下对应网卡PNP相关文件(xml配置文件/sys驱动文件/inf文件/reg文件),其生成的文件打包在安装包内,用于更新安装包内网卡PNP文件以及生成特定网卡PNP文件用于用户替换。
UploadPNP:负责解析Inf文件并将对应的网卡信息/inf文件/sys驱动文件上传到IDC的服务器上。
ControlServer:负责根据本地PNP索引数据,回应客户机网卡PNP请求,并与IDC通讯完成三层PNP过程。
BootIpxe7/Boot.com:负责提供INT 13,0x5A实模式网络接口扩展,为WinLoader提供与CS服务端的通讯方式。
Boot00X.dat:修改过后的WinLoader,将会查找并获取到网卡硬件ID、生成网卡InstanceID,利用INT 13,0x5A实模式网络接口扩展与CS服务端通讯,获取网卡PNP信息、注册表文件,并实现驱动文件从服务端加载的PNP过程。
BootIpxe10:负责与CS通讯,获取并生成网卡PNP所需的所有信息以及驱动文件数据,保存在高端内存中供DevscanDummy使用。
DevscanDummy:负责读取出BootIpxe10保存在高端内存中的网卡PNP数据以及驱动文件数据,加载驱动文件到内核中,提供接口供其它Dummy驱动加载真正的驱动文件,其自身调用devscan64驱动文件的入口,同时提供接口供devscan64获取网卡PNP信息。
Icafe8NetDummy:负责通过DevscanDummy提供的接口调用网卡驱动的入口函数。
Devscan64:通过注册表Hook(Win10下配合pci hook方式),修改注册表信息完成网卡PNP。
PNPServer(http接口)/PNPIDC(tcp接口):IDC端服务,负责提供云端网卡PNP驱动查询、网卡PNP驱动下载、网卡PNP驱动入库功能。
上述对实施例的描述是为便于本技术领域的普通技术人员能理解和应用本发明。熟悉本领域技术的人员显然可以容易地对上述实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,对于本发明做出的改进和修改都应该在本发明的保护范围之内。
Claims (2)
1.一种无盘工作站启动阶段预安装网卡驱动的方法,其特征在于:利用网卡PNP功能在客户机无盘系统启动开始阶段获取到网卡的硬件ID并发送给服务端,服务端根据硬件ID下发网卡驱动程序及相关网卡信息给客户机,借由客户机无盘系统的网卡PNP功能完成网卡驱动的加载;
在无盘启动过程中实现网卡PNP功能,首先要将网卡资源从镜像中分离出来,即要了解从网卡插入计算机到网卡可以工作的中间过程;
无盘系统启动时会枚举每个总线下的设备,并建立设备链,进而为这些设备加载对应的设备驱动;在枚举设备过程中若碰到当前设备为总线设备,系统就会继续枚举该总线下的其他设备,一直会把所有的设备都枚举到,并尝试为其安装对应的设备驱动;
网卡位于PCI总线下,其驱动程序包内包含网卡驱动程序以及对应的inf文件,inf文件包含驱动名称和位置、驱动版本信息以及注册信息,系统在安装网卡驱动程序时会解析该inf文件,并将其复制到%SystemRoot%\inf目录下;
所述inf文件中以节划分内容,节的顺序不是固定的,节的内容也不相同,因此需利用自然语言处理技术按一定的规则将整个inf文件中的信息转化成操作指令,并将编写好的inf解析代码以及网卡驱动程序存放于服务端;
将网卡驱动程序包存放到4g高位空间,并将其地址存入到iPXE物理内存上的前1M内存空间内,并加上独有的标记信息;
当Windows内核加载以后,利用系统程序netpnp64.sys从iPXE物理内存上的前1M内存空间内搜寻之前放入的标记信息,拿到网卡驱动程序包的存放地址,进而取得网卡驱动的inf文件;
通过对inf文件进行解析,获取需要在注册表中填入的信息,确定在注册表中填入的位置,进而在注册表中添加启动的网卡信息,并将获取到的IP、子网掩码、网关、DNS信息填入。
2.根据权利要求1所述无盘工作站启动阶段预安装网卡驱动的方法,其特征在于:无盘系统在安装网卡驱动时,先从注册表中读取驱动程序在硬盘上的位置,然后再加载驱动程序运行;系统要的是一个文件路径,而之前通过搜寻解析标记信息已知了网卡驱动程序包在内存中的位置,所以在制作镜像的过程中提前在对应硬盘位置放入一个假的驱动文件—iCafe8Net0.sys,即等同于一个过滤驱动。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910790595.8A CN110618822B (zh) | 2019-08-26 | 2019-08-26 | 无盘工作站启动阶段预安装网卡驱动的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910790595.8A CN110618822B (zh) | 2019-08-26 | 2019-08-26 | 无盘工作站启动阶段预安装网卡驱动的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110618822A CN110618822A (zh) | 2019-12-27 |
CN110618822B true CN110618822B (zh) | 2023-02-07 |
Family
ID=68921985
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910790595.8A Active CN110618822B (zh) | 2019-08-26 | 2019-08-26 | 无盘工作站启动阶段预安装网卡驱动的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110618822B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113535241B (zh) * | 2020-04-21 | 2024-05-03 | 中兴通讯股份有限公司 | 无盘启动方法、装置、终端设备和存储介质 |
CN112671930B (zh) * | 2021-01-13 | 2022-09-20 | 杭州雾联科技有限公司 | 无盘服务端自动更新无盘工作站应用资源的方法 |
CN115080151B (zh) * | 2022-07-22 | 2023-07-14 | 平安银行股份有限公司 | App启动流程控制方法、计算机可读存储介质及终端 |
CN116541084B (zh) * | 2023-06-29 | 2023-12-15 | 深圳艾为电气技术有限公司 | 压缩机驱动器的驱动装载控制方法、装置、设备及介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662884A (zh) * | 2012-04-16 | 2012-09-12 | 湖北盛天网络技术股份有限公司 | 一种基于网络的设备驱动程序配置方法 |
CN105045629A (zh) * | 2015-07-29 | 2015-11-11 | 杭州顺网科技股份有限公司 | 一种无盘工作站设备启动方法及系统 |
CN105893311A (zh) * | 2016-03-28 | 2016-08-24 | 青岛海信电器股份有限公司 | 通用串行总线接口驱动配置方法和装置 |
CN107577510A (zh) * | 2017-09-21 | 2018-01-12 | 成都领沃网络技术有限公司 | 一种无盘环境下硬件驱动自动快速预装方法及系统 |
CN107665131A (zh) * | 2017-09-21 | 2018-02-06 | 成都领沃网络技术有限公司 | 一种无盘环境下客户端硬件驱动自动快速预装方法及客户端 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW200933487A (en) * | 2008-01-30 | 2009-08-01 | Ralink Technology Corp | External device auto-run a driver installation and method thereof |
US8407662B2 (en) * | 2010-06-25 | 2013-03-26 | Wyse Technology Inc. | Apparatus and method for network driver injection into target image |
CN102081541A (zh) * | 2011-01-21 | 2011-06-01 | 青岛海信移动通信技术股份有限公司 | 一种usb设备驱动安装方法及装置 |
EP2719248A2 (en) * | 2011-06-10 | 2014-04-16 | Yota Devices IPR Ltd | Method of installing a driver to emulate a network card |
CN108566297B (zh) * | 2018-04-12 | 2021-04-09 | 福建升腾资讯有限公司 | VOI虚拟化下的Windows网卡驱动加载方法 |
CN109766105A (zh) * | 2018-12-24 | 2019-05-17 | 新华三技术有限公司 | 驱动程序安装方法、装置、服务器及计算机可读存储介质 |
-
2019
- 2019-08-26 CN CN201910790595.8A patent/CN110618822B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662884A (zh) * | 2012-04-16 | 2012-09-12 | 湖北盛天网络技术股份有限公司 | 一种基于网络的设备驱动程序配置方法 |
CN105045629A (zh) * | 2015-07-29 | 2015-11-11 | 杭州顺网科技股份有限公司 | 一种无盘工作站设备启动方法及系统 |
CN105893311A (zh) * | 2016-03-28 | 2016-08-24 | 青岛海信电器股份有限公司 | 通用串行总线接口驱动配置方法和装置 |
CN107577510A (zh) * | 2017-09-21 | 2018-01-12 | 成都领沃网络技术有限公司 | 一种无盘环境下硬件驱动自动快速预装方法及系统 |
CN107665131A (zh) * | 2017-09-21 | 2018-02-06 | 成都领沃网络技术有限公司 | 一种无盘环境下客户端硬件驱动自动快速预装方法及客户端 |
Also Published As
Publication number | Publication date |
---|---|
CN110618822A (zh) | 2019-12-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110618822B (zh) | 无盘工作站启动阶段预安装网卡驱动的方法 | |
US7743242B2 (en) | Method and system for automatic generation of operating system boot images | |
US7421620B2 (en) | Configuration proxy service for the extended firmware interface environment | |
CN106201927B (zh) | 用于将网络驱动程序注入目标映像的设备和方法 | |
US20070168478A1 (en) | System and method for transferring a computing environment between computers of dissimilar configurations | |
US20020067504A1 (en) | Method and apparatus for automatic upgrade of a product's printer driver | |
JP2009070375A (ja) | 遠隔クライアント上にオペレーティングシステムをカスタムインストールするためのシステムおよび方法 | |
US20030130980A1 (en) | Efficient configuration data migration technique | |
CN107533441B (zh) | 创建操作系统卷 | |
US11144292B2 (en) | Packaging support system and packaging support method | |
CN111444119B (zh) | 一种基于内核参数的飞腾平台非易失内存注册方法 | |
CN112068892A (zh) | 一种基于uefi技术的无盘工作站启动方法 | |
WO2009149416A1 (en) | Automated filer technique for use in virtualized appliances and applications | |
JP4759941B2 (ja) | 起動イメージ提供システム及び方法、ブートノード装置、ブートサーバ装置並びにプログラム | |
US20020138821A1 (en) | Method and apparatus for seamless porting of object code between operating system environments | |
CN113485756A (zh) | 硬件设备配置方法、装置、设备及存储介质 | |
CN109471665B (zh) | 一种自动安装Windows操作系统的方法 | |
JP2002366501A (ja) | 周辺デバイス、コンピュータシステム、及びインストーラプログラム | |
CN115328717A (zh) | 一种支持多种国产平台的内核测试方法及系统 | |
Cisco | Installing the EISA PC Adapter NetWare Driver | |
Cisco | PXM1E Backup Boot Procedures | |
Cisco | PXM1E Backup Boot Procedures | |
US7350214B2 (en) | Printer driver initialization | |
Cisco | Installing the EISA PC Adapter NetWare Driver | |
Cisco | Installing the EISA PC Adapter NetWare Driver |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |