1

多くの Linux カーネル モジュール (ハードウェア ドライバー) のソース ヘッダー ファイルで、次のような行を見つけることができます。

#ifndef __VMKLNX__

__VMKLNX__は、このモジュールのソース コードでは定義されていません。__VMKLNX__これは、「C」システム固有の定義済みマクロであると推測されます。仮想マシンや VMware に関連している可能性があります。ただし、これを確認するための信頼できる情報源は見つかりません。

__VMKLNX__この部分の意味は何ですか、どのように/どこで見つけることができますか?

4

1 に答える 1

3

これは、ドキュメンテーションとソース コードが公開されていないVMware ESXカーネル用のビルドをドライバーがサポートしていることを意味します。VMware ESX カーネルは、一般に「vmkernel」と呼ばれるハイパーバイザーです。bnx2.c__VMKLNX__のように、既存のドライバーのコード コメントを調べることで、目的を推測できます。

#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 に答える