VMware ESXi 4 のカスタム oem.tgz を作成する

提供:maruko2 Note.
移動: 案内, 検索

ESXi 4.0.0 Update1 に標準の Broadcom ドライバ(tg3.o)は、Broadcom NetLink BCM57780 に未対応なため、VMware Open Source と Broadcom の最新のドライバのソースコードから ESXi 用のドライバをビルドし、カスタム oem.tgz を作成する。

目次

必要なもの

VMware Open Source

Broadcom NetLink BCM57780 ドライバのソースコード

USB メモリブートする VMware ESXi 4

ESXi 4 用に Broadcom NetLink BCM57780 ドライバをビルドする

ビルド環境

CentOS 5.5 x86_64

gcc

ビルド手順

VMware-esx-public-source-4.0-208249.tar.gzlinux-3.105h.zip をホームディレクトリにコピーする。

VMware-esx-public-source-4.0-208249.tar.gz を、作成した vmware-oss ディレクトリ内に解凍する。

cd ~
mkdir vmware-oss
cd vmware-oss
tar -xzf ~/VMware-esx-public-source-4.0-208249.tar.gz

解凍してできた vmkdrivers-gpl.tgz を drivers ディレクトリに解凍し、tg3 ドライバのソースを全て削除する。

mkdir drivers
cd drivers
tar xzf ../vmkdrivers-gpl.tgz
rm -f vmkdrivers/src26/drivers/net/tg3/*

linux-3.105h.zip を解凍後、ドライバのソースコードを vmware-oss 内の tg3 ディレクトリにコピーする。

cd ~
unzip -jp linux-3.105h.zip Server/Linux/Driver/tg3-3.105h.tar.gz | tar -xzf -
cp tg3-3.105h/* vmware-oss/drivers/vmkdrivers/src26/drivers/net/tg3/

vmware-oss 内の tg3 ディレクトリに移動し、tg3_flags.h を作成後、tg3_flags.h に #define VMWARE_ESX_40_DDK の行を追加する。

cd ~/vmware-oss/drivers/vmkdrivers/src26/drivers/net/tg3/
./makeflags.sh ~/vmware-oss/drivers/vmkdrivers/src26/ > tg3_flags.h
vi tg3_flags.h

このままビルドしてもエラーになるため、tg3.c を下記のように修正する。[1][2]

  1. --- tg3-3.105h/tg3.c    2010-02-05 09:35:28.000000000 +0900
  2. +++ vmware-oss/drivers/vmkdrivers/src26/drivers/net/tg3/tg3.c   2010-05-29 10:19:00.000000000 +0900
  3. @@ -15310,7 +15310,11 @@
  4.  #ifdef BCM_HAS_NEW_INIT_WORK
  5.         INIT_WORK(&tp->reset_task, tg3_reset_task);
  6.  #else
  7. +#if 0
  8.         INIT_WORK(&tp->reset_task, tg3_reset_task, tp);
  9. +#else
  10. +       INIT_WORK(&tp->reset_task, tg3_reset_task);
  11. +#endif
  12.  #endif
  13.  
  14.         tp->regs = pci_ioremap_bar(pdev, BAR_0);

build-vmkdrivers.sh スクリプトを使い、ドライバをビルドする。

cd ~/vmware-oss/drivers/
./build-vmkdrivers.sh

ドライバファイル(tg3.o)は、ディレクトリ ~/vmware-oss/drivers/bora/build/scons/build/vmkdriver-tg3.o/release/vmkernel64/ 内にできるので、コピーして利用する。

oem.tgz を作成する

oem.tgz は、ESXi が起動する時に自動的に展開され、展開したディレクトリ構成のまま ESXi のシステムを上書きする。

NIC の情報を取得する

あらかじめ、USB メモリブートする VMware ESXi 4 を用意し、USB メモリでブートする。

NIC が未対応だと起動途中で止まるので、unsupported とタイプし(画面に表示されないので注意) Tech Support Mode に切り替える。

Password: は、デフォルトでは空白なので、設定していなければ何も入力しない。

手動で Tech Support Mode に切り替えるには、起動途中(黄色と黒の画面の時)に Alt + F1 キーを押す。

Tech Support Mode ではシェルが使えるようになる。

該当する NIC の情報を lspcihwinfo コマンドを使い取得する。

~ # lspci -v
01:00:00 Ethernet controller Network controller: Broadcom Corporation
         Class 0200: 14e4:1692
~ # hwinfo -p
01:00:00 14e4:1692 10cf:1533 10/ 10/0x79 A V

simple.map と pci.ids をコピーする

oem.tgz を作成するために必要な simple.mappci.ids をブートした USB メモリにコピーする。

cp /etc/vmware/simple.map /bootbank/
cp /etc/vmware/pci.ids /bootbank/

/bootbank ディレクトリは、ESXi の USB メモリを Windows や Mac に接続したときに見える Hypervisor1 ボリュームと一致する。

reboot コマンドで、ESXi を終了する。(/sbin/shutdown.sh でも終了するかもしれない。)

~ # reboot

simple.map と pci.ids を編集する

simple.map と pci.ids を適当なテキストエディタで編集する。[3]

simple.map に下記行を追記する。

14e4:1692 10cf:1533 network tg3.o

pci.ids に下記行を追記する。

14e4  Broadcom Corporation
省略
	1684  NetXtreme BCM5764M Gigabit Ethernet PCIe
	1692  NetLink BCM57780 Gigabit Ethernet PCIe     ←この行を追加する
	1693  NetXtreme BCM5787M Gigabit Ethernet
省略

oem.tgz を作成する

編集作業後の pci.idssimple.map、ビルドした tg3.o ファイルを、下記のようなディレクトリ構成を作り、配置する。

oem
|-- etc
|   `-- vmware
|       |-- pci.ids
|       `-- simple.map
`-- usr
    `-- lib
        `-- vmware
            `-- vmkmod
                `-- tg3.o

例えば /tmp とかに作る。

mkdir -p /tmp/oem/etc/vmware
mkdir -p /tmp/oem/usr/lib/vmware/vmkmod

oem.tgz のディレクトリ構成は、起動中の ESXi のディレクトリ構成と同じ。 ESXi のディレクトリ構成を確認する方法としては、

  • ESXi 起動途中に Alt + F1 キー を押し Tech Support Mode に切り替え、shell を使い確認する。
  • あるいは、ESXi の sshd を有効にしリモートログインすることで確認することもできる。

etc と usr ディレクトリを oem.tgz というファイル名で固める。(ディレクトリやファイルのパーミッションをいろいろと編集しなくても問題なく動く。)

cd /tmp/oem
tar czf oem.tgz etc usr

固めた oem.tgzHypervisor1 ボリュームにコピーして完成。

USB メモリからブートし、vSphere Client のネットワークアダプタで確認。

esxi4-broadcom-netlink-bcm57780.png

Download

今回作った oem.tgz vmware-esxi4-BCM57780-oem.tgz (721KB)

脚注

  1. diff -u tg3-3.105h/tg3.c vmware-oss/drivers/vmkdrivers/src26/drivers/net/tg3/tg3.c
  2. http://imarginal.wordpress.com/2010/05/19/dell-のマグロを鯖にする/
  3. ここからの手順は Mac OS X でも問題なくできる。

参考ページ

VMware 関連のページ

LINEで送る このエントリーをはてなブックマークに追加
個人用ツール
名前空間
変種
表示
操作
案内
ツールボックス

注目のページ

このサイトのはてなブックマーク数