2007-03-21

最新のnForceマザーボードをXenで使うためにforcedethドライバをハックする

統合チップセットnForceの搭載されたマザーボードは市場に多く出回っている。
これにオンボード搭載されているイーサネットを Linuxで使いたければ、大抵 forcedeth というドライバで動作させることができる。
しかし、nForceのオンボードイーサネットコントローラにも色々バージョンがあるようで、forcedethドライバのバージョンが古い(つまりカーネルのバージョンが古い)とドライバ内のデバイス識別子リストに該当せず認識させられないことがある。
nForceに限らずこれはシリーズ物のハードウェア全般に言えることだが。

さて、この前買ってきた nForce430マザーに搭載のイーサネットコントローラは Linux 2.6.16の forcedethドライバで認識できなかった。単にドライバが新しいデバイスのIDを知らないだけだというのは何となく想像がつく。
かといって Linuxのバージョンを上げるわけにはいかない状況だった。なぜかというと Xenを使っているから。
私は Portageと genkernelを使ってしか Xen対応のカーネルをセットアップできないヘタレ者なので、仮に Xenがもっと新しい Linuxカーネルに対応していたとしても Portageが追従しない以上手出しできない(ことにしている)。

デバイスIDを追加するだけならドライバソースに手で入れてやれば良い。

---
Xen対応化されたカーネル
linux-2.6.16-28-xen

最新のカーネル
linux-2.6.20.3
---

まずは、最新のPCIデバイスリストを最新カーネルから拝借

# cp linux-2.6.20.3/include/linux/pci_ids.h linux-2.6.16-28-xen/include/linux/

で、
linux-2.6.20.3/drivers/net/forcedeth.c
linux-2.6.16-28-xen/drivers/net/forcedeth.c
の中でデバイスリストを定義している部分に目を付け、ここを中心に手マージする。
なお今回は、MCP61というデバイスのIDがリストになかったためデバイスが認識されないでいた。

デバイスIDの追加で、一応はデバイスが認識されるようになったが動作がおかしい。
どうやら一部のチップでは MACアドレスのオーダが逆順になるらしい。シリーズ物なのにそんな微妙な個性ださなくてよろしい。
最新カーネルのドライバソースにはそれの対応も含まれていたので、めんどくせえなと思いつつその部分も手マージ。
これで思った通りに動作した。

できたdiffを載せようかと思ったけど誰か他の人がこれと同じシチュエーションに遭遇するケースはかなりレアだと思うのでやめ。

当然だが、こういう真似をするためにはC言語を読めることが必須。

ラベル:

0 件のコメント:

コメントを投稿

<< ホーム