Armadilloフォーラム

WiFiドングルのPlanex gw-450d をArmadillo に挿入したときエラーが発生します

togotoday

2014年12月1日 12時15分

いつも大変お世話になっております。
坂本と申します

Armadillo-840でPlanex社製GW-450Dを使用したいのですが、
以下のサイトの手順で作業を行いましが、ドングル挿入時に

http://armadillo.atmark-techno.com/howto/a800-ieee80211ac-gw-450d

エラーが発生し、通信できない状況です。

usb 1-1: new high-speed USB device number 4 using rmobile-ehci-driver
rtusb init rt2870 --->
<-- RTMPAllocTxRxRingMemory, Status=0
<-- RTMPAllocAdapterBlock, Status=0
usbcore: registered new interface driver rt2870
-->RTUSBVenderReset
<--RTUSBVenderReset
Key1Str is Invalid key length(0) or Type(0)
Key2Str is Invalid key length(0) or Type(0)
Key3Str is Invalid key length(0) or Type(0)
Key4Str is Invalid key length(0) or Type(0)
NVM is Efuse and its size =1d[1e0-1fc]
/home/atmark/kernel/gw-450d_driver_linux_v3002/mt7610u_wifi_sta_v3002_dpo_20130916/os/linux/../../chips/mt76x0.c:2114 assert (pAd->TxPower[choffset].Channel == 36)failed
ERROR!!! E2PROM: WRONG VERSION 0x2, should be 1
Temperature Tx ALC not enabled
RTMPSetPhyMode: channel is out of range, use first channel=1
<==== rt28xx_init, Status=0

Kernelのバージョンは3.4-at10です。
「ERROR!!! E2PROM: WRONG VERSION 0x2, should be 1」
のエラーメッセージが気になっておりますが、
何かこのエラーを切り抜ける方法等ございませんでしょうか。
何卒宜しくお願い申し上げます。

コメント

at_takashi.sasayama

2014年12月1日 13時25分

笹山です。

> Kernelのバージョンは3.4-at10です。
> 「ERROR!!! E2PROM: WRONG VERSION 0x2, should be 1」
> のエラーメッセージが気になっておりますが、
> 何かこのエラーを切り抜ける方法等ございませんでしょうか。

エラーログを見る限りですと、
RT2870STA.dat の設定値が原因でエラーが発生していると考えられます。

まずArmadillo上で、RT2870STA.dat の設定値が、
以下の値になっているかを確認してみてください。

ファイルパス : /etc/Wireless/RT2870STA/RT2870STA.dat

#The word of "Default" must not be removed
Default
CountryRegion=5
CountryRegionABand=1
CountryCode=JP
 : 以下省略

仮に、CountryRegion=7 CountryCode=(値無し)
と設定されている場合は、RT2870STA.dat にパッチが適用されていません。
この際、同様のエラーが発生します。

RT2870STA.dat の設定値が異なっていた場合は、Howtoのパッチの適用とビルドの作業を
見直してみてください。

Howto : Armadillo-810/840で IEEE802.11ac USB無線LANアダプタ GW-450Dを動作させる
GW-450D Linux用ドライバー パッチの適用とビルド
http://armadillo.atmark-techno.com/howto/a800-ieee80211ac-gw-450d#step2…

at_takashi.sasayama

2014年12月1日 13時35分

笹山です。

すいません、回答内容を一部訂正します。
失礼しました。

誤)
仮に、CountryRegion=7 CountryCode=(値無し)

正)
仮に、CountryRegionABand=7 CountryCode=(値無し)

笹山様

ご回答ありがとうございました。
RT2870STA.datの値を確認しましたところ、
以下のようになっておりました。

#The word of "Default" must not be removed
Default
CountryRegion=5
CountryRegionABand=1
CountryCode=JP

これは期待値と異なっていますでしょうか。
宜しくお願い申し上げます。

at_takashi.sasayama

2014年12月1日 18時13分

笹山です。

