Hello List, Please find an updated version of a Windows driver scan system for the Unattended project and a complete and updated HOWTO for using it.
This obsoletes all previous published code. Files and patches are based on unattended-4.8rc5 code. Regards, Pierre Bourgin [copy of README-search-win-drivers.txt from attached archive] Changelog: * 20090213 - Updated instructions related to site/config.pl content (reported by Steven Blackery) * 20090213 - Added search-win-drivers.pl example output. * 20090213 - Updated instructions related to site/config.pl content (reported by Juan Jose Pablo and Steven Blackery) * 20081112 - case insensitive search on pattern PCI\\VEN (reported by Jye Meier) * 20081006 - deal with .INF encoded in UTF-16le format * 20081003 - initial (public) revision All Files and patches are based on unattended-4.8rc5 code. ----------------------------------------------------------------------- What is it ? ----------------------------------------------------------------------- A perl script that take a look on the PCI device(s) of the current hardware platform to install (under Windows) and search for Windows driver(s) that SHOULD match for these PCI device(s) by parsing a collection of Windows drivers. Any Windows driver that is supposed to support a given PCI device will be copied onto the hard drive, from which Windows is installing. The OemPnPDriversPath entry of the file unattend.txt is updated accordingly. That way, the Plug-and-Play Windows mechanism will be able to choose and use these "hinted" drivers. The benefit is that you don't have to choose manually which Windows drivers to install with Unattended. Some devices may not have support from Windows once it's installed due to lack of driver, but at least all major devices should be OK (storage, network, video card). In case of a missing driver, you can "just" add it into your driver collection for the next time. Since there is less and less distinct hardware vendors, and since vendors tend to provide unified drivers that support all their products, you should not have to add so many items. ----------------------------------------------------------------------- Installation & configuration ----------------------------------------------------------------------- As much as possible, try to install file(s) below folder <unattended>/install/site/, it will help unattended maintenance. 0. retrieve a collection of Windows drivers into the Windows drivers "root" directory ; we use here <unattended>/install/site/win_drivers/ : For instance, the DriverPacks.net collection of Windows drivers: retrieve all the .7z files from their web site ( http://driverPacks.net ) then uncompress all these archive file(s) into install/site/win_drivers/ . Full drivers collection (20080530) is about 1.3GB of hard drive space: $ mkdir -p <unattended>/install/site/win_drivers/DriverPacks-20080530 $ cd <unattended>/install/site/win_drivers/DriverPacks-20080530 $ ls ..../download/DriverPacks/*.7z | xargs -n 1 /usr/bin/7za x Depending on your needs, you will probably have to add some specific drivers: for instance, I have: $ ls -d <unattended>/install/site/win_drivers/*/* dell/cardbus-ctlr-ti-7510 dell/modem-conextant-d480 dell/wlan-intel-bg2200 DriverPacks-20080530/D VMware-server-1.0.7-32bit/video [...] 1. From the attached archive, retrieve nt5x-install script as file <unattended>/install/site/nt5x-install . It's not usefull to update <unattended>/linuxboot/nt5x-install ! 2. patch file <unattended>/install/dosbin/install.pl with the provided patch. NOTE: this patch is generated against the 4.8rc5 install.pl file. 3. Add script <unattended>/install/dosbin/search-win-drivers.pl with the one from the archive. 4. Update your <unattended>/install/site/config.pl with the following elements: ## Windows drivers scanning: uncomment to DISABLE its usage #$u->{'_temp'}->{'scan_windrivers'} = ''; ## Windows drivers scanning: drivers collection root path: ## default is "/z/site/win_drivers" (in search-win-drivers.pl): #$u->{'_temp'}->{'scan_windrivers_path'} = "/z/site/win_drivers" ; ## Windows drivers scanning: use patched version of ntx5-install $u->{'_meta'}->{'ntinstall_cmd'} = '/z/site/nt5x-install' ; ## Windows drivers scanning: ## howto exclude PCI_CLASSID Ethernet Controller (0x0200) ## from search of Windows Drivers scanning #$u->{'_temp'}->{'scan_windrivers_options'} = '-c 0200' ; ## Windows drivers scanning: where to store matching driver(s) ## (relative to %systemdrive% once Windows is installed): ## default is 'drv-scan' (in dosbin/install.pl) #$u->{'_temp'}->{'scan_windrivers_dest'} = 'drv-scan' ; 5. Restart a Windows installation via Unattended to use it. The effect of this code happens before you choose (manually) which driver(s) to add to the installation. You can check the scan result in the file /c/netinst/logs/search-win-drivers.log You can also run search-win-drivers.pl script directly from the shell to see what happens: it's a standalone script that just produce output: $ /z/dosbin/search-win-drivers.pl -d /z/site/win_drivers # request lspci about PCI device(s) ... # found 18 PCI device(s) on current hardware platform. # - desc=Intel Corporation 82915G/P/GV/GL/PL/910GL Memory Controller Hub (rev 04) # busid=00:00.0 vendor=8086 device=2580 class=0600 # infstr=PCI\VEN_8086&DEV_2580 # - desc=Intel Corporation 82915G/P/GV/GL/PL/910GL PCI Express Root Port (rev 04) # busid=00:01.0 vendor=8086 device=2581 class=0604 # infstr=PCI\VEN_8086&DEV_2581 # - desc=Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1 (rev 03) # busid=00:1c.0 vendor=8086 device=2660 class=0604 # infstr=PCI\VEN_8086&DEV_2660 [snip] # - desc=ATI Technologies Inc RV516 [Radeon X1300/X1550 Series] # busid=01:00.0 vendor=1002 device=7187 class=0300 # infstr=PCI\VEN_1002&DEV_7187 # - desc=ATI Technologies Inc RV516 [Radeon X1300/X1550 Series] (Secondary) # busid=01:00.1 vendor=1002 device=71a7 class=0380 # infstr=PCI\VEN_1002&DEV_71a7 # - desc=Broadcom Corporation NetXtreme BCM5751 Gigabit Ethernet PCI Express (rev 01) # busid=40:00.0 vendor=14e4 device=1677 class=0200 # infstr=PCI\VEN_14e4&DEV_1677 # 18 PCI device(s) to consider. # found 18 distinct inf string(s) for PCI devices. # Parsing drivers .inf file(s) below folder /z/site/win_drivers ... # - file /z/site/win_drivers/DriverPacks/D/G/A1/CX_72281.inf match 'PCI\VEN_1002&DEV_7187' # - file /z/site/win_drivers/DriverPacks/D/C/I/2k3/915.inf match 'PCI\VEN_8086&DEV_2580' # - file /z/site/win_drivers/DriverPacks/D/C/I/xp/915.inf match 'PCI\VEN_8086&DEV_2580' [snip] # - file /z/site/win_drivers/fjs-p300/chipset-ich2-ich6/915.inf match 'PCI\VEN_8086&DEV_2580' # Checked 1187 .inf file(s). # Matching .inf file(s): 34 distinct folder(s): /z/site/win_drivers/DriverPacks/D/C/I/2k /z/site/win_drivers/DriverPacks/D/C/I/2k3 /z/site/win_drivers/DriverPacks/D/C/I/xp /z/site/win_drivers/DriverPacks/D/G/A1 [snip] /z/site/win_drivers/fjs-p300/chipset-ich2-ich6 # - file /z/site/win_drivers/DriverPacks/D/S/SMG/smwdmch5.inf match 'PCI\VEN_8086&DEV_266e' # - file /z/site/win_drivers/DriverPacks/D/C/I/xp/915.inf match 'PCI\VEN_8086&DEV_2580' # - file /z/site/win_drivers/DriverPacks/D/C/I/xp/ich4core.inf match 'PCI\VEN_8086&DEV_244e' [snip] # Enumerate unmatched device(s): 1 device(s) # - unmatch device: PCI\VEN_8086&DEV_265c (desc: 'Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller (rev 03)') ----------------------------------------------------------------------- Technical details ----------------------------------------------------------------------- Script install/dosbin/search-win-drivers.pl, called by dosbin/install.pl, enumerates PCI device(s) on the current hardware platform by parsing the output of 'lspci -n' shell command and retrieve its PCI identifier ("PCI_VENDOR", "PCI_DEVICE", "PCI_CLASS"). For each PCI device, It looks recursively in all *.INF file(s) below the Windows driver collection ($u->{'_temp'}->{'scan_windrivers_path'}) to search for the magic string "PCI\VEN_[PCI_VENDOR]&DEV_[PCI_DEVICE]" . Please see the online help of the scanner search-win-drivers.pl for details on its mechanisms: $ perldoc <unattended>/install/dosbin/search-win-drivers.pl |less Once finished, install/dosbin/search-win-drivers.pl returns a list of folder(s) that contains drivers to copy onto the hard drive. Its output is written into /c/netinst/log/search-win-drivers.log . It also lists the PCI device(s) that no Windows driver matched. install.pl then continues its usual operations and update the content of string OemPnPDriversPath with the supplementary folder(s) provided by search-win-drivers.pl output. Script nt5x-install will take care of copying these directories onto the hard-drive. Please note that in order to limit the lengh of string "OemPnPDriversPath", install.pl makes a map between the real path(s) of drivers and their corresponding paths on hard drive. It also help to avoid collisions among (manually choosed) driver folder(s). So all drivers folders will be copied with the following names onto the hard-drive : /c/drv-scan/1/, /c/drv-scan/2/, /c/drv-scan/3/, .... The maps between full drivers paths and their copied destination is available in unattend.txt as [_meta]/'scan_windrivers_dest_map' string. ----------------------------------------------------------------------- FAQ, Knowm limitations ----------------------------------------------------------------------- - If using this scanner, you probably don't need anymore to do the full uncompress DriverPacks.net and PnP mechanism as described in the links below: http://ubertechnique.com/unattended/BTS_Driver_Packs (thread) http://www.mail-archive.com/unattended-i...@lists.sourceforge.net/msg05535.html - You should also move your PCI devices drivers from i386/$oem$/$1/ folder into the scanable collection of drivers (below site/win_drivers/). - this scanner may provides a lot of possible driver(s) if used with the DriverPack Collection. If fact, this collection provide drivers for both Windows 2000/XP/2003, so a given driver may imply 2 or 3 folders. The scanner can't distinguish between Windows flavors, since this information is not available in .INF files. This is not a problem since this is the Windows PnP's job. example: On a DELL Latitude D620 laptop, I have 57 folders ! ... but it works anyway. ... Anyway, this is the expected behaviour: provides drivers that SHOULD match, not trying to subsitute to the Plug-and-Play mechanism of Windows. - Windows drivers must provide an .INF file in order to be usable by this scan system. If they do not provide, try to unpack the provided files (un-cab, extract for .exe, etc.). - works only with linux boot and nt5x-install : DOSEMU is not supported. - TXTSETUP.OEM interaction untested (specific to mass storage drivers). - PCI devices exclusion of search-win-drivers.pl is only based on PCI_CLASSID; in the future, we should use a more generic form for exclusion, like '<class>:<vendor>:<device>' - an "unmatched" PCI device does not means unsupported: it may be supported via buildin drivers collection of windows, - it should be nice to extend this code to other buses, like USB, SCSI or HDAUDIO buses. - " virtual " bus(es) that Windows may use won't be probably supported: the goal is to help installing, not replace the PnP Windows mechanism. - This scanner does not support to be runned from Windows. To do so, we should have to write a PCI bus scanner from Windows API (ala lspci). - The search of drivers in the full DriverPacks.net collection is taking about 10 to 20 seconds to achieve (about 900 .INF file(s) to parse). - Time of scanning/reading so many .INF files could be reduced by using a cache mecanism, but such a cache might generate a huge memory footprint while running search-win-drivers.pl ? #end ------------------------------------------------------------------------------ Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H _______________________________________________ unattended-devel mailing list unattended-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/unattended-devel