1

在许多 Linux 内核模块(硬件驱动程序)的源头文件中,可以发现如下行:

#ifndef __VMKLNX__

__VMKLNX__在这个模块的源代码中没有定义。猜测是__VMKLNX__“C”系统特定的预定义宏。可能与虚拟机甚至 VMware 有关。但是我找不到任何权威来源来证实这一点。

什么是以及如何/在哪里可以找到这__VMKLNX__部分的含义?

4

1 回答 1

3

这意味着驱动程序支持为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 设备驱动程序的接口。

于 2014-10-10T00:02:31.973 回答