Что такое __VMKLNX__ в заголовочных файлах Linux?

Во многих модулях ядра Linux (аппаратных драйверах) их исходные заголовочные файлы можно выделить такие строки:

#ifndef __VMKLNX__

__VMKLNX__ не определен в исходном коде этого модуля. Предположение таково, что __VMKLNX__ предопределенный макрос для системы "C" Может быть, связано с виртуальными машинами или даже VMware. Однако я не могу найти какой-либо авторитетный источник, чтобы подтвердить это.

Что и как / где я могу найти значение этого __VMKLNX__ часть?

1 ответ

Решение

Это означает, что драйвер поддерживает сборку для ядра 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.

Другие вопросы по тегам