mnakada / atomcam_tools

Hack tool for atomcam and wyzecam.
Other
178 stars 22 forks source link

SwingにてUSB-Etherが認識しない #93

Closed accept closed 5 months ago

accept commented 5 months ago

いつもありがとうございます。 タイトルの通りですが、SwingにUSB-Etherアダプタを使用しても認識しないようです。 使用したUSB-Etherはこちらです。 https://www.amazon.co.jp/dp/B07R6P7QMV チップセットはRTL8153が使われているようで、Atomcam2にてcdc_etherで認識することを確認しています。

sshよりdmesgにてログを見てみると下記のようなログが記録されていました。

[   58.163894] hub 1-0:1.0: port 1 disabled by hub (EMI?), re-enabling...
[   58.180901] usb 1-1: USB disconnect, device number 2

re-enablingは記録されないときがあるようですが、USB disconnectは必ずログに出現します。 今のところ数回試していますが認識はしないようです。 同じEtherアダプタとUSB電源で試したところAtomcam2ではeth0が立ち上がったのと、EMI?と記載があるので、もしかするとSwing起動時の初期化動作でモーターを回しているのが関係しているのかもしれません。 何か対策をすることは可能でしょうか。 よろしくお願いいたします。

mnakada commented 5 months ago

lsusbでデバイスが見えてないのでUSBが認識されてないようですね。 Swingで過去にUSB-Ether動いてましたか?

accept commented 5 months ago

@mnakada お忙しい中のご連絡ありがとうございます。 いえ、今回初テストでして、Swingでの動作実績は私の方ではありません。

accept commented 5 months ago

@mnakada 立て続けにすみません、SwingでUSB-Etherが認識しない問題の調査のため、久々にatomcam_toolsをビルドしようと思ったのですが、 ビルド自体は成功してzipが出力されるものの、そのファイルをMicroSDに書き込み、Atomcamに読ませても起動しないようです。 黄色LED→青LED→白?→黄色という光り方を繰り返してSwingのモーター初期化までいかないようです。

以前と同様にgit cloneでリポジトリを引っ張り、make loginからdocker内shellにてmakeを実行 ホスト側に出来上がったzipを使用という手順を実行しております。 dockerの全コンテナとイメージは削除し、一から取得し直して、menuconfigなども触らずデフォルトのままmakeしても、 menuconfigを開いて何も触らずsaveを掛けてからビルドしてもダメなようです。 こちらに関して何か手順が抜けている、や、確認した方がいいことなどはありますでしょうか。

別でIssueを建てようか迷ったのですが、もし分けた方が良いようであれば分けさせていただきます。

mnakada commented 5 months ago

手元のSwingでUCTRONICS-U6113は動作しました。 RTL8152なので同じ動作か分かりませんが。 先ほど見えなかったのはSwing側のUSBを抜き差しして起動したため、RTL8152の電源が入りっぱなしでおかしな状態になっていたためのようです。PoE側を抜き差しして再起動したところSwingでもeth0で接続できました。 lsusbで Bus 001 Device 002: ID 0bda:8152 Bus 001 Device 001: ID 1d6b:0002 のようにDevice 002が見えているか確認してみてください。

buildがおかしい件は環境をお知らせください。 最初に一度Docker入らずにmakeしてみてください。 Docker環境からならば、/src/buildscripts/build_allを実行でも同じです。 二度目以降はDocker環境からmakeでも大丈夫です。

accept commented 5 months ago

@mnakada お世話になっております。 RTL8152は認識するのですね。 こちらもNICを含めた大元側を抜き差しして再起動しているのですが、相変わらず認識しないようです。 r8152とcdc_etherのモジュールの違いでしょうか… lsusbではDevice 002は見えないのですが、dmesgを確認すると起動時には認識し、cdc_etherが当たる挙動をしているのは見えます。

