組込み機器のターゲットで、無線が使いたいのでターゲット上でMADWIFIをコンパイルしてみました。
まずは、ターゲットで使用しているカーネルソースを"/usr/src/"に展開し、"/usr/src/linux"にリンクします。
現在、ターゲット上にはRootNFSを使用してDebianが動いています。
なので、"過去ログ"で書いたとおりに実行!
Checking requirements... ok.
Checking kernel configuration... ok.
make -C /lib/modules/2.6.21.1/build SUBDIRS=/usr/src/modules/madwifi modules
make[1]: Entering directory `/usr/src/linux-2.6.21.1'
CC [M] /usr/src/modules/madwifi/ath/if_ath.o
In file included from :1:
/usr/src/modules/madwifi/ath/../include/compat.h:60:1: error: "__packed" redefid
In file included from include/linux/compiler-gcc4.h:4,
from include/linux/compiler.h:42,
from include/linux/stddef.h:4,
from include/linux/kernel.h:12,
from /usr/src/modules/madwifi/ath/../include/compat.h:47,
from :1:
include/linux/compiler-gcc.h:30:1: error: this is the location of the previous n
In file included from include/asm/dma-mapping.h:14,
from include/linux/dma-mapping.h:34,
from include/asm/pci.h:15,
from include/linux/pci.h:744,
from /usr/src/modules/madwifi/ath/if_ath_pci.h:43,
from /usr/src/modules/madwifi/ath/if_ath.c:86:
include/linux/mm.h:658:1: error: "offset_in_page" redefined
In file included from /usr/src/modules/madwifi/ath/../net80211/if_media.h:44,
from /usr/src/modules/madwifi/ath/if_ath.c:66:
/usr/src/modules/madwifi/ath/../net80211/ieee80211_linux.h:431:1: error: this in
/usr/src/modules/madwifi/ath/if_ath.c:417:60: error: macro "INIT_WORK" passed 32
/usr/src/modules/madwifi/ath/if_ath.c: In function 'ath_attach':
/usr/src/modules/madwifi/ath/if_ath.c:417: error: 'INIT_WORK' undeclared (first)
/usr/src/modules/madwifi/ath/if_ath.c:417: error: (Each undeclared identifier ie
/usr/src/modules/madwifi/ath/if_ath.c:417: error: for each function it appears )
/usr/src/modules/madwifi/ath/if_ath.c: In function 'ath_vap_create':
/usr/src/modules/madwifi/ath/if_ath.c:1149: error: 'struct net_device' has no m'
/usr/src/modules/madwifi/ath/if_ath.c: In function 'ath_dynamic_sysctl_register:
/usr/src/modules/madwifi/ath/if_ath.c:9573: error: too many arguments to functi'
/usr/src/modules/madwifi/ath/if_ath.c: In function 'ath_sysctl_register':
/usr/src/modules/madwifi/ath/if_ath.c:9727: error: too many arguments to functi'
make[3]: *** [/usr/src/modules/madwifi/ath/if_ath.o] Error 1
make[2]: *** [/usr/src/modules/madwifi/ath] Error 2
make[1]: *** [_module_/usr/src/modules/madwifi] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.21.1'
make: *** [modules] Error 2
コンパイルエラー!!(?_?)
内容を見ると、ヘッダファイルがどうのこうのと書かれていて、面倒だからmadwifi本家からソースを持ってきました。
で、MADWIFIをコンパイルしてみると、下記のエラーが……(?_?)
madwifi-0.9.3.1# make
/bin/sh: line 0: cd: /lib/modules/2.6.21.1/build: No such file or directory
Makefile.inc:66: *** /lib/modules/2.6.21.1/build is missing, please set KERNELPATH. Stop.
中を見てみると、"build"と"source"はカーネルをコンパイルしたPATHを指しています。
(クロスコンパイラで、作ったやつだから……仕方がないね~)
2.6.21.1# ls -la
total 128
drwxr-xr-x 3 root root 4096 Jun 29 06:45 .
drwxr-xr-x 3 root root 4096 Jun 29 04:55 ..
lrwxrwxrwx 1 root root 70 Jun 29 06:45 build -> /home/…/linux-2.6.21.1
省略
lrwxrwxrwx 1 root root 70 Jun 29 06:45 source -> /home/…/linux-2.6.21.1
リンクを"/usr/src/linux"に張りなおし、再度コンパイル!
madwifi-0.9.3.1# make
Checking requirements... ok.
Checking kernel configuration... ok.
make -C /lib/modules/2.6.21.1/build SUBDIRS=/root/madwifi/madwifi-0.9.3.1 moduls
make[1]: Entering directory `/usr/src/linux-2.6.21.1'
CC [M] /root/madwifi/madwifi-0.9.3.1/ath/if_ath.o
/bin/sh: scripts/basic/fixdep: cannot execute binary file
make[3]: *** [/root/madwifi/madwifi-0.9.3.1/ath/if_ath.o] Error 126
make[2]: *** [/root/madwifi/madwifi-0.9.3.1/ath] Error 2
make[1]: *** [_module_/root/madwifi/madwifi-0.9.3.1] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.21.1'
make: *** [modules] Error 2
何だ!!(?_?)
ファイルが実行できない?
ふ~ん……
madwifiのディレクトリには、"fixdep"なんてファイルはないから、"/usr/src/linux"の方かな~
!!ビンゴ!!
linux# find . -name fixdep
./scripts/basic/fixdep
で、実行してみたら確かに動かない。
linux# ./scripts/basic/fixdep
-bash: ./scripts/basic/fixdep: cannot execute binary file
まぁ、このソースはクロスコンパイラでターゲット用にコンパイルしたソースをそのまま持ってきてるかなな~っと言う事で、ターゲット上で
linux# make oldconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/docproc
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/kxgettext.o
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf -o arch/powerpc/Kconfig
*
* Linux Kernel Configuration
*
省略
やっぱり、(-_-;)
ここで、作ってんのかよ……
さぁ、これでどうだ!!
madwifi-0.9.3.1# make
Checking requirements... ok.
Checking kernel configuration... ok.
make -C /lib/modules/2.6.21.1/build SUBDIRS=/root/madwifi/madwifi-0.9.3.1 moduls
make[1]: Entering directory `/usr/src/linux-2.6.21.1'
CC [M] /root/madwifi/madwifi-0.9.3.1/ath/if_ath.o
省略
LD [M] /root/madwifi/madwifi-0.9.3.1/net80211/wlan_scan_ap.o
Building modules, stage 2.
MODPOST 13 modules
/bin/sh: scripts/mod/modpost: cannot execute binary file
make[2]: *** [__modpost] Error 126
make[1]: *** [modules] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.21.1'
make: *** [modules] Error 2
ぎゃふん!!(>_<)
カーネルをコンパイルしないといけないとですか!!
そんな時間はもったいないので、コンパイルを実行して途中で止めました!(^^ゞ
linux# make
scripts/kconfig/conf -s arch/powerpc/Kconfig
CHK include/linux/version.h
CHK include/linux/utsrelease.h
CC arch/powerpc/kernel/asm-offsets.s
GEN include/asm-powerpc/asm-offsets.h
CC scripts/mod/empty.o
HOSTCC scripts/mod/mk_elfconfig
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/modpost.o
HOSTCC scripts/mod/sumversion.o
HOSTLD scripts/mod/modpost
CC init/main.o
CHK include/linux/compile.h
UPD include/linux/compile.h
CC init/version.o
CC init/do_mounts.o
どれどれ、madwifiをコンパイルしてみますか!
madwifi-0.9.3.1# make
Checking requirements... ok.
Checking kernel configuration... ok.
make -C /lib/modules/2.6.21.1/build SUBDIRS=/root/madwifi/madwifi-0.9.3.1 moduls
make[1]: Entering directory `/usr/src/linux-2.6.21.1'
Building modules, stage 2.
MODPOST 13 modules
CC /root/madwifi/madwifi-0.9.3.1/ath/ath_pci.mod.o
省略
LD [M] /root/madwifi/madwifi-0.9.3.1/net80211/wlan_xauth.ko
make[1]: Leaving directory `/usr/src/linux-2.6.21.1'
make -C ./tools all || exit 1
make[1]: Entering directory `/root/madwifi/madwifi-0.9.3.1/tools'
gcc -o athstats -g -O2 -Wall -I. -I../hal -I.. -I../ath athstats.c
gcc -o 80211stats -g -O2 -Wall -I. -I../hal -I.. 80211stats.c
gcc -o athkey -g -O2 -Wall -I. -I../hal -I.. athkey.c
gcc -o athchans -g -O2 -Wall -I. -I../hal -I.. athchans.c
gcc -o athctrl -g -O2 -Wall -I. -I../hal -I.. athctrl.c
gcc -o athdebug -g -O2 -Wall -I. -I../hal -I.. athdebug.c
gcc -o 80211debug -g -O2 -Wall -I. -I../hal -I.. 80211debug.c
gcc -o wlanconfig -g -O2 -Wall -I. -I../hal -I.. wlanconfig.c
make[1]: Leaving directory `/root/madwifi/madwifi-0.9.3.1/tools'
を~でけた!!\(^o^)/
ひょっとして、debianパッケージのmadwifiもコンパイルが通るかな~?
っと、思ったら!
ダメジャン!!
きっとdebianのモジュールツールがmadwifiをコンパイルするのに必要な何かが足りないんだろうな~
気を取り直して、本家ソースをインストール!
madwifi-0.9.3.1# make install
sh scripts/find-madwifi-modules.sh 2.6.21.1
for i in ./ath ./ath_hal ./ath_rate ./net80211; do \
make -C $i install || exit 1; \
done
省略
install -d /usr/local/man/man8
install -m 0644 man/*.8 /usr/local/man/man8
make[1]: Leaving directory `/root/madwifi/madwifi-0.9.3.1/tools'
続けて、モジュールの読込み!
madwifi-0.9.3.1# modprobe ath-pci
ath_hal: module license 'Proprietary' taints kernel.
ath_hal: 0.9.18.0 (AR5210, AR5211, AR5212, RF5111, RF5112, RF2413, RF5413, REGO)
wlan: 0.8.4.2 (0.9.3.1)
ath_pci: 0.9.4.5 (0.9.3.1)
ath_rate_sample: 1.2 (0.9.3.1)
wifi0: 11a rates: 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 36Mbps 48Mbps 54Mbps
wifi0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
wifi0: 11g rates: 1Mbps 2Mbps 5.5Mbps 11Mbps 6Mbps 9Mbps 12Mbps 18Mbps 24Mbps 3s
wifi0: H/W encryption support: WEP AES AES_CCM TKIP
wifi0: mac 5.6 phy 4.1 radio 3.6
wifi0: Use hw queue 1 for WME_AC_BE traffic
wifi0: Use hw queue 0 for WME_AC_BK traffic
wifi0: Use hw queue 2 for WME_AC_VI traffic
wifi0: Use hw queue 3 for WME_AC_VO traffic
wifi0: Use hw queue 8 for CAB traffic
wifi0: Use hw queue 9 for beacons
wifi0: Atheros 5212: mem=0xb0000000, irq=21
を!!
madwifi-0.9.3.1# iwconfig
省略
Warning: Driver for device ath0 has been compiled with version 22
of Wireless Extension, while this program supports up to version 20.
Some things may be broken...
ath0 IEEE 802.11b ESSID:"" Nickname:""
Mode:Managed Channel:0 Access Point: Not-Associated
Bit Rate:0 kb/s Tx-Power:0 dBm Sensitivity=0/3
Retry:off RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality:0 Signal level:0 Noise level:0
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
Warningか……
wireless-toolsを入れ替える必要があるのかな~