kyas-t5
2020年12月14日 14時24分
お世話になります。
LinuxとArmadilloの初心者です。
Armadillo-x1のCOM8を利用してUSB-CDC/MSCのgadgetを使用し
USB-CDCはModbusRTUを実装してModbus通信を行います。
また、Ethernetを利用したModbusTCPの実装も進めています。
2つのModbusの通信調停を行うため、USB-CDC側の接続を
検知したらModbusTCP側の処理を停止したいと考えています。
ですのでUSB-CDCの抜き差しを検知する方法を教えて頂きたいです。
コメント
kyas-t5
ご返信ありがとうございます。
> udevルールを使用することで検知できます。
> 詳しい記述方法については udev のmanページをご確認ください。
>
>
> [armadillo]# man udev >
>
> USB-CDCが挿された時に作成されるデバイスファイルがわかっていれば、下記
> コマンドでudevルールの記述に必要な情報を取得できます。
>
>
> [armadillo]# udevadm info -a -n /dev/[デバイスファイル名] >
デバイスはttyGS0を使用していまして上記コマンドを打つと
looking at device `/devices/virtual/tty/ttyGS0`
KERNEL=="ttyGS0"
SUBSYSTEM=="tty"
DRIVER==""
と表示されます。
udevmonitor info /dev/ttyGS0で状態変化を確認してみましたが
なにもログが表示されませんでしたがその状態でUSB TypeAのところにUSBメモリを抜き差ししたところログが出ました。
(接続時はaddのログで抜いた時はremoveのログ)
今回、ArmadilloがUSBデバイスになり、Windowsがマスターとなり接続しています。
また、補足としてUSBを接続するとg_acm_ms gadget: high-speed config #1 Composite Gadget (ACM+MS)は表示されます。
何か設定が良くないのでしょうか?
at_akihito.irie
kyas-t5
> 入江です。
>
> 以下のコマンドを実行後、Armadilloと対向機間のUSB接続を抜き差しした時の
> 出力を送っていただけますでしょうか。
>
>
> [armadillo]# udevadm monitor >
>
> 以上、よろしくお願いいたします。
>
>
返事が遅くなり申し訳ありません。
udevadm monitorを使用するとttyGS0のUSB抜き差しログはArmadilloボードのUSB端子の抜き差ししかログが出力されませんした。
そこでいろいろ調べた中で以下の場所でCOM8のUSB gadgetによる抜き差しで情報が変化することを確認できたのでその情報を見るようにしました。
/sys/devices/soc0/soc/30800000.aips-bus/30b20000.usb/ci_hdrc.2/pools
上記の監視に問題があるようであればご指摘ください。
at_akihito.irie
入江です。
> そこでいろいろ調べた中で以下の場所でCOM8のUSB gadgetによる抜き差しで情報が変化することを確認できたのでその情報を見るようにしました。
> /sys/devices/soc0/soc/30800000.aips-bus/30b20000.usb/ci_hdrc.2/pools
> 上記の監視に問題があるようであればご指摘ください。
結果としてUSBの抜き差しが検知できる状態にはなっていると思われますが、
poolsは本質的にはUSBの抜き差しを検知するものではありません。
USBのVBUSを監視するのが良いかと思われます。
当方で試してみましたので、以下に手順をまとめます。
下記手順はArmadillo-X1 評価用拡張ボードセット向けのソフトウェアをベー
スに動作確認を行いましたので、適宜お使いの環境に読み替えてください。
まず、標準イメージからDTSの変更が必要になるので、下記ページからダウン
ロードしたLinuxカーネルソースコード(at17)の、
arch/arm/boot/dts/armadillo_x1-extboard-eva01-usbotg2-device.dtsi
を修正します。
https://armadillo.atmark-techno.com/resources/software/armadillo-x1/lin…
&usbotg2 { dr_mode = "peripheral"; imx-usb-charger-detection; <-この行を追加 status = "okay"; };
修正後、カーネル(uImage)とDTB(armadillo_x1-extboard-eva01-usbdevice.dtb)
をビルドし、Armadillo-X1に書き込みます。
起動後、 /etc/udev/rules.d/10-usb-cdc.rules を作成し以下のように編集し
て、ルールのリロードを行います。
[armadillo]# vi /etc/udev/rules.d/10-usb-cdc.rules [armadillo]# cat /etc/udev/rules.d/10-usb-cdc.rules SUBSYSTEM=="power_supply", KERNEL=="imx_usb_charger", ATTR{present}=="0", RUN="/usr/bin/logger disconnect" SUBSYSTEM=="power_supply", KERNEL=="imx_usb_charger", ATTR{present}=="1", RUN="/usr/bin/logger connect" [armadillo]# udevadm control --reload-rules
以下のコマンド実行後に、Armadillo-X1と対向機間のUSB接続を挿抜すると、
ログが出力されます。
[armadillo]# journalctl -f -- Logs begin at Thu 2019-02-14 19:11:59 JST. -- Jan 27 10:18:04 armadillo root[2766]: disconnect Jan 27 10:18:06 armadillo root[2768]: connect Jan 27 10:18:07 armadillo kernel: g_cdc gadget: high-speed config #1: CDC Composite (ECM + ACM)
ここまで動作したならば、rulesファイルの RUN= を行いたい処理が記述され
たシェルスクリプトを実行するようにすると良いと思います。
以上、よろしくお願いいたします。
kyas-t5
入江様
お世話になります
ご指示いただいた内容で無事に検出することができました。
ありがとうございました。
> 入江です。
>
> > そこでいろいろ調べた中で以下の場所でCOM8のUSB gadgetによる抜き差しで情報が変化することを確認できたのでその情報を見るようにしました。
> > /sys/devices/soc0/soc/30800000.aips-bus/30b20000.usb/ci_hdrc.2/pools
> > 上記の監視に問題があるようであればご指摘ください。
>
> 結果としてUSBの抜き差しが検知できる状態にはなっていると思われますが、
> poolsは本質的にはUSBの抜き差しを検知するものではありません。
>
> USBのVBUSを監視するのが良いかと思われます。
> 当方で試してみましたので、以下に手順をまとめます。
>
> 下記手順はArmadillo-X1 評価用拡張ボードセット向けのソフトウェアをベー
> スに動作確認を行いましたので、適宜お使いの環境に読み替えてください。
>
> まず、標準イメージからDTSの変更が必要になるので、下記ページからダウン
> ロードしたLinuxカーネルソースコード(at17)の、
> arch/arm/boot/dts/armadillo_x1-extboard-eva01-usbotg2-device.dtsi
> を修正します。
> https://armadillo.atmark-techno.com/resources/software/armadillo-x1/lin…
>
>
> &usbotg2 { > dr_mode = "peripheral"; > imx-usb-charger-detection; <-この行を追加 > status = "okay"; > }; >
>
> 修正後、カーネル(uImage)とDTB(armadillo_x1-extboard-eva01-usbdevice.dtb)
> をビルドし、Armadillo-X1に書き込みます。
>
> 起動後、 /etc/udev/rules.d/10-usb-cdc.rules を作成し以下のように編集し
> て、ルールのリロードを行います。
>
>
> [armadillo]# vi /etc/udev/rules.d/10-usb-cdc.rules > [armadillo]# cat /etc/udev/rules.d/10-usb-cdc.rules > SUBSYSTEM=="power_supply", KERNEL=="imx_usb_charger", ATTR{present}=="0", RUN="/usr/bin/logger disconnect" > SUBSYSTEM=="power_supply", KERNEL=="imx_usb_charger", ATTR{present}=="1", RUN="/usr/bin/logger connect" > [armadillo]# udevadm control --reload-rules >
>
> 以下のコマンド実行後に、Armadillo-X1と対向機間のUSB接続を挿抜すると、
> ログが出力されます。
>
>
> [armadillo]# journalctl -f > -- Logs begin at Thu 2019-02-14 19:11:59 JST. -- > Jan 27 10:18:04 armadillo root[2766]: disconnect > Jan 27 10:18:06 armadillo root[2768]: connect > Jan 27 10:18:07 armadillo kernel: g_cdc gadget: high-speed config #1: CDC Composite (ECM + ACM) >
>
> ここまで動作したならば、rulesファイルの RUN= を行いたい処理が記述され
> たシェルスクリプトを実行するようにすると良いと思います。
>
> 以上、よろしくお願いいたします。
>
kyas-t5
入江様
お世話になります。
USB抜き差しでご助力頂きたい内容が出てきましたのでお手数ですがご回答を頂きたく。
本項目でUSBの抜き差しした時にconnectとdisconnectの検出は出来るのですが
COM8を使用したUSB接続でPCとArmadilloをUSB接続しVBUSによる電源供給した場合、
connectにならない状況になっています。
これをCOM8によるUSB接続による電源供給で起動し、USB接続状態を検知する方法を教え頂けますでしょうか?
例えば以下は接続有無として見ることは可能ですか?
/sys/devices/soc0/soc/30800000.aips-bus/30b20000.usb/power_supply/imx_usb_charger/uevent
----ここから中身----
POWER_SUPPLY_NAME=imx_usb_charger
POWER_SUPPLY_PRESENT=0
POWER_SUPPLY_ONLINE=1 ← これ
POWER_SUPPLY_CURRENT_MAX=0
----ここまで----
POWER_SUPPLY_PRESENTは電源供給中のUSB抜き差しで1=接続、0=未接続は検出出来ますがUSB電源供給の無操作では0のままになっています。
POWER_SUPPLY_ONLINEは電源供給中のUSB抜き差しは上記と同じく1=接続、0=未接続で検出出来、USB電源供給でも1になっています。
> 入江様
>
> お世話になります
>
> ご指示いただいた内容で無事に検出することができました。
> ありがとうございました。
> > 入江です。
> >
> > > そこでいろいろ調べた中で以下の場所でCOM8のUSB gadgetによる抜き差しで情報が変化することを確認できたのでその情報を見るようにしました。
> > > /sys/devices/soc0/soc/30800000.aips-bus/30b20000.usb/ci_hdrc.2/pools
> > > 上記の監視に問題があるようであればご指摘ください。
> >
> > 結果としてUSBの抜き差しが検知できる状態にはなっていると思われますが、
> > poolsは本質的にはUSBの抜き差しを検知するものではありません。
> >
> > USBのVBUSを監視するのが良いかと思われます。
> > 当方で試してみましたので、以下に手順をまとめます。
> >
> > 下記手順はArmadillo-X1 評価用拡張ボードセット向けのソフトウェアをベー
> > スに動作確認を行いましたので、適宜お使いの環境に読み替えてください。
> >
> > まず、標準イメージからDTSの変更が必要になるので、下記ページからダウン
> > ロードしたLinuxカーネルソースコード(at17)の、
> > arch/arm/boot/dts/armadillo_x1-extboard-eva01-usbotg2-device.dtsi
> > を修正します。
> > https://armadillo.atmark-techno.com/resources/software/armadillo-x1/lin…
> >
> >
> > &usbotg2 { > > dr_mode = "peripheral"; > > imx-usb-charger-detection; <-この行を追加 > > status = "okay"; > > }; > >
> >
> > 修正後、カーネル(uImage)とDTB(armadillo_x1-extboard-eva01-usbdevice.dtb)
> > をビルドし、Armadillo-X1に書き込みます。
> >
> > 起動後、 /etc/udev/rules.d/10-usb-cdc.rules を作成し以下のように編集し
> > て、ルールのリロードを行います。
> >
> >
> > [armadillo]# vi /etc/udev/rules.d/10-usb-cdc.rules > > [armadillo]# cat /etc/udev/rules.d/10-usb-cdc.rules > > SUBSYSTEM=="power_supply", KERNEL=="imx_usb_charger", ATTR{present}=="0", RUN="/usr/bin/logger disconnect" > > SUBSYSTEM=="power_supply", KERNEL=="imx_usb_charger", ATTR{present}=="1", RUN="/usr/bin/logger connect" > > [armadillo]# udevadm control --reload-rules > >
> >
> > 以下のコマンド実行後に、Armadillo-X1と対向機間のUSB接続を挿抜すると、
> > ログが出力されます。
> >
> >
> > [armadillo]# journalctl -f > > -- Logs begin at Thu 2019-02-14 19:11:59 JST. -- > > Jan 27 10:18:04 armadillo root[2766]: disconnect > > Jan 27 10:18:06 armadillo root[2768]: connect > > Jan 27 10:18:07 armadillo kernel: g_cdc gadget: high-speed config #1: CDC Composite (ECM + ACM) > >
> >
> > ここまで動作したならば、rulesファイルの RUN= を行いたい処理が記述され
> > たシェルスクリプトを実行するようにすると良いと思います。
> >
> > 以上、よろしくお願いいたします。
> >
at_akihito.irie
kyas-t5
at_akihito.irie
2020年12月22日 14時40分
入江です。
> ですのでUSB-CDCの抜き差しを検知する方法を教えて頂きたいです。
udevルールを使用することで検知できます。
詳しい記述方法については udev のmanページをご確認ください。
USB-CDCが挿された時に作成されるデバイスファイルがわかっていれば、下記
コマンドでudevルールの記述に必要な情報を取得できます。
以上、よろしくお願いいたします。