[    1.248996] Freeing unused kernel memory: 656K (8042c000 - 804d0000)
[    1.284518] usb 1-1: device v0bda p8153 is not supported
[    1.473960] mmc0: new high speed SDHC card at address e624
[    1.479798] mmcblk0: mmc0:e624 SU08G 7.40 GiB 
[    1.507490]  mmcblk0: p1
[   39.765226] Adding 131068k swap on /media/mmc/swap.  Priority:-1 extents:1 across:131068k SS
[   44.183540] usbcore: registered new interface driver r8152
[   44.712032] usbcore: deregistering interface driver r8152
[   44.754220] usbcore: registered new interface driver asix
[   45.272712] usbcore: deregistering interface driver asix
[   45.303678] usbcore: registered new interface driver ax88179_178a
[   45.826525] usbcore: deregistering interface driver ax88179_178a
[   45.864359] cdc_ether 1-1:2.0 eth0: register 'cdc_ether' at usb-dwc2-1, CDC Ethernet Device, xx:xx:xx:xx:xx:xx
[   45.885002] usbcore: registered new interface driver cdc_ether
[   75.085547] usbcore: deregistering interface driver cdc_ether
[   75.091569] cdc_ether 1-1:2.0 eth0: unregister 'cdc_ether' usb-dwc2-1, CDC Ethernet Device

その後に前述のようにdisconnectしてしまうようです。

[   94.132031] SPEAKER CTL MODE3 !
[   94.180261] hub 1-0:1.0: port 1 disabled by hub (EMI?), re-enabling...
[   94.195765] usb 1-1: USB disconnect, device number 2
[   96.828217] [motor_speed1086] speed:900, level:15
[   96.837602] motor_ops_reset966
[   96.842514] printk [yuan] else
[   97.672351] [atbm_log]:ieee80211_process_addba_request:mac[xx:xx:xx:xx:xx:xx],tid[4]
[   99.703614] motor_ops_goback

一応電源供給側はそのままに、Swing側を抜き差ししてみましたがログ内容は変わりませんでした。

ビルドについてもありがとうございます。 環境を載せておらず、大変失礼いたしました。 ホスト側はUbuntu 22.04 LTS vmware上の仮想マシンです。

Linux accept-vm 6.5.0-26-generic #26~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC
 Tue Mar 12 10:22:43 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

Dockerバージョン

Docker version 24.0.5, build 24.0.5-0ubuntu1~22.04.1

cloneしたディレクトリを一度削除し、git cloneし直し、docker側もコンテナを削除してdockerに入らず そのままmakeを試しましたが出力されたzipを使用してもやはり変わらず、 今度は同じ環境のままdocker内に入り/src/buildscripts/build_allを実行して試してみましたがやはり起動にコケるようです。

mnakada commented 5 months ago

Build環境については問題分かりました。 initramfs_skelton/bin/にbusyboxのsymbolic linkでgrepが必要なのですが、入れ忘れていました。 最新のmain branchをpullして貰えば入ります。 念の為、grepが入ったことを確認してください。

initramfsなので、 make login make linux-rebuild make を実行してください。

accept commented 5 months ago

@mnakada お世話になっております。 ご対応いただきありがとうございます。 ただ、申し上げ辛いのですがご指南いただいたようにビルドしてみましたが相変わらずコケるようでして…

initramfs_skelton/bin/にgrepがいるのは確認し、 make login make linux-rebuild make まで実行して出力ファイルを試しましたが変わらずのようです。 念のためディレクトリ削除しcloneで取り直し、dockerもコンテナ停止からコンテナとイメージ削除まで掛けて試しましたが、やはりコケてしまいます。

mnakada commented 5 months ago

buildしたkernelイメージもらえますか。 factory_t31_ZMC6tiIDQNの方です。

accept commented 5 months ago

@mnakada こちらです。 お手数おかけします。 factory_t31_ZMC6tiIDQN.zip

mnakada commented 5 months ago

他にもbuild環境に抜けてるものがありました。 もう一度最新をpullして make login make linux-rebuild make してもらえますか。

accept commented 5 months ago

@mnakada ありがとうございます。 無事ビルドしたファイルでブートすることを確認しました。 元のIssueから脱線してしまいすみません…

そしてすみません、lsusbの結果をお知らせするのを失念しておりました… lsusbで見るとデバイスは認識されておらず、一つだけ表示される状態です。

