組込み機器のターゲットで、無線が使いたいのでターゲット上で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を入れ替える必要があるのかな~