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 archive]


Changelog:
* 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):
    #$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

Attachment: search-win-drivers-unattended-4.8rc5-20090213.tar.gz
Description: GNU Zip compressed data

------------------------------------------------------------------------------
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

Reply via email to