[   94.671972] codec_set_device: set device: speaker...
[   94.678721] SPEAKER CTL MODE3 !
[   94.727297] hub 1-0:1.0: port 1 disabled by hub (EMI?), re-enabling...
[   94.742614] usb 1-1: USB disconnect, device number 2
[   96.368310] [motor_speed1086] speed:900, level:15
[   96.374283] motor_ops_reset966
[   96.381384] printk [yuan] else
[   97.292690] [atbm_log]:ieee80211_process_addba_request:mac[xx:xx:xx:xx:xx:xx],tid[4]
[   99.238967] motor_ops_goback
[  107.797747] [atbm_log]:ieee80211_process_addba_request:mac[xx:xx:xx:xx:xx:xx],tid[6]
[root@atomcam:~]# lsusb
Bus 001 Device 001: ID 1d6b:0002
[root@atomcam:~]# 
mnakada commented 5 months ago

いえ、bugが見つかってよかったです。ありがとうございました。 DockerHubの環境を修正しておきます。

USBの方は見えてるのはroot hubですね。 USBデバイスとして認識されてない状態ですが、最初は見えてるようなので電源電圧低下とかかもしれません。

accept commented 5 months ago

@mnakada ありがとうございます。 なるほど、電源は私も最初に疑いましてスマホ充電用のアンペアの大きいものや、USB PDなどがないシンプルに5V2.4Aほど出力する電源なども使用してみたのですが変わらないようです。 お陰様で自前でビルド出来るようになりましたので、試行錯誤してみようと思います。

mnakada commented 5 months ago

使用したUSB-Etherはこちらです。 https://www.amazon.co.jp/dp/B07R6P7QMV

リンク先の説明に USBポートの電力要件は5V、500mA、2.5w とありますが、これが出力側の電力を指しているのだとすると電源アダプターの容量を大きくしても、出力のVBUSのlimitterが500mAに制限してしまってる可能性があります。 その場合はモーターが動くと厳しいですね。

accept commented 5 months ago

@mnakada ありがとうございます。 なるほど、勝手な想像でただ単に内部的にはNICとMicroB側に分岐しているだけかと思ったのですが… 確かに出力側の要件と考えると厳しいですね… NIC側と考えても、NICだけで0.5A増えるとなるとSwingの付属電源が2Aであることを考慮して大きめの電源が必要ですね。 電源周りも視野に入れて試行錯誤してみます。

accept commented 5 months ago

@mnakada お世話になっております。 SwingにてRTL8153が認識しない件ですが、PRODUCT_MODELをATOM_CamV3Cに書き換えてAtomcam2として認識させ、強制的にモーターの初期化が起こらないようにしてテストしてみたのですが、それでもdisconnectしてしまうようです。

[   50.083417] codec_codec_ctl: set sample rate...
[   50.083733] codec_codec_ctl: set device...
[   50.534036] codec_set_device: set device: MIC...
[   50.545404] codec_codec_ctl: set repaly channel...
[   50.545430] codec_codec_ctl: set sample rate...
[   50.545628] codec_codec_ctl: set device...
[   50.784054] codec_set_device: set device: speaker...
[   50.796338] SPEAKER CTL MODE3 !
[   50.854976] hub 1-0:1.0: port 1 disabled by hub (EMI?), re-enabling...
[   50.876182] usb 1-1: USB disconnect, device number 2
[   53.391061] [atbm_log]:ieee80211_process_addba_request:mac[xx:xx:xx:xx:xx:xx],tid[4]
[root@atomcam:~]# 

このためdisconnectしてしまうのは、モーター稼働によるノイズや電力の不足が原因ではないと判断したのですが、そうなると何か考えられる原因はありますでしょうか。 一つ気になっているのはSwingにおいてdisconnectされるのは必ずSPEAKER CTL MODE3 !の直後であることと、なおかつAtomcam2ではSPEAKER CTL MODE0 !と出力されるので、スピーカーの初期化によるノイズ?かとも思いましたが、ここらへんはiCamera_appが立ち上がった後で手が出せず… 本体側のスピーカーは使用しないのでモジュールの読み込みを阻害してみたのですが、どうもスピーカー初期化できないとiCamera_appが停止してしまうようで… 何か考えられる原因や、一時的にでもiCamera_appのスピーカー初期化を阻止してテストする方法などはありますでしょうか。

