古いバージョンではわかりませんが、Nuttx-9.1.0の場合だと、make menuconfigでもttyACMのID_SERIAL_SHORTを付与する項目が出てきません。udevadm infoで確認してもID_SERIAL_SHORTは"0"で固定されており、このままでは、USB接続時、ID_SERIAL_SHORを識別しとした個別のudevルールを設定することができません。そこでどうなっているのかソースコードをみたところ、
#include/nuttx/usb/cdcacm.h.orig #undef CONFIG_CDCACM_SERIALSTR #define CONFIG_CDCACM_SERIALSTR "0"となっていて、やはり"0"に固定されており、このままだと一々シリアル番号ごとにソースコードをかきかえる必要があります。そこで、とりあえずmake menuconfigでシリアル番号を設定できるようにしてみました。とはいっても変更は二か所のみです。 変更箇所1
--- include/nuttx/usb/cdcacm.h.orig 2020-09-21 00:09:41.000000000 +0900 +++ include/nuttx/usb/cdcacm.h 2020-12-22 16:17:52.860000000 +0900 @@ -235,8 +235,9 @@ # define CONFIG_CDCACM_PRODUCTSTR "CDC ACM Serial" #endif -#undef CONFIG_CDCACM_SERIALSTR +#ifndef CONFIG_CDCACM_SERIALSTR #define CONFIG_CDCACM_SERIALSTR "0" +#endif #undef CONFIG_CDCACM_CONFIGSTR #define CONFIG_CDCACM_CONFIGSTR "Bulk"変更箇所2
--- drivers/usbdev/Kconfig.orig 2020-09-21 00:09:41.000000000 +0900 +++ drivers/usbdev/Kconfig 2020-12-22 16:14:55.120000000 +0900 @@ -565,6 +565,10 @@ string "Product string" default "CDC/ACM Serial" +config CDCACM_SERIALSTR + string "CDC ACM SERIALSTR" + default "0" + endif # !CDCACM_COMPOSITE endif # CDCACMmake menuconfigで設定(注:シリアルは文字列で付与)しビルドしたものをlinuxに接続、udevadm info /dev/ttyACM0で確認すると以下の様になりました。
# udevadm info /dev/ttyACM0 P: /devices/pci0000:00/0000:00:12.0/usb4/4-2/4-2:1.0/tty/ttyACM0 N: ttyACM0 L: 0 S: serial/by-id/usb-NuttX_CDC_ACM_Serial_111122223333444455550002-if00 S: serial/by-path/pci-0000:00:12.0-usb-0:2:1.0 E: DEVPATH=/devices/pci0000:00/0000:00:12.0/usb4/4-2/4-2:1.0/tty/ttyACM0 E: DEVNAME=/dev/ttyACM0 E: MAJOR=166 E: MINOR=0 E: SUBSYSTEM=tty E: USEC_INITIALIZED=321164220006 E: ID_BUS=usb E: ID_VENDOR_ID=0525 E: ID_MODEL_ID=a4a7 E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller E: ID_PCI_INTERFACE_FROM_DATABASE=OHCI E: ID_VENDOR_FROM_DATABASE=Netchip Technology, Inc. E: ID_MODEL_FROM_DATABASE=Linux-USB Serial Gadget (CDC ACM mode) E: ID_VENDOR=NuttX E: ID_VENDOR_ENC=NuttX E: ID_MODEL=CDC_ACM_Serial E: ID_MODEL_ENC=CDC\x2fACM\x20Serial E: ID_REVISION=0101 E: ID_SERIAL=NuttX_CDC_ACM_Serial_111122223333444455550002 E: ID_SERIAL_SHORT=111122223333444455550002 E: ID_TYPE=generic E: ID_USB_INTERFACES=:020201:0a0000: E: ID_USB_INTERFACE_NUM=00 E: ID_USB_DRIVER=cdc_acm E: ID_USB_CLASS_FROM_DATABASE=Communications E: ID_PATH=pci-0000:00:12.0-usb-0:2:1.0 E: ID_PATH_TAG=pci-0000_00_12_0-usb-0_2_1_0 E: DEVLINKS=/dev/serial/by-id/usb-NuttX_CDC_ACM_Serial_111122223333444455550002-if00 /dev/serial/by-path/pci-0000:00:12.0-usb-0:2:1.0 E: TAGS=:systemd:ID_SERIAL_SHORTがきっちりと入っていますね。これでudevでID_SERIAL_SHORTを識別子として使ったルールが記述できそうです。なお確認は、stm32f103rcが載っているNucleoではないボードを使いました。今回は以上です。それでは。
コメント
コメントを投稿