Armadilloフォーラム

udevのrulesが動作せず、USBのcp210xデバイスが認識されない

kiso.masaki

2024年1月10日 19時19分

お世話になっております。木曽と申します。

BTOをイメージ(xxx.img)の動作確認のため、G3のudevに99-usb-serial.rulesを作成し、
USBデバイスを検知した場合、cp210xのデバイスファイル(ttyRADIO)を作成するようにしております。

cp210xは、menuconfigで有効化したカーネルを私用していますが、
USBデバイスを検知した場合、99-usb-serial.rulesが動作せず、
USBデバイスをcp210xとして検知、デバイファイルのリンクができておりません。

root@armadillo:~# zcat /proc/config.gz|grep CP210X
CONFIG_USB_SERIAL_CP210X=y
root@armadillo:~# 
root@armadillo:~# lsusb
Bus 002 Device 003: ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem
Bus 002 Device 002: ID 0424:3503 Standard Microsystems Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 1790:0008  // < -- ここ
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@armadillo:~# 

お手数ですが、不足している点、考慮漏れなどあれば、アドバイスをお願いたします。
また、不足している情報があれば、ご指摘をお願いたします。

root@armadillo:~# uname -a
Linux armadillo 4.9.133-at30 #2 SMP PREEMPT Mon Dec 18 11:44:40 JST 2023 armv7l GNU/Linux
 
root@armadillo:~# cat /etc/os-release 
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
root@armadillo:~# 
root@armadillo:~# ls -l /etc/udev/rules.d/
total 8
-rw-r--r-- 1 root root 121 Jul 26 16:46 61-x1-license.rules
-rw-r--r-- 1 root root 230 Jan 10 18:49 99-usb-serial.rules
root@armadillo:~# cat /etc/udev/rules.d/99-usb-serial.rules 
ACTION=="remove", GOTO="tty_end"
SUBSYSTEM!="tty", GOTO="tty_end"
 
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", DRIVERS=="cp210x", ACTION=="add", ENV{ID_VENDOR_ID}=="1790", ENV{ID_MODEL_ID}=="0008", SYMLINK+="ttyRADIO" 
 
LABEL="tty_end"
root@armadillo:~# dmesg | grep USB
[    0.334981] GPIO line 85 (EC25_USB_VBUS) hogged as output/low
[    1.715605] pegasus: v0.9.3 (2013/04/25), Pegasus/Pegasus II USB Ethernet driver
[    1.784483] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.801459] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[    1.827422] usbserial: USB Serial support registered for generic
[    1.836505] usbserial: USB Serial support registered for cp210x
[    1.845668] usbserial: USB Serial support registered for FTDI USB Serial Device
[    1.856043] usbserial: USB Serial support registered for GSM modem (1-port)
[    1.866072] usbserial: USB Serial support registered for Sierra USB modem
[    1.876883] usbserial: USB Serial support registered for carelink
[    1.881731] usbserial: USB Serial support registered for zio
[    1.886133] usbserial: USB Serial support registered for funsoft
[    1.890883] usbserial: USB Serial support registered for flashloader
[    1.895991] usbserial: USB Serial support registered for google
[    1.900648] usbserial: USB Serial support registered for libtransistor
[    1.905929] usbserial: USB Serial support registered for vivopay
[    1.910674] usbserial: USB Serial support registered for moto_modem
[    1.915695] usbserial: USB Serial support registered for motorola_tetra
[    1.921047] usbserial: USB Serial support registered for novatel_gps
[    1.926154] usbserial: USB Serial support registered for hp4x
[    1.930637] usbserial: USB Serial support registered for suunto
[    1.935318] usbserial: USB Serial support registered for siemens_mpi
[    2.023816] ci_hdrc ci_hdrc.0: new USB bus registered, assigned bus number 1
[    2.051645] ci_hdrc ci_hdrc.0: USB 2.0 started, EHCI 1.00
[    2.056590] hub 1-0:1.0: USB hub found
[    2.074189] ci_hdrc ci_hdrc.1: new USB bus registered, assigned bus number 2
[    2.101640] ci_hdrc ci_hdrc.1: USB 2.0 started, EHCI 1.00
[    2.106537] hub 2-0:1.0: USB hub found
[    2.229676] USB Video Class driver (1.1.1)
[    2.421643] usb 1-1: new full-speed USB device number 2 using ci_hdrc
[    2.471634] usb 2-1: new high-speed USB device number 2 using ci_hdrc
[    2.673593] hub 2-1:1.0: USB hub found
[    2.682738] usbhid: USB HID core driver
[   15.711713] usb 2-1.2: new high-speed USB device number 3 using ci_hdrc
[   15.897383] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB0
[   16.044956] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB1
[   16.120769] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB2
[   16.196456] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB3
[   86.800669] usb 1-1: USB disconnect, device number 2
[   92.372547] usb 1-1: new full-speed USB device number 3 using ci_hdrc
root@armadillo:~# 

また、補足事項として、 EC25-J のネットワークデバイス名を固定化するため、`/etc/ModemManager/symlink.conf `を
以下のように修正しております。

