web-dev-qa-db-ja.com

OpenBSDがサポートされていると思われるWiFiUSBアダプターのファームウェアをロードできない

最近Amazonで Edimax EW-7811Un WiFi USBアダプター を購入しました。少数のOpenBSDユーザーがそれで成功したと報告しており、 manページurtwn(4)によってサポートされているとリストされています。

私は現在、AsusネットブックでOpenBSD 5.5 AMD64(先週末にダウンロード)を実行しています。ワイヤレスアダプタは、予想どおりurtwn0として認識され、挿入または削除するとそのように報告されます。マニュアルページで説明されているように、次の内容で/etc/hostname.urtwn0を作成しました。

nwid mynetwork
wpakey mykey
dhcp

ここで、mynetworkmykeyは、それぞれ私のWifiネットワーク名とパスワードです。ネットワークは実際にはWPA2であり、それ自体が問題を引き起こしている可能性がありますが、OSはファームウェアをロードすることさえできないようです。 sh /etc/netstart urtwn0を実行すると、次の出力が得られます。

urtwn0: failed loadfirmware of file urtwn-rt18192cfwT (error 2)
urtwn0: no link ............ sleeping

ファームウェアが破損している可能性はありますか?アダプターを使うのはこれが初めてです。おそらく、Edimaxはファームウェアを変更し、OpenBSDの現在のurtwn実装を壊しましたか?また、私はばかげた間違いをしているだけですか?

3
Mike

まず最初に:_hostname.urtwn0_ファイルは見栄えがよく、そこに間違いがあった場合は、まったく異なるエラーメッセージが表示されます。

メッセージurtwn0: failed loadfirmware of file urtwn-rt18192cfwT (error 2)は、ファームウェアが適切な場所にインストールされていないことを示します。

loadfirmware(9) で説明されているように、この関数はerrnoスタイルのエラーコードを返します。 errno(2) は次のように説明します。

_2 ENOENT No such file or directory.
    A component of a specified pathname did not exist, or the pathname
    was an empty string.
_

ドライバをロードするためのファイル_/etc/firmware/urtwn-rt18192cfwT_が必要です。1 ほとんどの場合、このファイルはツリーに見つかりません。

1詳細については、回答の最後を参照してください


ボックスをインターネットに接続するいくつかの方法があると仮定します:

_fw_update -v_を実行してファームウェアをインストールし、ファイルが適切な場所にあり、破損していないことを確認してください。運が良ければ、それだけで十分です。

これが失敗した場合は、 パッケージまたはポート からファームウェアのインストールを試みることができます(これを最初に読んでくださいFAQ最初に!)。私のローカルミラーにはurtwn関連のパッケージなので、おそらくportsツリーを使用する必要があります。

FAQ で説明されているようにポートツリーを設定し、_make install_からrootとして_/usr/ports/sysutils/firmware/urtwn_を実行します。


ボックスをインターネットに接続できない場合:

ファームウェアは _http://firmware.openbsd.org/firmware-dist/urtwn-1.1p0.tgz_ から手動でダウンロードできます。そこからそれをつかみ、USBスティックに投げて、OpenBSDボックスにコピーします。アーカイブを抽出し、ファイル_urtwn-*_を_/etc/firmware/_に移動します。

これが機能する場合は、ネットワークに接続したら_fw_update -v_を実行することをお勧めします。そうすれば、ファームウェアは、システムメンテナンススクリプトによって必要に応じて監視およびアップグレードされます。


これでも問題が解決しない場合は、おそらく メーリングリスト で質問する必要があります。あなたが宿題をしたなら、そこの人々は一般的に友好的で親切です2

2 ドライバーは [email protected] で数回言及されています。たとえば、USB関連の問題がいくつかありました。投稿する前に、表示されている内容に関連するものがあるかどうかを確認してください。


追加:

ここでソースコードを確認しましたが、このエラーメッセージを取得する唯一の方法は、_sys/dev/usb/if_urtwn.c_の_2194_行にある関数urtwn_load_firmware()からです。

_   /* Read firmware image from the filesystem. */
   if ((sc->chip & (URTWN_CHIP_UMC_A_CUT | URTWN_CHIP_92C)) ==
       URTWN_CHIP_UMC_A_CUT)
           name = "urtwn-rtl8192cfwU";
   else
           name = "urtwn-rtl8192cfwT";
   if ((error = loadfirmware(name, &fw, &len)) != 0) {
           printf("%s: failed loadfirmware of file %s (error %d)\n",
               sc->sc_dev.dv_xname, name, error);
           return (error);
   }
_

関数loadfirmware()(_sys/dev/firmload.c_内)はパス_/etc/firmware/urtwn-rtl8192cfwT_を生成し、そのファイルをUSBアダプターのメモリーにロードしようとします。ファイルが見つからないため、報告したエラーメッセージが表示されます。

6
damien