11.0-RELEASE と 11-CURRENT の NDIS の状態2016年12月01日 12時09分13秒

ifconfig wlan0 に ssid を指定すると、問題が起きる事まで突き止めた。これは FreeBSD 11.0-RELEASE でのテスト。

FreeBSD 11.0-RELEASE では既に NDIS の一部が動かない様だが、何度か古いカーネルで試した結果からみても、最新のコードが一番真っ当な様だ。

春先に 11-CURRENT で wlan の作成が出来なくなった変更があった。11.0-RELEASE を下に調査を続ける前に、その変更が原因で壊れたのかを点検したい。SVN の履歴などを調べるとRev 300738が該当の変更だったようだ。そこで、Rev 300737 に戻して、試してみようと思う。尚、変更は ifconfig だったので、buildworld と buildkernel が必要になるので、時間が掛かりそうだ。

11.0-RELEASE で NDIS でパニックの再現2016年11月29日 18時50分38秒

ifconfig wlan0 list scan は動作するのは確認した。しかし、dhclient は動かない。この後、sysctl を使うとカーネルがパニックを起こす場合があるのを確認した。

ndis から wlan デバイスを作成しただけでは大丈夫なようだ。

$ kldload if_ndis
$ kldload /boot/modules/bcmwl5_sys.ko
$ sysctl -a | wc -l
5330
$ ifconfig wlan0 create wlandev ndis0 up
$ ifconfig wlan0 list scan
$ sysctl -a | wc -l
5338
$ dhclient wlan0
wlan0: no link .............. giving up
$ sysctl -a | wc -l
5338

ssid を指定して wlan を作成するとパニックを起こすようだ。

$ kldload if_ndis
$ kldload /boot/modules/bcmwl5_sys.ko
$ wlan create wlandev ndis0 ssid <id> wepmode on wepkey <key> weptxkey 1 up
$ sysctl -a | wc -l
kdb に落ちるので見ると、fill_kinfo_proc 内の strlcpy を指している。
db> where
Tracing pid 993 tid 100145 td 0xc7275000
strlcpy(...)
fill_kinfo_proc()
kern_Proc_out()
fill_kinfo_proc では二箇所で strlcpy が使われていた。

11.0-RELEASE で NDIS の実験を続ける2016年11月26日 06時14分50秒

11.0-RELEASE の方が ndis の状態が良いので、壊れた当初のリビジョンより、11.0-RELEASE で原因追求を続けることに。テストを続けていると、パニックを起こす状態になるのだが、あれこれと試しながらだったので、何がきっかけだかは完全には掴めていない。

取り敢えず、このコマンドが動作できるのは確認した。

$ kldload if_ndis
$ kldload /boot/modules/bcmwl5_sys.ko
$ ifconfig wlan0 create wlandev ndis0 up
$ ifconfig wlan0 list scan
list scan が動くので、通信は機能している様子。

次に、dhclient をそのまま試したら駄目だった。

$ dhclient wlan0
wlan0: no link .............. giving up

NDIS を 11.0-RELEASE に戻して更に原因追求2016年11月22日 13時43分58秒

NDIS の原因追求再試行第三段 286410 にて問題を再現にて、この辺りが問題が発生していたのは分かった。286419 では kldload でパニックを起こす。しかし、11.0-RELEASE で最近試したときのことを思い出す。その時は、通信こそ出来なかったもののパニックを起こしてはいなかったはず。そこで、11.0-RELEASE に戻す。

11.0-RELEASE では kldload でのパニックは収まっていた。dmesg から

ieee80211_new_state_locked: pending AUTH -> SCAN transition lost
を見付ける。まだ、何に関係あるのかは分からないが取り敢えず、記録。

NDIS のデバッグを有効にする sysctl がある。

$ sysctl debug.ndis=1
この後、
ndis_newstatus: ASSOC -> RUN
と表示されるようになった。

NDIS の原因追求再試行第三段 286410 にて問題を再現2016年11月17日 18時51分29秒

リビジョン 286409 が動作可能なのを確かめた。今回は、286410 が怪しかったので、このままリビジョンを一つのみ上げる。

リビジョン 286410 は zyd ドライバを壊してしまったので、そのままではコンパイル出来ない。リビジョン 286416 にてその修正が入っているので、これを利用するのが一番簡単そうだ。

案の定このリビジョンから、ndis ドライバを作り直して、kldload をすると落ちるようになった。

NDIS の原因追求再試行第二段 286409 へ2016年11月04日 21時48分23秒

リビジョン 283540 へ失敗した。そこで、次に大きい変更が入る 286410 の一つ手前の 286409 を試す。

今度も buildkernel が ath ドライバとその他の二つのドライバでコンパイルに失敗した。エラーは、「shifting a negative signed value is undefined」。これは今日の 286409 でも、前回の 283540 でも起きている。新しいエラーチェックが追加されたか、有効化された影響のように見える。

