2013-08-07

モジュールのビルド つづき

何もしないモジュールの例
http://wiki.bit-hive.com/tomizoo/pg/Loadable%20Kernel%20Module%A4%CE%BA%EE%A4%EA%CA%FD
を試してみたら、カーネル 3.2.0 でもプログラムと Makefile は動作した。
(ただし、config.h は先日のインチキなので、これからはよしたほうがいいだろう)。

つまり、モジュールのファイル名が *.ko になったとか、そういった特徴はカーネル 2.6 のころから変わっていないわけだ。

そうおもって VNT6656 ドライバの Makefile を読み直してみると、なぜ全然まともなビルドプロセスにならないかが見えてきた。

この Makefile は、uname -r を sed でホゲってカーネルバージョンをとりだして、それで gmake の ifeq を使って分岐しているんだが、そこで 2.6 決め打ちをしているのである。そんなら話は簡単、強引に 2.6 という文字列を作らせてしまえばいいのである。

27c27
< KVER := $(shell uname -r | cut -c1-3 | sed 's/2\.[56]/2\.6/')
---
> KVER := $(shell uname -r | cut -c1-3 | sed 's/2\.[56]\|3\.2/2\.6/')
ここで、 sed の正規表現での A or B は A\|B ということに注意。はまる。

これで make から make -C なんちゃらを呼ぶプロセスに入る。

次のエラーは、ずっとまっとうである。

$ make
make -C /lib/modules/3.2.0-51-generic-pae/build SUBDIRS=/home/toyoda/work-vt6656/driver modules
make[1]: Entering directory `/usr/src/linux-headers-3.2.0-51-generic-pae'
  CC [M]  /home/toyoda/work-vt6656/driver/main_usb.o
/home/toyoda/work-vt6656/driver/main_usb.c:390:2: error: unknown field 'ndo_set_multicast_list' specified in initializer
/home/toyoda/work-vt6656/driver/main_usb.c:390:2: warning: initialization from incompatible pointer type [enabled by default]
/home/toyoda/work-vt6656/driver/main_usb.c:390:2: warning: (near initialization for 'vntwusb_netdev_ops.ndo_select_queue') [enabled by default]
/home/toyoda/work-vt6656/driver/main_usb.c: In function 'device_set_multi':
/home/toyoda/work-vt6656/driver/main_usb.c:2454:26: warning: unused variable 'mclist' [-Wunused-variable]
2つあるみたいだけど、先の方(390行目)をチェックしてみると、struct net_device_ops に ndo_set_multicast_list というメンバがないみたいなんだよね。

そこらに落ちてる 2.6.32 のヘッダ3.2のヘッダを見比べてみると、ほんとうにそのメンバだけなくなっている。何が代替だか自明でなさそうなので、とりあえず消しちゃうことにする。

@@ -387,7 +387,9 @@
     .ndo_stop        = device_close,
     .ndo_get_stats        = device_get_stats,
     .ndo_start_xmit        = device_xmit,
+#ifdef HAVE_MULTICAST
     .ndo_set_multicast_list    = device_set_multi,
+#endif
     .ndo_do_ioctl        = device_ioctl,
 };
 #endif

すると、他の警告がいっぱい表示されながらもビルドに成功して vntwusb.ko ができた。

試すのはまた明日移行にしようかな。遅いし。

0 件のコメント:

コメントを投稿