R8168ドライバを継続して認識させる Fedora18編の半分続きです。
kernelを3.8.1に入れ替えるとLANが応答しなくなり大ピンチ。
モジュールにまた不具合が出たんだろうな~と思いながら処理を。
kernel3.8系でコードが変更されたらしい
コンパイラが出したエラーを元にそれらしい記事を検索して見つけた記事。
Linuxカーネル3.8でVMWare Playerを使う – 雑記帳 | ちょっとした文章とかメモ書きとか。
kernel3.8系では__devinitや__devexitなどの定義が無くなったらしい、と言うことを確認。
とりあえずこれを参考にR8168のソースコード中で同じように直す必要なあるポイントをすべて直してみましょう、と。
で、patchがこれ
linux-3.8_r8168_hotplug_struct.patch
--- r8168_n.c 2012-12-19 19:38:56.000000000 +0900 +++ r8168_n_new.c 2013-03-06 16:00:00.000000000 +0900 @@ -14541,7 +14541,11 @@ spin_unlock_irqrestore(&tp->phy_lock, flags); } +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0) static int __devinit +#else +static int +#endif rtl8168_init_board(struct pci_dev *pdev, struct net_device **dev_out, void __iomem **ioaddr_out) @@ -14711,7 +14715,11 @@ goto out; } +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0) static void __devinit +#else +static void +#endif rtl8168_init_sequence(struct rtl8168_private *tp) { void __iomem *ioaddr = tp->mmio_addr; @@ -14964,7 +14972,11 @@ }; #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0) static int __devinit +#else +static int +#endif rtl8168_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { @@ -15128,7 +15140,12 @@ return 0; } + +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0) static void __devexit +#else +static void +#endif rtl8168_remove_one(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); @@ -17649,7 +17666,11 @@ .name = MODULENAME, .id_table = rtl8168_pci_tbl, .probe = rtl8168_init_one, +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0) .remove = __devexit_p(rtl8168_remove_one), +#else + .remove = rtl8168_remove_one, +#endif #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,11) .shutdown = rtl8168_shutdown, #endif
これでコンパイルも通りますし、実際にモジュールをインストールして動作することは確認しています。
kernelを入れ替える前に気がつけばもうけ物
dkmsと言えどもコンパイルが失敗してしまえばさすがにドライバは入らないですよね。
yumなどでkernelを入れ替えるときにはドライバが生成されたかどうかを確認した方が良いと思います。
(作成に成功すれば/var/lib/dkms以下にドライバファイルが作成されます)
LANが無効になってからこの記事を見るのとkernelを更新する前に見るのとでは大違いですよね・・・。