> RT2870STA.datの値を確認しましたところ、
> 以下のようになっておりました。
>
> #The word of "Default" must not be removed
> Default
> CountryRegion=5
> CountryRegionABand=1
> CountryCode=JP
>
> これは期待値と異なっていますでしょうか。

期待通りの値ですね。
パッチは正常に適用されていると考えます。

>「ERROR!!! E2PROM: WRONG VERSION 0x2, should be 1」
> のエラーメッセージが気になっておりますが、
> 何かこのエラーを切り抜ける方法等ございませんでしょうか。

改めてエラーメッセージを見ますと、
init のステータスは 0(成功)となっていますね。

<==== rt28xx_init, Status=0

またHowtoの手順で動作確認を行いますと、
wpa_supplicantによるAPへの接続時に、
同様のログが出力されていることを確認しました。

エラーメッセージは気になりますが、
ifconfig ra0 up はエラーにはなっていないので、
通信は確認できると思います。

以下、エラーメッセージを基にしたGW-450Dドライバの解析結果です。

> /home/atmark/kernel/gw-450d_driver_linux_v3002/mt7610u_wifi_sta_v3002_dpo_20130916/os/linux/../../chips/mt76x0.c:2114 assert (pAd->TxPower[choffset].Channel == 36)failed
>

assertのメッセージは、chips/mt76x0.c 2114行目で出力されています。
2115行目で choffset を設定後、2116行目の assert には引っかかっていません。
後続処理の設定値としては、問題ない値が使われているようです。

2114: ASSERT((pAd->TxPower[choffset].Channel == 36));
2115: choffset = 14;
2116: ASSERT((pAd->TxPower[choffset].Channel == 36));

> ERROR!!! E2PROM: WRONG VERSION 0x2, should be 1
>

E2PROMのversionは1のはずだけど、2になっていると警告しています。

このエラーメッセージは、common/rtmp_init.c 451行目で出力されています。
このメッセージが出力されても、後続の処理は実行されます。

449         if (Version.field.Version > VALID_EEPROM_VERSION)
450         {
451                 DBGPRINT_ERR(("E2PROM: WRONG VERSION 0x%x, should be %d\n",
                    Version.field.Version, VALID_EEPROM_VERSION));
452         }

なお、上記コードの付近には、
「E2PROMのversionが違っていたら、処理を中止しエラーを通知してください」
という旨の記述がありました。

443         /* if E2PROM version mismatch with driver's expectation, then skip*/
444         /* all subsequent E2RPOM retieval and set a system error bit to notify GUI*/

残念ながらE2PROM version 1 と 2 の差分情報が見つからなかったので、
version不一致による影響は調査しきれていません。

何かわかりましたら、追記したいと思います。

笹山様

(株)システムサイエンス研究所 坂本です。
ご回答ありがとうございました。

その後いろいろ検証した結果、ご指摘の通りwpa_supplicantの動きに
問題があることがわかりました。これをソースコードよりビルド&再インストールし
た結果、無事動作いたしました。大変助かりました。ありがとうございました。

笹山様

いつもお世話になります。坂本です。
ドングルエラーの件ですが、おかげさまで、いまだエラー表示はあるものの通信ができるようになりました。
ただし、以下のようなメッセージが/var/log/syslogに頻繁に出力され、ディスク容量を圧迫するので、困っています。