accept commented 5 months ago

追記です。 RTL8152のNICも試しに購入してみまして、Swingに接続してみたのですがこちらもRTL8153と同じように認識しないようです。 なおAtomcam2では認識し通信も出来ていることを確認しています。

[    1.284541] usb 1-1: device v0bda p8152 is not supported
[    1.473964] mmc0: new high speed SDHC card at address e624
[    1.479796] mmcblk0: mmc0:e624 SU08G 7.40 GiB 
[    1.507846]  mmcblk0: p1
[    4.437883] Adding 131068k swap on /media/mmc/swap.  Priority:-1 extents:1 across:131068k SS
[    5.352403] usbcore: registered new interface driver r8152
[    5.444250] r8152 1-1:1.0 eth0: v1.0.0 (2013/05/03)
[   34.371444] usbcore: deregistering interface driver r8152
[   35.454193] usbcore: registered new interface driver asix
[   35.972681] usbcore: deregistering interface driver asix
[   36.003917] usbcore: registered new interface driver ax88179_178a
[   36.526765] usbcore: deregistering interface driver ax88179_178a
[   36.554414] usbcore: registered new interface driver cdc_ether
[   37.077319] usbcore: deregistering interface driver cdc_ether
[   37.166560] __init
[   49.914119] codec_set_device: set device: speaker...
[   49.926559] SPEAKER CTL MODE3 !
[   49.971057] hub 1-0:1.0: port 1 disabled by hub (EMI?), re-enabling...
[   49.984776] usb 1-1: USB disconnect, device number 2
[   51.638044] [motor_speed1086] speed:900, level:15

今回使用したのはこちらで、動作実績のあるUCTRONICS-U6113ではないのですがRTL8152ではあるので、そうなると単純にチップが原因でもないのでしょうかね… https://amzn.asia/d/5y7mjLn

価格が倍以上するのとPoEは今のところ不要でしたので手を出さなかったのですが、UCTRONICS-U6113も購入しましたので届き次第テストしてみたいと思います。

accept commented 5 months ago

立て続けにすみません。 スピーカーが関係しているのではという予測の元、ダメもとでアプリからブザーを鳴らし、直後にdmesgにてログを見たところ、SPEAKER CTL MODEが0に変わり、直後USBを認識しはじめました。

[   50.993997] codec_set_device: set device: speaker...
[   51.001522] usb 1-1: USB disconnect, device number 2
[   51.007577] SPEAKER CTL MODE3 !
[   52.679618] [motor_speed1086] speed:900, level:15
[   52.685743] motor_ops_reset966
[   52.689695] printk [yuan] else
[   55.536552] motor_ops_goback
[   59.758943] [atbm_log]:ieee80211_process_addba_request:mac[xx:xx:xx:xx:xx:xx],tid[4]
[   93.802137] [atbm_log]:ieee80211_process_addba_request:mac[xx:xx:xx:xx:xx:xx],tid[6]
[  114.425965] SPEAKER CTL MODE3 !
[  119.584989] SPEAKER CTL MODE0 !
[  119.934169] usb 1-1: new high-speed USB device number 5 using dwc2
[  120.147764] usb 1-1: device v0bda p8153 is not supported
[root@atomcam:~]# lsusb
Bus 001 Device 005: ID 0bda:8153
Bus 001 Device 001: ID 1d6b:0002
[root@atomcam:~]# 

その後手動でcdc_etherをロードし、DHCPでIPアドレスを取得させたところ無事RTL8153の有線NICで通信を確立できました。 また、試しにその状態でブザーをアプリより鳴らしたところ、MODE3に切り替わって通信が途絶し、MODE0に切り替わってまたNICを見つけて通信を再開するという挙動をしているようです。