11.0-RELEASE で試すよりも、少し古い 10.2-RELEASE で試してみることにした。そうすると、今回はカーネルの再構築に成功。

NDIS をコンパイルし直して試したら動いた。286509 では利用可能。

async マウントの方が softupdate よりもディスクに引っかかる2016年09月04日 13時17分54秒

FreeBSD での外付けのハードディスクは内蔵ディスク程良くはないのが経験則だ。HP Pavilion dv6426usに付けた、USB の外付けハードディスクを /usr/obj 様に使い始めた。どうせ、再構築可能な物なので softupdate を切り -o async,noatime でマウントしていたが、時折、システムが一時停止する。停止は、IO の処理がうまく処理されず、X やファイルシステム関連の操作が止まってしまう。不便なので、async を止めて、softupdate にしたら随分と良くなった。

FreeBSD の ndis で Windows のドライバを使う2016年09月03日 12時37分14秒

NDIS 自体はかなり昔から実装されていた機能。Windows のドライバを利用し、コンパイルして作成するので FreeBSD のリリースバージョンに依存する。ドライバを無くさないようにするのが、大切だ。

eMachines eM250-1915 の bwn ドライバが不安定で、ndis を試したら、こちらの方が安定していた。今回 11.0-RELEASE に向けて準備をしようとしたら、ドライバが見付からなくて、手間取った。折角なので、手順も記録。

$ tar xvf Broadcom_BCM43xx_5.100.235.19_win5x.exe
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/SilentInstall_Driver_Only_XP.bat
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/Notes.txt
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/bcm43xx.cat
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/bcm43xx64.cat
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/bcmwl5.inf
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/setup.iss
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/setup.exe
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/bcmwlcoi.dll
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/bcmwlcoi64.dll
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/bcmwl5.sys
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/bcmwl564.sys
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/
$ cd \[wikidrivers.com]\ Broadcom_BCM43xx_5.100.235.19_win5x
ドライバを展開して .inf と .sys ファイルを見付ける。
$ ndisgen bcmwl5.inf bcmwl5.sys
        ==================================================================
        ------------------ Windows(r) driver converter -------------------
        ==================================================================

                        INF file validation

        This .INF file appears to be Unicode.
        Trying to convert to ASCII...
        Done.

        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.

        Press enter to continue... 
更にリターンキーを押す。
        ==================================================================
        ------------------ Windows(r) driver converter -------------------
        ==================================================================

                        Firmware file conversion

        If your driver uses additional firmware files, please list them
        below. When you're finished, just press enter to continue. (If your
        driver doesn't need any extra firmware files, just press enter
        to move to the next step.)

        > 
他のドライバは要らないので、そのままリターンキー。
        ==================================================================
        ------------------ Windows(r) driver converter -------------------
        ==================================================================


        List of files converted firmware files:


        Press enter to continue... 
次が最後のステージ。コンパイルが始まるので FreeBSD のソースが必要。
        ==================================================================
        ------------------ Windows(r) driver converter -------------------
        ==================================================================

                        Kernel module generation


        The script will now try to generate the kernel driver module.
        This is the last step. Once this module is generated, you should
        be able to load it just like any other FreeBSD driver module.

        Press enter to compile the stub module and generate the driver
        module now:



        Cleaning up... done.

        The file bcmwl5_sys.ko has been successfully generated.
        You can kldload this module to get started.

        Press return to exit.
コンパイルが終ってカーネルモジュールが作成されている。
$ ls *ko
bcmwl5_sys.ko
$ cp bcmwl5_sys.ko /boot/modules
カーネルを再構築しても、なくならない /boot/modules に移動する。

Magellan 製は走行記録が残らないのだろうか2016年07月30日 14時30分01秒

Magellan RoadMate 2520 は走った後が記録に残らないようだ。Magellan 製のには無いのか、廉価番だから無いのかは判らない。あと、現在の走行速度も表示されない。

GPS の感度は良いようで、意図的に違う道を選んでも結構早く見付けてくれる。検索も郵便番号を元に都市だけを指定できるので、楽ちん。

取り敢えず、走行時に便利な Garmin 社製に、検索に便利な Magellan 社製といった感想。

カーナビが壊れた2016年07月27日 12時10分29秒

三年程前に購入したカーナビが壊れた。機種は Garmin 社製の nuvi 40 LM。USB の端子の接続部がグラグラ揺れて接触が悪く、通電しない事も覆い。そして、バッテリーも劣化して充電出来ないようだ。そのため、走行中に急に消えたりする。接続の出来るケーブルの引き方のつぼはあるが、やはり常用には無理そうだ。

今回は昔使って気に入った Magellan 社の物にした。取り敢えず道が表示できれば大丈夫だろうと一番安い機種で、Magellan RoadMate 2520。