Dec 2 06:25:30 debian kernel: Err;FC.ToDs
Dec 2 06:25:33 debian kernel: ===>rt_ioctl_giwscan. 64(64) BSS returned, data->length = 8859
Dec 2 06:25:37 debian kernel: Err;FC.ToDs
Dec 2 06:25:40 debian kernel: Err;FC.ToDs
Dec 2 06:25:42 debian kernel: ===>rt_ioctl_giwscan. 65(65) BSS returned, data->length = 9046
Dec 2 06:25:46 debian kernel: Err;FC.ToDs
Dec 2 06:25:46 debian kernel: Err;FC.ToDs
Dec 2 06:25:51 debian kernel: ===>rt_ioctl_giwscan. 65(65) BSS returned, data->length = 8825
Dec 2 06:25:56 debian kernel: Err;FC.ToDs
Dec 2 06:26:00 debian kernel: ===>rt_ioctl_giwscan. 66(66) BSS returned, data->length = 9027
Dec 2 06:26:01 debian kernel: Err;FC.ToDs
Dec 2 06:26:06 debian kernel: Err;FC.ToDs
Dec 2 06:26:06 debian kernel: Err;FC.ToDs
Dec 2 06:26:09 debian kernel: ===>rt_ioctl_giwscan. 65(65) BSS returned, data->length = 9007
Dec 2 06:26:11 debian kernel: Err;FC.ToDs
Dec 2 06:26:11 debian kernel: Err;FC.ToDs
Dec 2 06:26:16 debian kernel: Err;FC.ToDs
Dec 2 06:26:19 debian kernel: ===>rt_ioctl_giwscan. 66(66) BSS returned, data->length = 8935
Dec 2 06:26:21 debian kernel: Err;FC.ToDs
Dec 2 06:26:21 debian kernel: Err;FC.ToDs
Dec 2 06:26:21 debian kernel: Err;FC.ToDs
Dec 2 06:26:28 debian kernel: ===>rt_ioctl_giwscan. 66(66) BSS returned, data->length = 9004
Dec 2 06:26:30 debian kernel: Err;FC.ToDs
Dec 2 06:26:37 debian kernel: ===>rt_ioctl_giwscan. 66(66) BSS returned, data->length = 8898
Dec 2 06:26:37 debian kernel: Err;FC.ToDs
Dec 2 06:26:40 debian kernel: Err;FC.ToDs
Dec 2 06:26:46 debian kernel: ===>rt_ioctl_giwscan. 66(66) BSS returned, data->length = 8974
Dec 2 06:26:46 debian kernel: Err;FC.ToDs
Dec 2 06:26:47 debian kernel: Err;FC.ToDs
Dec 2 06:26:52 debian dhclient: DHCPDISCOVER on ra0 to 255.255.255.255 port 67 interval 8
Dec 2 06:26:55 debian kernel: ===>rt_ioctl_giwscan. 66(66) BSS returned, data->length = 9069
Dec 2 06:26:58 debian kernel: Err;FC.ToDs
Dec 2 06:27:00 debian dhclient: DHCPDISCOVER on ra0 to 255.255.255.255 port 67 interval 13
Dec 2 06:27:02 debian kernel: Err;FC.ToDs

これを抑止する方法についてお知恵を借りたくて投稿いたしました。
宜しくお願いします。

at_takashi.sasayama

2014年12月3日 14時39分

笹山です。

> ただし、以下のようなメッセージが/var/log/syslogに頻繁に出力され、ディスク容量を圧迫するので、困っています。
> Dec 2 06:25:30 debian kernel: Err;FC.ToDs
> Dec 2 06:25:33 debian kernel: ===>rt_ioctl_giwscan. 64(64) BSS returned, data->length = 8859
> Dec 2 06:25:37 debian kernel: Err;FC.ToDs
> Dec 2 06:25:40 debian kernel: Err;FC.ToDs
> Dec 2 06:25:42 debian kernel: ===>rt_ioctl_giwscan. 65(65) BSS returned, data->length = 9046
> : 以下省略
>
> これを抑止する方法についてお知恵を借りたくて投稿いたしました。

抑止する方法ですが、2種類考えられます。

1.エラーログを一切出力しないように変更する
2.エラーログの原因を取り除く

まず、エラーログを一切出力しない変更方法です。
添付のパッチを適用してドライバを再ビルドするとログが出力されなくなります。
デバッグログを有効にするには、 DEBUG_LOG=y を指定して、再ビルドを行ってください。

パッチ名: armadillo-8x0-mt7610u_wifi_sta_v3002_dpo_20130916-DebugLog-Select.patch
パッチはHowto内の パッチの適用を行った環境に対して使用してください。

パッチは以下のコマンドで適用ができます。

patch -p0 < armadillo-8x0-mt7610u_wifi_sta_v3002_dpo_20130916-DebugLog-Select.patch

