FreeBSD 8.0 で SOTEC C103 の無線 LAN (Atheros AR928X) を有効にする手順

現状と下準備

 一応、FreeBSD 8.0-RELEASE-p2 で起動時に、ath0 というデバイスは表示されるものの、私ではこれをうまく設定することができなかった。そこで今回も、ndis0 を使用することにした。とりあえず参考までにうまくいかなかった例も、この記事の末尾に示した。

 まず、windows 用のドライバである athw.sys と oem26.inf を用意して、ndis 用のデバイスドライバを作成する。その手順は、FreeBSD 7.2 で SOTEC C103 の無線 LAN を有効にする手順 - r_coppeliaの日記 に記述したので今回は省略。

ndis を使用する例。

athw_sys.ko の生成と /boot/loader.conf の設定。

 上の blog の手順に従って、athw_sys.ko というファイルを生成し、それを下のようにして /boot/kernel/ ディレクトリなどに配置。

# cp -i athw_sys.ko /boot/kernel/

 そして /boot/loader.conf に、下記の一行を書き加えた。この一行によって、FreeBSD が起動時に、自動的にこの作成したデバイス・ドライバが読み込まれる。

athw_sys_load="YES"
/etc/rc.conf の設定と、パスワードのために /etc/wpa_supplicant.conf を設定する。

 つぎは、/etc/rc.conf の設定と、パスワードなどの設定。まず /etc/rc.conf の末尾に、下記の二行を書き加える。これで(無線 LAN ルータなどで DHCP が有効になっているのなら) FreeBSD を起動したさいに、wlan0 というデバイスに、IP アドレスなどが割り振られることになる。

wlans_ndis0="wlan0"
ifconfig_wlan0="WPA DHCP"


 また、/etc/wpa_supplicant.conf というファイルを作成した。ここにパスワードなどを記述する。
その中身は以下の通り。

ctrl_interface=/var/run/wpa_supplicant
ap_scan=2

network={
	ssid=" この中には ssid キーが入っている。 "
	bssid= ここにも bssid を入力
	scan_ssid=1
	key_mgmt=WPA-PSK
	psk=" この中には、psk のキーが入ってる。"
}
再起動

 あとは再起動。再起動後に ifconfig などと入力すれば、ndis0 と wlan0 というデバイスが生成されているはず。そして wlan0 に IP アドレスなどが割り振られているはず。割り振られていたら、めでたしめでたし。

再起動後の ifconfig wlan0 の出力結果
> ifconfig wlan0
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	ether 省略
	media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g
	status: associated
	ssid 省略 channel 3 (2422 Mhz 11g) bssid 省略
	country US authmode WPA2/802.11i privacy OFF powersavemode CAM
	powersavesleep 100 txpower 0 bmiss 7 mcastrate 6 mgmtrate 6
	scanvalid 60 protmode CTS roaming MANUAL bintval 0

参考までに、 ndis を使わず、うまくいかなかった例その1

その設定。

 /boot/loader.conf には以下の一行を記述。

if_ath_load="YES"

 /etc/rc.conf には以下の二行を記述。

wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"
再起動時の dmesg
> dmesg | grep ath
module ath already present!
ath0: <Atheros 9280> mem 0xd0000000-0xd000ffff irq 16 at device 0.0 on pci2
ath0: [ITHREAD]
ath0: AR9280 mac 128.2 RF5133 phy 13.0
ifconfig wlan0 と ifconfig ath0 の出力結果。
# ifconfig wlan0
wlan0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
	ether (この記述は省略。)
	media: IEEE 802.11 Wireless Ethernet autoselect (autoselect)
	status: no carrier
	ssid "" channel 1 (2412 Mhz 11b)
	regdomain 96 indoor ecm authmode WPA2/802.11i privacy ON
	deftxkey UNDEF txpower 20 bmiss 7 scanvalid 450 bgscan bgscanintvl 300
	bgscanidle 250 roam:rssi 7 roam:rate 1 wme burst roaming MANUAL
	bintval 0
#
# ifconfig ath0
ath0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 2290
	ether (この記述は省略。)
	media: IEEE 802.11 Wireless Ethernet autoselect (autoselect)
	status: no carrier
# 
さらに wpa_supplicant を手動で実行した結果

 起動後、一応、念のためにさらに wpa_suuplicant を wlan0 と ath0 に対して、手動で実行してみたときの実行結果。

# wpa_supplicant -c/etc/wpa_supplicant.conf -iwlan0
ctrl_iface exists and seems to be in use - cannot override it
Delete '/var/run/wpa_supplicant/wlan0' manually if it is not used anymore
Failed to initialize control interface '/var/run/wpa_supplicant'.
You may have another wpa_supplicant process already running or the file was
left by an unclean termination of wpa_supplicant in which case you will need
to manually remove this file before starting wpa_supplicant again.

ioctl[SIOCS80211, op 26, arg 0x0]: Operation not supported
Failed to disable WPA in the driver.
ELOOP: remaining socket: sock=4 eloop_data=0x28406140 user_data=0x2840d040 handler=0x8069f40
# 
# wpa_supplicant -c/etc/wpa_supplicant.conf -iath0
ioctl[SIOCG80211, op 98, len 32]: Invalid argument
Failed to initialize driver interface
ELOOP: remaining socket: sock=4 eloop_data=0x28406140 user_data=0x2840d040 handler=0x8069f40
# 

うまくいかなかった例その2。/etc/rc.conf に ifconfig_ath0="WPA DHCP" と記述した例。

設定

 /boot/loader.conf はその1と同じ。/etc/rc.conf は、以下のように記述。

ifconfig_ath0="WPA DHCP"
wpa_supplicant を手動で実行した結果

 起動後、一応、念のために wpa_suuplicant を手動で実行してみたときの実行結果。

# wpa_supplicant -c/etc/wpa_supplicant.conf -iath0
ioctl[SIOCG80211, op 98, len 32]: Invalid argument
Failed to initialize driver interface
ELOOP: remaining socket: sock=4 eloop_data=0x28406140 user_data=0x2840d040 handler=0x8069f40
#