FreeBSD 7.2 で SOTEC C103 の無線 LAN を有効にする手順

ndisgen を用いて、Windows 用のドライバを FreeBSD 用に変換する

 FreeBSD には、Windows 用に作られたネットワークインターフェイスのドライバを FreeBSD 用のドライバに変換してしまう機能がある。それを使ってみることにした。

必要なファイル

 まず Windows XPSOTEC C103 を起動し、どのファイルが 無線 LAN 用のドライバなのかを確認。

 どうやって確認したのかは覚えていないが、たしか c:\WINDOWS\system32\athw.sys が、そのファイルだったと思う。

 つぎに、もう一つ inf ファイルも必要なので、適切な inf ファイルも探し出さなければならない。これは確か、c:\WINDOWS\inf フォルダのなかから、まず拡張子 inf のファイルを選んで、つぎにそれらのファイルのうちで "athw.sys" という文字がファイル内に記述されているファイルを検索したのだったと思う。

 すると唯一 oem26.inf というファイルのなかにのみ、"athw.sys" という文字があったので、この oem26.inf が必要なファイルだろうと判断することにした。

 この二つを使えば、FreeBSD 用のドライバが生成できるようだ。

FreeBSD を起動し、Windows 領域をマウント

 あらためて C103 を FreeBSD で起動。私の C103 はデュアルブートにしてある。つまり、一つの HDD を複数に区切って、そのうちの一区画には Windows XP をインストールし、もう一つの区画には FreeBSD 7.2 をインストールしているというわけだ。

 なので、その HDD のなかの Windows XP の領域をマウントすることで、FreeBSD からアクセスできるようにすることにした。

まず、mount するためのディレクトリを作成
> sudo mkdir /dos 
つぎに Windows XP が入っている HDD の領域を表しているデバイスファイルを指定してマウント

 うちの場合、そのデバイスファイルは /dev/ad4s2 であるので引数に /dev/ad4s2 を指定。

> sudo mount -t ntfs /dev/ad4s2 /dos
> 

 これで、FreeBSD を起動中に、Windows XP のファイルにアクセスできるようになった。

無事に mount できたので、必要なファイルを適当な作業用のディレクトリにコピー

 とりあえず作業用のディレクトリとして tmp というディレクトリを作成することにした。

> mkdir ~/tmp

 つぎに、このディレクトリに、さきほど確認した二つのファイルをコピー。

> cp /dos/WINDOWS/inf/oem26.inf ~/tmp
> cp /dos/WINDOWS/system32/athw.sys ~/tmp


 あとは、この tmp ディレクトリに移動して、ndisgen を起動し、表示される英文を確認しつつ、順次、リターンキーを押していくだけ。これでうまくいけば、FreeBSD 用の無線 LAN ドライブである athw_sys.ko を生成することができるはずなのだが。

> cd ~/tmp
> ndisgen oem26.inf athw.sys

 しかし、最後に syntax error と表示されてしまった。私が必要としている FreeBSD 用の無線 LAN ドライバを生成することはできなかった。

	==================================================================
	------------------ Windows(r) driver converter -------------------
	==================================================================

			Driver file conversion

	The script will now try to convert the .INF and .SYS files
	using the ndiscvt(1) utility. This utility can handle most
	.INF files; however, occasionally it can fail to parse some files
	due to subtle syntax issues: the .INF syntax is very complex,
	and the Windows(r) parser will sometimes allow files with small
	syntax errors to be processed correctly which ndiscvt(1) will
	not. If the conversion fails, you may have to edit the .INF
	file by hand to remove the offending lines.

	Press enter to try converting the files now: 
ndiscvt: line 3163: : syntax error.
CONVERSION FAILED
>

 まあしかたがないので、しょんぼりしつつ、vim を起動し、その inf ファイルを開いて、なんとなくコメント行を一行削除してみたり、コメントを書き加えてみたりしたあとに、再度 ndisgen を実行してみた。すると無事に FreeBSD 用の無線 LAN ドライバとなる athw_sys.ko を生成することができた。もしかしたら改行コードの違いなどが原因なのかもしれない。

 その後、確認をかねて、もとの athr.sys と netathr.inf ファイルを再度、用意し、vim で一行だけ空行を挿入し、その空行を削除したあとに、その変更を保存して、vim を終了。そのあとに、ndisgen を実行したところ、やはり同じように問題なく athw_sys.ko を生成することができた。

ndisgen が成功したとき時の画面の出力

> ndisgen oem26.inf athw.sys

	==================================================================
	------------------ Windows(r) driver converter -------------------
	==================================================================

			INF file validation

	This .INF file appears to be ASCII.

	Press return to continue... 
	==================================================================
	------------------ Windows(r) driver converter -------------------
	==================================================================

			Driver file validation

	This .SYS file appears to be in Windows(r) PE format.

	Press return to continue... 
	==================================================================
	------------------ Windows(r) driver converter -------------------
	==================================================================

			Driver file conversion

	The script will now try to convert the .INF and .SYS files
	using the ndiscvt(1) utility. This utility can handle most
	.INF files; however, occasionally it can fail to parse some files
	due to subtle syntax issues: the .INF syntax is very complex,
	and the Windows(r) parser will sometimes allow files with small
	syntax errors to be processed correctly which ndiscvt(1) will
	not. If the conversion fails, you may have to edit the .INF
	file by hand to remove the offending lines.

	Press enter to try converting the files now: 

	Conversion was successful.

 以上のように、上手くいけば、ただリターンキーを押していくだけで、athw_sys.ko を生成することができる。

athw_sys.ko の設定方法

 とりあえず、起動時にこの無線 LAN ドライバが有効になるように設定してしまおう。

 まずさきほど作成した athw_sys.ko を /boot/kernel/ ディレクトリにコピー。

> sudo cp -i athw_sys.ko /boot/kernel/
Password:
>

 そして、次のような設定を行なった。

 まず /boot/loader.conf に、下記の一行を書き加えた。

athw_sys_load="YES"

 つぎに /etc/rc.conf の末尾に、下記の一行を書き加えた。この設定により、FreeBSD を起動したさいに、DHCP によって、IP アドレスなどが、割り当てられる。

ifconfig_ndis0="WPA DHCP"


 また、/etc/wpa_supplicant.conf というファイルを作成した。
その中身は以下の通り。

network={
        ssid=" この中には ssid キーが入っている。 "
        key_mgmt=WPA-PSK
        psk=" この中には、psk のキーが入ってる。"
}

 あとは、
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-wireless.htmlhttp://www.freebsd.org/cgi/man.cgi?query=wpa_supplicant.conf&sektion=5 にしたがって、

> sudo /etc/rc.d/netif start

 を実行した。

 これで、無線 LAN の基地局などが DHCP を有効にしているのなら、このノートパソコンの無線 LAN デバイスに IP アドレスが割り振られるはず。

 無事に IP アドレスが割り振られたかどうか、ifconfig などで確認してみると良いと思う。