# quectel-ec25-symlink
# cinterion-els31-symlink
↓
quectel-ec25-symlink
# cinterion-els31-symlink

以上です。
よろしくお願いいたします。

コメント

古関です。

echo 1790 0008 > /sys/bus/usb-serial/drivers/cp210x/new_id

をしてからUSBデバイスを抜き差ししたらどうなるでしょうか?

> 古関です。
>
> echo 1790 0008 > /sys/bus/usb-serial/drivers/cp210x/new_id
>
> をしてからUSBデバイスを抜き差ししたらどうなるでしょうか?

古関さん
お世話になっております。木曽です。

ご回答いただき、ありがとうございます。

仰る通りコマンドを実行してからUSBデバイス(cp210x)を検知できるようになりました。
イメージファイル作成時に、コマンドが抜けている箇所があるようなので確認します。

root@armadillo:~# dmesg | grep USB
...
[   15.711679] usb 2-1.2: new high-speed USB device number 3 using ci_hdrc
[   15.905013] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB0
[   15.985591] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB1
[   16.020244] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB2
[   16.044359] usb 2-1.2: GSM modem (1-port) converter now attached to ttyUSB3
[   57.825920] usb 1-1: cp210x converter now attached to ttyUSB4
[   64.922792] usb 1-1: USB disconnect, device number 2
[   64.927034] cp210x ttyUSB4: cp210x converter now disconnected from ttyUSB4
 
...

以上です。
よろしくお願いいたします。

古関です。

> echo 1790 0008 > /sys/bus/usb-serial/drivers/cp210x/new_id
これは、kernel起動後に、
cp210xデバイスとして検知するVenderID/ProductIDのホワイトリストに
"1790 0008"を追加した状況です。

恒久的にやるなら、以下のようにLinux-Kernelソースのテーブルに
"1790 0008"を追加し、ビルドしたイメージを使う方が良いかなと思います。
(起動後じゃなくて、スタティックにリストに入れておく)

https://github.com/atmark-techno/linux-4.9-at/blob/master/drivers/usb/serial/cp210x.c#L52
 
static const struct usb_device_id id_table[] = {
	{ USB_DEVICE(0x045B, 0x0053) }, /* Renesas RX610 RX-Stick */
... 省略 ....
	{ USB_DEVICE(0x16DC, 0x0015) }, /* W-IE-NE-R Plein & Baus GmbH CML Control, Monitoring and Data Logger */
+	{ USB_DEVICE(0x1790, 0x0008) }, /* 追加 */
	{ USB_DEVICE(0x17A8, 0x0001) }, /* Kamstrup Optical Eye/3-wire */

よろしくお願いいたします。

> 古関です。
>
> > echo 1790 0008 > /sys/bus/usb-serial/drivers/cp210x/new_id
> これは、kernel起動後に、
> cp210xデバイスとして検知するVenderID/ProductIDのホワイトリストに
> "1790 0008"を追加した状況です。
>
> 恒久的にやるなら、以下のようにLinux-Kernelソースのテーブルに
> "1790 0008"を追加し、ビルドしたイメージを使う方が良いかなと思います。
> (起動後じゃなくて、スタティックにリストに入れておく)
>
>

> https://github.com/atmark-techno/linux-4.9-at/blob/master/drivers/usb/serial/cp210x.c#L52
> 
> static const struct usb_device_id id_table[] = {
> 	{ USB_DEVICE(0x045B, 0x0053) }, /* Renesas RX610 RX-Stick */
> ... 省略 ....
> 	{ USB_DEVICE(0x16DC, 0x0015) }, /* W-IE-NE-R Plein & Baus GmbH CML Control, Monitoring and Data Logger */
> +	{ USB_DEVICE(0x1790, 0x0008) }, /* 追加 */
> 	{ USB_DEVICE(0x17A8, 0x0001) }, /* Kamstrup Optical Eye/3-wire */
> 

>
> よろしくお願いいたします。
>

古関さん
お世話になっております。木曽です。

追記でご返信いただき、ありがとうございます。

今回は、明示的にkernel起動後にcp210xデバイスを検知するようにしたいので、
Linux-Kernelソースのテーブルには手を加えず、プログラム起動時のshellで以下を記述するようにしました。

> > echo 1790 0008 > /sys/bus/usb-serial/drivers/cp210x/new_id

以下の方法については、今後の参考にさせていただきます。
ありがとうございます。

>

> https://github.com/atmark-techno/linux-4.9-at/blob/master/drivers/usb/serial/cp210x.c#L52
> 
> static const struct usb_device_id id_table[] = {
> 	{ USB_DEVICE(0x045B, 0x0053) }, /* Renesas RX610 RX-Stick */
> ... 省略 ....
> 	{ USB_DEVICE(0x16DC, 0x0015) }, /* W-IE-NE-R Plein & Baus GmbH CML Control, Monitoring and Data Logger */
> +	{ USB_DEVICE(0x1790, 0x0008) }, /* 追加 */
> 	{ USB_DEVICE(0x17A8, 0x0001) }, /* Kamstrup Optical Eye/3-wire */
> 

本件クローズで問題ございません。

以上です。
よろしくお願いたします。