PCIDetect and How it Works in a Multi-NIC Configuration
Altiris tries to maintain current drivers and their device ID's the best we can. However, we are not linked to the manufacturer of NICs, so if they add a new device ID to an existing driver, we will not know it until we are informed by a client.
Contents
OEMSetup.inf
PCIDetect.ini
How This All Gets Put Together
What we learn from this output
How PCIDetect works with loading drivers
How do you fix this issue?
It is important to know how to fix issues where NICs are not loading even though you are sure you have the correct driver.
There are 2 files which are the most important when creating a Multi-NIC configuration for PXE or embedded Bootworks partitions: OEMSetup.inf and PCIDetect.ini.
OEMSetup.inf
The OEMSetup.inf file is located in Bootwiz\platforms\dos\drivers\Microsoft (if you are using DOS) or
\Bootwiz\platforms\Winpe\x86\Drivers\std\I386\inf (if you are using WinPE).
Here is an example of the Intel\P100VE_1 as seen in 6.5 code today:
; OEMSETUP.INF for Lan Server 4.0 DOS client [PCI] VENDOR_ID=8086 DEVICE_ID=103B [disks] 1 = \DOS, "Intel PRO/100+ PCI Adapter Driver Disk", E100B_1 [netcard] a$E100B="Intel PRO 100 and 100 VM Adapter Family - 3/5/03",0,ndis,ethernet,real,a$E100B,a$E100B_nif [a$E100B] devdir=1:E100B.dos device=E100B.dos,@devdir\E100B.dos [a$E100B_nif] Drivername=E100B$ param=Speed,"Line Speed (Mbits/sec)",text,"Auto- Speed,10,100","Auto-Speed",0x3c param=ForceDuplex,"Force Duplex Mode",text,"Auto,1,2","Auto",0x3c
The OEMSetup.inf file is the file we use for right-click install Bootworks functions as well, so it is important that new Device ID.s are directed to Altiris Development so that they can be added for future code releases.
PCIDetect.ini
The PCIDetect.ini file is created during the boot disk creation process and is located in the net\pcidetect.ini of the PXE image or the Bootworks partition.
Here is an example of a PCIDetect.ini file:
[ALTIRIS_PCI_NICS] 3Com EtherLink III (3C590) PCI Busmaster=10B7:5900,\net\_590 AMD PCNET Adapter Family=1022:2000,\net\pcnet Broadcom NetXtreme Ethernet (for HP BC 1000 blades)=14e4:1653;14e4:166E;14e4:1696;14e4:16A6,\net\BC1000 Intel PRO 100 and 100 VM Adapter Family - 3/5/03=8086:103B,\net\P100VE_1
The INI file shows many things, but the important part of this example is the location of the driver that is trying to be loaded (see bold above). To fix issues where the PCIDetect is not seeing the
driver you think you are using, you need to fix the correct OEMSetup.inf file in your code.
How This All Gets Put Together
When creating the boot disk, you select multiple NICs and Boot Disk Creator takes the device and vendor IDs and adds them to the INI file.
The PXE image contains the PCIDetect.exe which is a tool we use to find the vendor and device ID of all Devices in a machine. We specifically use it to match up NIC Vendor and Device ID's to know which driver to load in a multi-NIC configuration.
This is what is used to compare the PCIDetect output with what the PXE image has.
Sample output of PCIDetect.exe using this command:
pcidtect.exe -l > output.txt PCI Bus Num = 0, PCI Device Num = 0, VendorID = 0x8086, DeviceID = 0x3340 PCI Bus Num = 0, PCI Device Num = 1, VendorID = 0x8086, DeviceID = 0x3341 PCI Bus Num = 0, PCI Device Num = 29, VendorID = 0x8086, DeviceID = 0x24c2 PCI Bus Num = 0, PCI Device Num = 29, VendorID = 0x8086, DeviceID = 0x24c4 PCI Bus Num = 0, PCI Device Num = 30, VendorID = 0x8086, DeviceID = 0x24cd PCI Bus Num = 0, PCI Device Num = 30, VendorID = 0x8086, DeviceID = 0x2448 PCI Bus Num = 0, PCI Device Num = 31, VendorID = 0x8086, DeviceID = 0x24cc PCI Bus Num = 0, PCI Device Num = 31, VendorID = 0x8086, DeviceID = 0x24ca PCI Bus Num = 0, PCI Device Num = 31, VendorID = 0x8086, DeviceID = 0x24c5 PCI Bus Num = 0, PCI Device Num = 31, VendorID = 0x8086, DeviceID = 0x24c6 PCI Bus Num = 1, PCI Device Num = 0, VendorID = 0x1023, DeviceID = 0x2100 PCI Bus Num = 2, PCI Device Num = 8, VendorID = 0x8086, DeviceID = 0x103d PCI Bus Num = 2, PCI Device Num = 10, VendorID = 0x8086, DeviceID = 0x1043 PCI Bus Num = 2, PCI Device Num = 11, VendorID = 0x1179, DeviceID = 0x617 PCI Bus Num = 2, PCI Device Num = 13, VendorID = 0x1179, DeviceID = 0x805
What we learn from this output
You can go to various sites to get this information, but these are the basics of what we need:
bus num 0 = Intel Corporation 82855PM Processor to I/O Controller Vendor ID is 8086 Device 3340 Bus num 1 = Mobility Radeon 9000 Video Card of some sort because the vendor ID is 1002 Device 4c66 Bus Num 2 = Intel(R) PRO/Wireless 2100 LAN Card Driver Vendor 8086 Device 1043 Bus Num 2 = PRO/100 VE Network Connection Vendor 8086 Device 103d Bus Num 2 = CardBus Controller Vendor 1524 Device 1421
How PCIDetect works with loading drivers
We take the output from the PCIDetect and try to match it up with the PCIDetect.ini file.
Output from PCIDetect:
PCI Bus Num = 0, PCI Device Num = 0, VendorID = 0x8086, DeviceID = 0x3340 PCI Bus Num = 0, PCI Device Num = 1, VendorID = 0x8086, DeviceID = 0x3341 PCI Bus Num = 0, PCI Device Num = 29, VendorID = 0x8086, DeviceID = 0x24c2 PCI Bus Num = 0, PCI Device Num = 29, VendorID = 0x8086, DeviceID = 0x24c4 PCI Bus Num = 0, PCI Device Num = 30, VendorID = 0x8086, DeviceID = 0x24cd PCI Bus Num = 0, PCI Device Num = 30, VendorID = 0x8086, DeviceID = 0x2448 PCI Bus Num = 0, PCI Device Num = 31, VendorID = 0x8086, DeviceID = 0x24cc PCI Bus Num = 0, PCI Device Num = 31, VendorID = 0x8086, DeviceID = 0x24ca PCI Bus Num = 0, PCI Device Num = 31, VendorID = 0x8086, DeviceID = 0x24c5 PCI Bus Num = 0, PCI Device Num = 31, VendorID = 0x8086, DeviceID = 0x24c6 PCI Bus Num = 1, PCI Device Num = 0, VendorID = 0x1023, DeviceID = 0x2100 PCI Bus Num = 2, PCI Device Num = 8, VendorID = 0x8086, DeviceID = 0x103d PCI Bus Num = 2, PCI Device Num = 10, VendorID = 0x8086, DeviceID = 0x1043 PCI Bus Num = 2, PCI Device Num = 11, VendorID = 0x1179, DeviceID = 0x617 PCI Bus Num = 2, PCI Device Num = 13, VendorID = 0x1179, DeviceID = 0x805
Compare this to the PCIDetect.ini file:
3Com EtherLink III (3C590) PCI Busmaster=10B7:5900,\net\_590 AMD PCNET Adapter Family=1022:2000,\net\pcnet Broadcom NetXtreme Ethernet (for HP BC 1000 blades)=14e4:1653;14e4:166E;14e4:1696;14e4:16A6,\net\BC1000 Intel PRO 100 and 100 VM Adapter Family - 3/5/03=8086:103B,\net\P100VE_1
They do not match up, so whatever is first on the list will be forced to load even if it does not work; in this case, the 3com card.
You fix this issue by modifying the PCI section of the OEMSetup.inf file by adding an additional device ID to look like this:
[PCI] VENDOR_ID=8086 DEVICE_ID=103B;103D
You overwrite the existing file in the directory
Bootwiz\platforms\dos\drivers\Microsoft\ intel\pro100ve_1\oemsetup.inf
You then recreate the Bootworks package or the PXE image so that the PCIDetect.ini file has the new data and looks like the following:
[ALTIRIS_PCI_NICS] 3Com EtherLink III (3C590) PCI Busmaster=10B7:5900,\net\_590 AMD PCNET Adapter Family=1022:2000,\net\pcnet Broadcom NetXtreme Ethernet (for HP BC 1000 blades)=14e4:1653;14e4:166E;14e4:1696;14e4:16A6,\net\bc1000 Intel PRO 100 and 100 VM Adapter Family - 3/5/03=8086:103B;8086:103D,\net\P100VE_1
Note: The default driver which loads is always the first driver in the PCIDetect.ini file if nothing matches.
If you have a problematic computer that you cannot find the correct device ID for, then put that computer's driver first in the INI file. If there is a match, we force the subdirectory driver to load into the root and the computer will boot with the matching driver.
- Login or register to post comments
- 11495 reads
- Printer-friendly version














