在许多 Linux 内核模块(硬件驱动程序)的源头文件中,可以发现如下行:
#ifndef __VMKLNX__
__VMKLNX__
在这个模块的源代码中没有定义。猜测是__VMKLNX__
“C”系统特定的预定义宏。可能与虚拟机甚至 VMware 有关。但是我找不到任何权威来源来证实这一点。
什么是以及如何/在哪里可以找到这__VMKLNX__
部分的含义?
在许多 Linux 内核模块(硬件驱动程序)的源头文件中,可以发现如下行:
#ifndef __VMKLNX__
__VMKLNX__
在这个模块的源代码中没有定义。猜测是__VMKLNX__
“C”系统特定的预定义宏。可能与虚拟机甚至 VMware 有关。但是我找不到任何权威来源来证实这一点。
什么是以及如何/在哪里可以找到这__VMKLNX__
部分的含义?
这意味着驱动程序支持为VMware ESX内核构建,其文档和源代码不公开。VMware ESX 内核是一个通常称为“vmkernel”的管理程序。您可以__VMKLNX__
通过查看现有驱动程序中的代码注释来推断其用途,例如bnx2.c:
#if defined(__VMKLNX__)
/* On VMware ESX there is a possibility that that netdev watchdog thread
* runs before the reset task if the machine is loaded. If this occurs
* too many times, these premature watchdog triggers will cause a PSOD
* on a VMware ESX beta build */
#define TX_TIMEOUT (20*HZ)
#else
#define TX_TIMEOUT (5*HZ)
#endif /* defined(__VMKLNX__) */
不过,VMware ESX 不是 linux。ESX 内核只是实现了一个允许它运行 Linux 设备驱动程序的接口。