2013-08-04

VIA VNT6656 USB Wifi Module を Ubuntu からまだ使えていないメモ

まあ表題のとおりなわけでダメなんだけど、ダメなりにメモを残しておこう。

工人舎MLというネットブックを持っていて、金物は元気なんだけどWindows XPだからそろそろ延命策を考えたいところ。とりあえず、楽そうなところでUbuntu 12.04 LTS を入れたらさくっと動いたのでそこはよし。Tipsがあるとすれば、BIOSではブータブルUSBはHDD扱いされるということかな。

で、内蔵無線LANがVIA VNT6656なんだけど、これがどうも始末の悪いものであるらしい。

http://www.linuxforums.org/forum/suse-linux/147396-install-via-vnt6656-wireless-usb.html

最後を見ると、ありがたくもVIAがドライバを出してくれてはいるのだけれど、これが古い。

http://www.viaembedded.com/en/products/boards/1890/1/VNT6656_USB_Module_/_Dongle.html

Ubunto 11.04 まで対応なんだけどね。うーんちょっとサポート切れバージョンに戻すのも心配だよね。もともとXP移行なんで、なにやってるかわからない。

まず、インストラクションにのっとって unzip; make clean; make を試みると、 driver/Makefileが爆死。

$ unzip VT6656_Linux_src_v1.21.03_x86_11_04.zip
$ cd VT6656_Linux_src_v1.21.03_x86/
$ make
...
Makefile:116: *** Linux kernel source not configured - missing config.h.  Stop.
これは、最近の Linux ではカーネルソースに linux/config.h がなくなったからであるらしいので、ないものは作ればよい。作り方はこれでいいかは知らんが Makefile は黙る...
 $ sudo touch /lib/modules/3.2.0-51-generic-pae/build/include/linux/config.h

...かとおもったらそうでもない。
$ make
...
gcc    -c -o main_usb.o main_usb.c
In file included from main_usb.c:50:0:
device.h:40:24: fatal error: linux/init.h: No such file or directory
compilation terminated.
make[1]: *** [main_usb.o] Error 1
 あせったけれど、よくよくコマンドラインをみるとヘッダの場所を教えていないのでコンパイルできるわけがない。それはなぜかと make -p の結果を読んだりしてみると、どうやら Makefile 内の .c.o ルールが使われていないみたい。

対症療法だけど、システムの %.o: %.c ルールに然るべきコンパイラオプションを渡すには、 無視されてしまう EXTRA_CFLAGS 変数の代わりに CFLAGS に同じことを設定すればいい。で、その設定らしきものが既に Makefile にコメントで入っているという中途半端な状態。

とりあえず、こうするとヘッダが見つけられるようにはなる。

$ diff -ru VT6656_Linux_src_v1.21.03_x86 work-vt6656/
diff -ru VT6656_Linux_src_v1.21.03_x86/driver/Makefile work-vt6656/driver/Makefile
--- VT6656_Linux_src_v1.21.03_x86/driver/Makefile    2009-09-07 09:53:36.000000000 +0900
+++ work-vt6656/driver/Makefile    2013-08-04 23:05:11.296911687 +0900
@@ -62,12 +62,13 @@


 ifeq ($(HOSTAP), 1)
-#  CFLAGS += -DHOSTAP
+  CFLAGS += -DHOSTAP
   EXTRA_CFLAGS += -DHOSTAP
 endif


-#CFLAGS += -I$(PWD) -I$(PWD)/../include -I$(PWD)/include
+CFLAGS += -I$(PWD) -I$(PWD)/../include -I$(PWD)/include -I$(KSRC)/include \
+    -I$(KSRC)/arch/x86/include
 EXTRA_CFLAGS += -I$(PWD) -I$(PWD)/../include -I$(PWD)/include

 # build rule
@@ -113,7 +114,7 @@
 endif

 ifeq (,$(wildcard $(CONFIG_FILE)))
-  $(error Linux kernel source not configured - missing config.h)
+  $(error Linux kernel source not configured - missing config.h in $(KSRC))
 endif

 ifneq (,$(findstring egcs-2.91.66, $(shell cat /proc/version)))
@@ -126,10 +127,10 @@
 CC := $(foreach cc, $(CC), $(test_cc))
 CC := $(firstword $(CC))

-#CFLAGS += -Wall -DLINUX -D__KERNEL__ -DMODULE  -DEXPORT_SYMTAB -D__NO_VERSION__ -O2 -pipe
-#CFLAGS += -I$(KSRC)/include -Wstrict-prototypes -fomit-frame-pointer -fno-strict-aliasing
-#CFLAGS += $(shell [ -f $(KSRC)/include/linux/modversions.h ] && \
-#            echo "-DMODVERSIONS -include $(KSRC)/include/linux/modversions.h")
+CFLAGS += -Wall -DLINUX -D__KERNEL__ -DMODULE  -DEXPORT_SYMTAB -D__NO_VERSION__ -O2 -pipe
+CFLAGS += -I$(KSRC)/include -Wstrict-prototypes -fomit-frame-pointer -fno-strict-aliasing
+CFLAGS += $(shell [ -f $(KSRC)/include/linux/modversions.h ] && \
+            echo "-DMODVERSIONS -include $(KSRC)/include/linux/modversions.h")
 EXTRA_CFLAGS += -Wall -DLINUX -D__KERNEL__ -DMODULE  -DEXPORT_SYMTAB -D__NO_VERSION__ -O2 -pipe
 EXTRA_CFLAGS += -I$(KSRC)/include -Wstrict-prototypes -fomit-frame-pointer -fno-strict-aliasing
 EXTRA_CFLAGS += $(shell [ -f $(KSRC)/include/linux/modversions.h ] && \
Only in work-vt6656/: make.log
Only in work-vt6656/: utility

で、現状、 カーネルソースヘッダの arch/x86/include/asm/arch_hweight.h:53:7 でexpected ‘:’ or ‘)’ before ‘POPCNT64’ と言われて止まる。

このへんはアセンブリなので正直分からないのだけれど、構文エラーということは、おそらくはマクロの未定義とかなんとか、正しいヘッダの読み方をしていないからだろう。

が、しかし、それが何なのかはわからない。


0 件のコメント:

コメントを投稿