You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Zephyr USB CDC ACM设备分配唯一COM端口以实现一致识别?

解决Zephyr USB CDC ACM设备固定COM端口问题

问题背景

Zephyr项目中的USB CDC ACM设备每次连接不同USB接口时,主机分配的tty.usbmodemXXX端口名会动态变化,需要实现固定端口名以便其他应用持续查询。

解决步骤

1. 给Zephyr设备配置唯一USB标识

主机通过USB设备的厂商ID(VID)、产品ID(PID)和序列号识别唯一设备,需在Zephyr中配置这些固定值:

方式一:修改设备树

在现有设备树节点下添加USB描述符配置:

&zephyr_udc0 {
    cdc_acm {
        compatible = "zephyr,cdc-acm-uart";
        label = "CDC_ACM";
        status = "okay";
    };

    usb_device_descriptor {
        vendor-id = <0x1234>; /* 替换为你的厂商ID,正式产品需用USB-IF合法ID */
        product-id = <0x5678>; /* 替换为你的产品ID */
        serial-number = "MY_ZEPHYR_CDC_001"; /* 全局唯一序列号,批量生产可绑定硬件ID */
        product = "Zephyr CDC ACM Device";
        manufacturer = "My Company";
    };
};
方式二:通过prj.conf配置

在项目配置文件prj.conf中添加:

CONFIG_USB_DEVICE_VID=0x1234
CONFIG_USB_DEVICE_PID=0x5678
CONFIG_USB_DEVICE_SERIAL_NUMBER="MY_ZEPHYR_CDC_001"
CONFIG_USB_DEVICE_MANUFACTURER="My Company"
CONFIG_USB_DEVICE_PRODUCT="Zephyr CDC ACM Device"

2. 主机端(Linux)配置udev规则绑定固定端口

即使设备有了唯一标识,主机默认仍会分配动态端口名,需通过udev规则创建固定软链接:

  1. 创建udev规则文件:
sudo touch /etc/udev/rules.d/99-zephyr-cdc.rules
  1. 编辑文件并添加以下规则(替换成你设置的VID、PID和序列号):
SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", ATTRS{serial}=="MY_ZEPHYR_CDC_001", SYMLINK+="ttyZephyrCDC"
  • 规则含义:匹配指定VID/PID/序列号的tty设备,创建/dev/ttyZephyrCDC软链接作为固定端口名
  1. 重新加载udev规则生效:
sudo udevadm control --reload-rules
sudo udevadm trigger

验证

重新连接设备后,即可通过/dev/ttyZephyrCDC访问CDC ACM端口,无论连接哪个USB接口,该名称保持不变。

内容的提问来源于stack exchange,提问作者surus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:13:28