D01NXIIドライバについて進展(というか勘違いしていたので訂正)

D01NX(II)のドライバがmakeできないことは、Linuxカーネルのリリースアップによることが原因だと思っていたが、実は違っていた。
D01NX系が内蔵しているチップがElan社のVMB5000であることは以前書いたが、これがコンパイルできない根本原因は、CentOS5.3、Debian5で試した時共に、うまくカーネルソースを参照できていないことにあった。
結局、www.jp.kernel.orgから2.6.19のカーネルを持ってきて、またDebian5ではlinux-source-2.6(これは2.6.26ベース)をaptitude installすることで、カーネルソースを見て調べた。遠回りしたことになったが、答えはVMB5000ドライバのソースの中にあった。
ざっくり言うと、
私は勘違いしていて、例えばDebian5では、(ドライバなのだから)カーネルのヘッダだけを参照すれば良いと思っていた。つまり、/usr/src/linux-headers-2.6.26-2-{686, common}/include下を見ることができればmakeできると思い込んでいた。
実際には、/drivers/usb下にあるヘッダなどを参照する必要があるということがわかった。
VMB5000ドライバのソースは/usr/src/linux決めうちで、この下にカーネルソースがあるとして参照、makeしようとするので、カーネルソースを展開し
# ln -s ~/linux-source-2.6.26 /usr/src/linux
とすることで、先に進めるようになった。

ところが、VMB5000ドライバソースのコメントによれば、2.6.19をベースにコーディングされている。そして、2.6.19と2.6.26ではパワーマネージメント制御の構造が異なっていて、素直に2.6.26にポーティングできない。これは、とりあえずパワーマネージメント処理を抜くCONFIG_PM定義をundefすることで逃げた。

なのだが、残念ながらまだ動作するには至っていない。
vmb_hcdドライバはmodprobeしたり、D01NXIIを差し込んだりすると自動的にモジュールがロードされる。ところが、vmb_hcdドライバでグローバル宣言している「ハズ」のvmb_driverという構造体が、これを参照しようとするvmb_csドライバで参照できず、vmb_csドライバが組み込まれないのだ。
カーネルのドキュメント(/Documentsの下を調べたところ、モジュール間でシンボルをエクスポートし、別のモジュールでこれをextern宣言で取り込む、という機能がうまく動作していない。ドキュメントを読む限りでは、おかしいことをしているようには思えないのだが、なにかmake環境に問題があるのだと思われる。。。
Linuxドライバモジュール開発などやったことないので、完全に手探りでやっているため、今のところ自分なりには手を尽くしたつもりだが、現状うまくいっていない。。。