]>
Commit | Line | Data |
---|---|---|
ee7d8384 MM |
1 | Since 2.1.99-test5, pciutils should also be compilable on Windows. Thanks |
2 | to Alexander Stock for contributing the port. | |
c0eece92 | 3 | |
09156b3b MM |
4 | Updated after version 2.2.6 to compile again, and with MinGW, even (only?) |
5 | cross-compiling. (Hopefully it works with MSVC too.) | |
6 | ||
b8773677 PR |
7 | For simple listing PCI devices in system via win32-cfgmgr32 access method |
8 | which provides only basic information and emulated config space, there is no | |
353f4109 PR |
9 | special requirement. To list PCI resources on Windows 8 and higher versions, |
10 | it is necessary to have architecture-native version (e.g. AMD64 version on | |
11 | AMD64 systems). | |
12 | ||
b8773677 PR |
13 | For config space access there are different windows specific access methods: |
14 | - win32-kldbg - Kernel Local Debugging Driver kldbgdrv.sys | |
15 | - win32-sysdbg - NT SysDbg interface | |
16 | - intel-conf1 - Direct hardware access via Intel configuration mechanism 1 | |
17 | ||
18 | The default access method is win32-cfgmgr32 and by default it tries to use | |
19 | one of the above config access access method to provide as much as possible | |
20 | information to application. More details about particular access method and | |
21 | caveats are described in the pcilib(8) manual page. | |
22 | ||
7dbb846c | 23 | The default access method for config space is win32-kldbg. It uses Microsoft's |
7bcd087d PR |
24 | Kernel Local Debugging Driver kldbgdrv.sys. This driver is not part of the |
25 | Windows system but is part of the Microsoft WinDbg tool. It is required to | |
26 | have kldbgdrv.sys driver installed in the system32 directory or to have | |
27 | windbg.exe or kd.exe binary in PATH. kldbgdrv.sys driver has some restrictions. | |
28 | Process needs to have Debug privilege and Windows system has to be booted with | |
29 | Debugging option. Debugging option can be enabled by calling (takes effect | |
30 | after next boot): bcdedit /debug on | |
31 | ||
32 | Download links for WinDbg 6.12.2.633 standalone installer from Microsoft: | |
33 | https://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi | |
34 | https://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools/dbg_x86.msi | |
35 | ||
b8773677 PR |
36 | To access config space via intel-conf1 access method on NT-based systems via |
37 | NT ProcessUserModeIOPL system call, it is required to have SeTcbPrivilege | |
b8fbb6f0 PR |
38 | (Act as part of the operating system privilege), which can be enabled in User |
39 | Accounts settings (take effect after next login). By default this privilege is | |
40 | not enabled for any non-system user. Or alternatively it is required to be in | |
41 | local Administrators group and on Windows 2000 SP4 or higher systems to have | |
42 | SeImpersonatePrivilege (Impersonate a client after authentication privilege) | |
43 | which is by default enabled for all local Administrators accounts. There is no | |
353f4109 PR |
44 | special requirement for DOS-based systems. 64-bit systems do not have to allow |
45 | users to access config space even with SeTcbPrivilege. | |
b5847329 | 46 | |
63435b6e PR |
47 | To compile this port, run following command: |
48 | ||
42e6a803 | 49 | make CROSS_COMPILE=i586-mingw32msvc- HOST=i586-windows ZLIB=no IDSDIR="" |
63435b6e | 50 | |
353f4109 PR |
51 | To build 64-bit version, run: |
52 | ||
53 | make CROSS_COMPILE=x86_64-w64-mingw32- HOST=x86_64-windows ZLIB=no IDSDIR="" | |
54 | ||
63435b6e PR |
55 | Sometimes compilation may fail due to broken or missing getopt implementation. |
56 | In this case try to compile with additional make option: COMPAT_GETOPT=yes | |
57 | ||
b8773677 PR |
58 | Building of shared DLL library libpci3.dll is supported too but needs to be |
59 | manually enabled by make option: SHARED=yes | |
60 | ||
61 | This DLL library libpci3.dll has versioned symbols with stable ordinal numbers | |
62 | which provides backward and forward compatibility. Every symbol in DLL library | |
63 | has '@LIBPCI_3.<version>' suffix to achieve it. For linking application to | |
64 | libpci3.dll it is possible to generate import library from libpci3.def file. | |
65 | Such import library will provide import symbol names without versioned suffix | |
66 | as an alias for the latest symbol version, which matches function name in pci.h | |
67 | header file. The alias is resolved by the linker at linking time, so the final | |
68 | application binary would always reference only versioned symbol. DLL library | |
69 | libpci3.dll does not provide unversioned symbols, so for using GetProcAddress() | |
70 | or dlsym() it is needed to specify full versioned symbol name. |