| Since 2.1.99-test5, pciutils should also be compilable on Windows. Thanks |
| to Alexander Stock for contributing the port. |
| |
| Updated after version 2.2.6 to compile again, and with MinGW, even (only?) |
| cross-compiling. (Hopefully it works with MSVC too.) |
| |
| For simple listing PCI devices in system via win32-cfgmgr32 access method |
| which provides only basic information and emulated config space, there is no |
| special requirement. To list PCI resources on Windows 8 and higher versions, |
| it is necessary to have architecture-native version (e.g. AMD64 version on |
| AMD64 systems). |
| |
| For config space access there are different windows specific access methods: |
| - win32-kldbg - Kernel Local Debugging Driver kldbgdrv.sys |
| - win32-sysdbg - NT SysDbg interface |
| - intel-conf1 - Direct hardware access via Intel configuration mechanism 1 |
| |
| The default access method is win32-cfgmgr32 and by default it tries to use |
| one of the above config access access method to provide as much as possible |
| information to application. More details about particular access method and |
| caveats are described in the pcilib(8) manual page. |
| |
| The default access method for config space is win32-kldbg. It uses Microsoft's |
| Kernel Local Debugging Driver kldbgdrv.sys. This driver is not part of the |
| Windows system but is part of the Microsoft WinDbg tool. It is required to |
| have kldbgdrv.sys driver installed in the system32 directory or to have |
| windbg.exe or kd.exe binary in PATH. kldbgdrv.sys driver has some restrictions. |
| Process needs to have Debug privilege and Windows system has to be booted with |
| Debugging option. Debugging option can be enabled by calling (takes effect |
| after next boot): bcdedit /debug on |
| |
| Download links for WinDbg 6.12.2.633 standalone installer from Microsoft: |
| https://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi |
| https://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools/dbg_x86.msi |
| |
| To access config space via intel-conf1 access method on NT-based systems via |
| NT ProcessUserModeIOPL system call, it is required to have SeTcbPrivilege |
| (Act as part of the operating system privilege), which can be enabled in User |
| Accounts settings (take effect after next login). By default this privilege is |
| not enabled for any non-system user. Or alternatively it is required to be in |
| local Administrators group and on Windows 2000 SP4 or higher systems to have |
| SeImpersonatePrivilege (Impersonate a client after authentication privilege) |
| which is by default enabled for all local Administrators accounts. There is no |
| special requirement for DOS-based systems. 64-bit systems do not have to allow |
| users to access config space even with SeTcbPrivilege. |
| |
| To compile this port, run following command: |
| |
| make CROSS_COMPILE=i586-mingw32msvc- HOST=i586-windows ZLIB=no IDSDIR="" |
| |
| To build 64-bit version, run: |
| |
| make CROSS_COMPILE=x86_64-w64-mingw32- HOST=x86_64-windows ZLIB=no IDSDIR="" |
| |
| Sometimes compilation may fail due to broken or missing getopt implementation. |
| In this case try to compile with additional make option: COMPAT_GETOPT=yes |
| |
| Building of shared DLL library libpci3.dll is supported too but needs to be |
| manually enabled by make option: SHARED=yes |
| |
| This DLL library libpci3.dll has versioned symbols with stable ordinal numbers |
| which provides backward and forward compatibility. Every symbol in DLL library |
| has '@LIBPCI_3.<version>' suffix to achieve it. For linking application to |
| libpci3.dll it is possible to generate import library from libpci3.def file. |
| Such import library will provide import symbol names without versioned suffix |
| as an alias for the latest symbol version, which matches function name in pci.h |
| header file. The alias is resolved by the linker at linking time, so the final |
| application binary would always reference only versioned symbol. DLL library |
| libpci3.dll does not provide unversioned symbols, so for using GetProcAddress() |
| or dlsym() it is needed to specify full versioned symbol name. |