ログ出力を無効にしてビルド

make clean;make KSRC=~/atmark-dist/linux-3.x
     or
make clean;make KSRC=~/atmark-dist/linux-3.x DEBUG_LOG=n

ログ出力を有効にしてビルド

make clean;make KSRC=~/atmark-dist/linux-3.x DEBUG_LOG=y

次に、エラーログの原因を取り除くですが、
2種のログが大半を占めていましたので、それらを解析をしてみました。

1つ目の頻発しているログ

> Dec  2 06:25:40 debian kernel: Err;FC.ToDs

出力個所は以下です。
mt7610u_wifi_sta_v3002_dpo_20130916/common/cmm_data_usb.c:1350行目

1346 #ifndef CLIENT_WDS
1347         if (pHeader->FC.ToDs
1348                 )
1349         {
1350                 DBGPRINT_RAW(RT_DEBUG_ERROR, ("Err;FC.ToDs\n"));
1351                 return NDIS_STATUS_FAILURE;
1352         }
1353 #endif /* CLIENT_WDS */

WDSクライアント機能に対応していないにも関わらず、
間連する値が有効になっている為、エラーとなっています。

Howtoのパッチを適用した状態では、WDSクライアント機能は無効です。

しかし有効/無効に関わらず、FC.ToDs を 1 にする処理が、ドライバ内に数か所ありました。
何れかの処理が適切ではない為に、エラーになっていると推測しています。

以下の様に RT_DEBUG_ERROR を RT_DEBUG_INFO にすると、ログを抑制することができます。
(もしくは1350行目をコメントアウトしてしまうのも、一つの方法かと思います。)

1350                 DBGPRINT_RAW(RT_DEBUG_INFO, ("Err;FC.ToDs\n"));

2つ目の頻発しているログです。

> Dec  2 06:25:33 debian kernel: ===>rt_ioctl_giwscan. 64(64) BSS returned, data->length = 8859

出力個所は以下です。
mt7610u_wifi_sta_v3002_dpo_20130916/sta/sta_cfg.c:7948行目

7948  DBGPRINT(RT_DEBUG_ERROR ,("===>rt_ioctl_giwscan. %d(%d) BSS returned, data->length = %ld\n",
      pAd->ScanTab.BssNr , pAd->ScanTab.BssNr, Data));

前後の処理を見ると、エラーが"発生しなかった時"に、このログは出力されます。
その為、エラーログとして出力するものでは無いように思えます。

先と同様に、RT_DEBUG_ERROR を RT_DEBUG_INFO に変更して、ログを抑制してしまうのが良いかと思います。

7948  DBGPRINT(RT_DEBUG_INFO ,("===>rt_ioctl_giwscan. %d(%d) BSS returned, data->length = %ld\n",
      pAd->ScanTab.BssNr , pAd->ScanTab.BssNr, Data));

また以下の RT_DEBUG_ERROR を 1 から 5 に変えると、
まとめて抑制することもできます。

mt7610u_wifi_sta_v3002_dpo_20130916/include/rtmp_comm.h:88行目

83 /* ======================== Debug =========================================== */
84 /* */            
85 /*  Debug information verbosity: lower values indicate higher urgency */
86 /* */            
87 #define RT_DEBUG_OFF        5
88 #define RT_DEBUG_ERROR      1   # 1 から 5 に変更する
89 #define RT_DEBUG_WARN       2
90 #define RT_DEBUG_TRACE      5
91 #define RT_DEBUG_INFO       5
92 #define RT_DEBUG_LOUD       5

本件、Howtoの内容へフィードバックをしたく思います。
ご報告有難うございました。

ファイル ファイルの説明
armadillo-8x0-mt7610u_wifi_sta_v3002_dpo_20130916-DebugLog-Select.patch mt7610u_wifi_sta_v3002_dpo_20130916デバッグログパッチ

笹山様

システムサイエンス研究所 坂本です。

返信が遅れました。
頂きましたパッチを当てて動作を確認いたしましたところ、
期待通りログ出力が抑制できました。

ありがとうございました。