雑記帳

ちょっとした文章とかメモ書きとか。

Linuxカーネル3.8でVMWare Playerを使う

カーネルを上げると何かしら動かない箇所が出てしまいます。

今度はVMWareのドライバでした…orz

環境:
Ubuntu Linux 12.04.2 LTS
Kernel 3.8.1

VMCIがコンパイルエラーとなってしまいます。
これは、Hotplug関連のマクロである__devexit_p,__devinit,__devexitなどが、カーネル3.8以降で削除されているためです。

という訳でこれを修正してみます。
linux-3.8_vmci_pci_hotplug_struct.patch:

--- vmci-only/linux/driver.c    2012-11-01 16:22:03.000000000 +0900
+++ vmci-only/linux/driver.c.edited    2013-03-01 04:21:08.402942111 +0900
@@ -124,7 +124,11 @@ static struct pci_driver vmci_driver = {
.name     = "vmci",
.id_table = vmci_ids,
.probe = vmci_probe_device,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)
.remove = __devexit_p(vmci_remove_device),
+#else
+   .remove = vmci_remove_device,
+#endif
};

#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19)
@@ -1750,7 +1754,11 @@ vmci_enable_msix(struct pci_dev *pdev) /
*-----------------------------------------------------------------------------
*/

-static int __devinit
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)
+ static int __devinit
+#else
+ static int
+#endif
vmci_probe_device(struct pci_dev *pdev,           // IN: vmci PCI device
const struct pci_device_id *id) // IN: matching device ID
{
@@ -1978,7 +1986,11 @@ vmci_probe_device(struct pci_dev *pdev,
*-----------------------------------------------------------------------------
*/

-static void __devexit
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)
+ static void __devexit
+#else
+ static void
+#endif
vmci_remove_device(struct pci_dev* pdev)
{
struct vmci_device *dev = pci_get_drvdata(pdev);

このパッチを当てるには次のようにします。 vmci_patch.sh:

cd /usr/lib/vmware/modules/source
tar -xf vmci.tar
cd vmci-only
patch -p1 < [path to patchfile]
cd ..
tar -cf vmci.tar vmci-only/
#出典:http://communities.vmware.com/thread/432897

これで、パッチが当たりました。カーネルモジュールのビルドは次のようにします。

$ sudo vmware-modconfig --console --install-all

これにより、何もエラーが出ていなければ3.8でもVMWare player 5.0.1を使うことができます。

もしもkernel/version.hでエラーとなるなら次の対策もする必要があります→Linuxカーネル3.7でVMWare Playerを使う

参考:[patch] Vmware 9 on Linux Kernel 3.8rc4

追記:VMWare player 5.0.2でこの問題は解決しました。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。