[   92.582402] SPEAKER CTL MODE3 !
[   94.154876] SPEAKER CTL MODE0 !
[   94.504080] usb 1-1: new high-speed USB device number 4 using dwc2
[   94.714618] usb 1-1: device v0bda p8153 is not supported
[  111.942689] cdc_ether 1-1:2.0 eth0: register 'cdc_ether' at usb-dwc2-1, CDC Ethernet Device, xx:xx:xx:xx:xx:xx
[  111.994112] usbcore: registered new interface driver cdc_ether
[  588.242421] [motor_speed1086] speed:500, level:5
[  590.852445] SPEAKER CTL MODE3 !
[  590.904287] hub 1-0:1.0: port 1 disabled by hub (EMI?), re-enabling...
[  590.932337] usb 1-1: USB disconnect, device number 4
[  590.944287] cdc_ether 1-1:2.0 eth0: unregister 'cdc_ether' usb-dwc2-1, CDC Ethernet Device
[  606.753538] SPEAKER CTL MODE0 !
[  607.102813] usb 1-1: new high-speed USB device number 5 using dwc2
[  607.318370] usb 1-1: device v0bda p8153 is not supported
[  607.351731] cdc_ether 1-1:2.0 eth0: register 'cdc_ether' at usb-dwc2-1, CDC Ethernet Device, xx:xx:xx:xx:xx:xx
[root@atomcam:~]# 

私の環境だけなのか分かりませんが、SPEAKER CTL MODEがUSBの認識に影響を与えているのは間違いないようです。 その後再起動して認識するか試したのですが、相変わらず起動後はMODE3で、自動認識はしないようです。 何か対策は出来ますでしょうか…

mnakada commented 5 months ago

手元で再現できてないのでいまいち不明なのですが、UCTRONICS-U6113をswingに繋いで同様にブザーを鳴らしてみました。

[   23.564440] -----gc2053_detect: 1127 ret = 0, v = 0x20
[   23.564931] -----gc2053_detect: 1133 ret = 0, v = 0x53
[   23.564941] gc2053 chip found @ 0x37 (i2c0) version H20211111a
[   23.774276] gc2053 stream on
[   23.869921] Err [VIC_INT] : hor err ch3 !!!!!
[   23.874412] Err [VIC_INT] : ver err ch2 !!!!!
[   23.966085] codec_codec_ctl: set sample rate...
[   23.966399] codec_codec_ctl: set device...
[   24.383981] codec_set_device: set device: MIC...
[   24.390595] codec_codec_ctl: set repaly channel...
[   24.390615] codec_codec_ctl: set sample rate...
[   24.390782] codec_codec_ctl: set device...
[   24.623979] codec_set_device: set device: speaker...
[   24.631715] SPEAKER CTL MODE3 !
[   26.129479] [motor_speed1086] speed:900, level:15
[   26.135999] motor_ops_reset966
[   26.139299] printk [yuan] else
[   28.913826] motor_ops_goback
[  120.097003] SPEAKER CTL MODE3 !
[  123.475624] SPEAKER CTL MODE0 !
[root@atomswing:system]# 

SPEAKER CTL MODEは変化しているのですが、USBの切断は起きてないです。 (USB-Ether経由でloginしてるので切れれば分かります)

SPEAKER CTL MODEを表示してるところを追ってみましたが、SPEAKER_CTL_MODE周辺でUSBと関連しそうなコードは見つけられませんでした。 このSPEAKER CTL MODEの変更に付随した何か他の変更で影響しているのかもしれません。

undefined4 speakerctl_ioctl(int param_1,undefined4 param_2)

