Skip to content

通道绑定

通道绑定机制为 Linux CAN 设备提供稳定且可预测的网络接口命名方案,确保设备在系统重启或重新插拔后保持一致的设备标识。SDK 支持三种绑定策略:驱动绑定、USB 端口绑定和设备 ID 绑定。

驱动绑定

驱动绑定通过自动生成和加载 udev 规则,基于驱动程序类型为设备分配统一的命名前缀。该方案适用于同类型设备的统一管理。

设置步骤

  1. 执行自动化配置脚本
sudo ./build.sh -rules

该脚本将:

  • 创建 /etc/udev/rules.d/99-kcan-driver.rules 规则文件
  • 配置基于 DRIVERS=="kcan" 匹配规则
  • 设置统一的 kcan% n 命名格式(% n 为系统分配的序号)
  1. 设备重新枚举

执行完配置后,重新插拔 USB 设备以触发 udev 规则重新应用。

验证方法

绑定成功后,所有 kcan 驱动设备将以 kcan0kcan1 等格式命名:

$ ip link show | grep kcan
3: kcan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 72 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
4: kcan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 72 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10

driver bind

特点

  • 优势:配置简单
  • 适用场景:设备数量较少且不需要特定映射关系的应用
  • 局限性:设备命名顺序可能因硬件枚举顺序而变化

USB 端口绑定

原理

USB 端口绑定利用设备的物理 USB 拓扑结构信息(如总线地址、端口号)作为唯一标识符,实现设备与特定网络接口名称的永久映射。该方案提供基于物理位置的稳定命名。

实现步骤

1. 设备拓扑信息采集

使用 udevadm 工具获取目标设备的 USB 拓扑信息:

udevadm info -a -p /sys/class/net/can0

udevadm

2. 自定义 udev 规则配置

创建或编辑 USB 绑定规则文件:

sudo vi /etc/udev/rules.d/99-kcan-usb.rules

配置示例:

# 基于物理端口位置的设备绑定
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="kcan", \
    KERNELS=="5-1.3:1.0", \
    ATTR{dev_id}=="0x0", \
    NAME="kcan0"

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="kcan", \
    KERNELS=="5-1.4:1.0", \
    ATTR{dev_id}=="0x0", \
    NAME="kcan1"

配置参数说明:

  • KERNELS: USB 物理路径,确保设备插拔后名称不变
  • DRIVERS=="kcan": 限定为 kcan 驱动设备
  • NAME: 目标网络接口名称

3. udev 规则重载与验证

# 重载 udev 规则数据库
sudo udevadm control --reload-rules

# 触发设备重新枚举
sudo udevadm trigger --subsystem-match=net --action=add

4. 绑定验证

验证设备是否正确绑定到指定端口:

# 检查网络接口状态
ip link show kcan0 kcan1

usb bind

特点

  • 优势:基于物理位置的高可靠性,不受设备更换影响
  • 适用场景:固定部署环境,要求设备位置与名称严格对应
  • 注意事项:USB 端口变更需要更新规则配置

设备 ID 绑定

原理

设备 ID 绑定机制通过在硬件层面为每个 CAN 控制器分配唯一的数字标识符,并配置驱动程序基于该 ID 进行设备命名。该方案提供最高级别的设备标识独立性,不受物理位置或枚举顺序影响。

实现步骤

1. 设备 ID 配置

使用 kcan-settings 实用工具为各设备通道分配唯一 ID:

# 为第一台设备分配 ID 66
kcan-settings -f=/dev/kcanusbfd32 -d 66

# 为第二台设备分配 ID 67  
kcan-settings -f=/dev/kcanusbfd33 -d 67

ID 分配原则:

  • ID 范围:1-255(预留 0 作为特殊用途)
  • 同一系统中 ID 必须唯一
  • 建议采用连续分配便于管理

2. ID 配置验证

验证设备 ID 是否正确写入硬件:

# 查询当前设备 ID
kcan-settings -f=/dev/kcanusbfd32 -d

3. 驱动参数配置

修改内核模块配置以启用基于 ID 的设备分配:

sudo vi /etc/modprobe.d/kcan.conf

添加以下配置参数:

# 启用基于设备 ID 的命名分配机制
options kcan assign=devid

4. 内核模块重新加载

# 卸载当前驱动模块
sudo rmmod kcan

# 重新加载并应用新配置
sudo modprobe kcan

5. 绑定结果验证

重新枚举设备并验证绑定效果:

id bind

驱动智能连接,赋能科技未来