工人舎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これは、最近の Linux ではカーネルソースに linux/config.h がなくなったからであるらしいので、ないものは作ればよい。作り方はこれでいいかは知らんが Makefile は黙る...
$ cd VT6656_Linux_src_v1.21.03_x86/
$ make
...
Makefile:116: *** Linux kernel source not configured - missing config.h. Stop.
$ sudo touch /lib/modules/3.2.0-51-generic-pae/build/include/linux/config.h
...かとおもったらそうでもない。
$ makeあせったけれど、よくよくコマンドラインをみるとヘッダの場所を教えていないのでコンパイルできるわけがない。それはなぜかと make -p の結果を読んだりしてみると、どうやら Makefile 内の .c.o ルールが使われていないみたい。
...
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
対症療法だけど、システムの %.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 件のコメント:
コメントを投稿