{
  undefined4 uVar1;
  char *pcVar2;

  if (*(int *)(*(int *)(param_1 + 0x70) + 0x34) == 0) {
    printk("Please Open /dev/speakerctl Firstly\n");
    uVar1 = 0xffffffff;
  }
  else {
    uVar1 = 0;
    switch(param_2) {
    case 0:
      gpio_direction_output(8,0);
      __udelay(600);
      pcVar2 = "SPEAKER CTL MODE0 !\n";
      break;
    case 1:
      gpio_direction_output(8,0);
      __udelay(600);
      gpio_direction_output(8,1);
      __udelay(100);
      pcVar2 = "SPEAKER CTL MODE1 !\n";
      break;
    case 2:
      gpio_direction_output(8,0);
      __udelay(600);
      gpio_direction_output(8,1);
      __udelay(5);
      gpio_direction_output(8,0);
      __udelay(5);
      gpio_direction_output(8,1);
      __udelay(100);
      pcVar2 = "SPEAKER CTL MODE2 !\n";
      break;
    case 3:
      gpio_direction_output(8,0);
      __udelay(600);
      gpio_direction_output(8,1);
      __udelay(5);
      gpio_direction_output(8,0);
      __udelay(5);
      gpio_direction_output(8,1);
      __udelay(5);
      gpio_direction_output(8,0);
      __udelay(5);
      gpio_direction_output(8,1);
      __udelay(100);
      pcVar2 = "SPEAKER CTL MODE3 !\n";
      break;
    case 4:
      gpio_direction_output(8,0);
      __udelay(600);
      gpio_direction_output(8,1);
      __udelay(5);
      gpio_direction_output(8,0);
      __udelay(5);
      gpio_direction_output(8,1);
      __udelay(5);
      gpio_direction_output(8,0);
      __udelay(5);
      gpio_direction_output(8,1);
      __udelay(5);
      gpio_direction_output(8,0);
      __udelay(5);
      gpio_direction_output(8,1);
      __udelay(100);
      pcVar2 = "SPEAKER CTL MODE4 !\n";
      break;
    default:
      goto switchD_000101cc_caseD_5;
    }
    printk(pcVar2);
    uVar1 = 0;
  }
switchD_000101cc_caseD_5:
  return uVar1;
}
accept commented 5 months ago

@mnakada ありがとうございます。 おお、SPEAKER CTL MODEを表示しているのはspeaker_ctl.koというモジュールというところまでは分かっていたのですが お恥ずかしながらソースコードがどこに格納されているのか分からずでした… そちらのコードはどこに記述されていますか…?

ご提示いただいたコードを見ると、私の環境で唯一問題がないSPEAKER CTL MODE0の時はgpio_direction_output(8,0); つまりはgpio8番がLOWに設定されており、それ以外はLOWとHIGHを何度か繰り返し、最終的にHIGHに設定されるという感じでしょうか。 ということは内部的にUSBに影響する回路部分とgpio8がショートしているのかもしれませんね… 新たに別なSwingを用意してテストしてみたいと思います。

mnakada commented 5 months ago

ソースコードではなくGhydraによるdecompileです。

accept commented 5 months ago

@mnakada Ghydra、以前InfineonのC16x系マイコンのdecompileが出来ないか試した時に使ったことはあるのですが、MIPSだとこんなにも精度よくdecompile出来るんですね… 勉強になります。ありがとうございます。

accept commented 5 months ago

@mnakada お世話になっております。 新しいSwingが届きまして動作検証したところ、ブザーによる影響は受けませんでした。 よってご報告させていただいた症状は個体差、もしくは本体内部の故障かと思われます。 分解して調査も考えましたが、一応USB-Ether以外は問題なく稼働するので今回はこのままにしようと思います。 貴重なお時間を割いていただきまして、本当にありがとうございました。

accept commented 5 months ago

動作のご報告としまして、今回調査に使用したCable Matters製RTL8153と、AmazonイーサネットアダプタRTL8152はAtomcam2とSwingにて問題なく使用することが出来ました。 MicroB延長ケーブルを使用した際はdmesgにbad cableなど怪しいログが出たことがあるので、延長環境での使用を検討の際は注意が必要かと思われます。 また今回のように通常使用時は問題なくてもUSB-Etherは故障、もしくは初期不良で使用できない可能性があるようです。

余談ですが、Amazonイーサネットアダプタはコネクタが太いので削らないと挿せませんが、Cable Matters製の方は削らなくてもAtomcam2とSwingにギリギリ挿すことが出来ました。 これらの情報が有線化を検討している方の参考になれば幸いです。