Linux下为串口设备创建软链接报错“Inappropriate ioctl for device”求助
问题原因及解决办法
你的问题出在当前udev规则匹配的是USB总线原始设备节点(也就是/dev/bus/usb/001/003这类节点),而不是USB转串口对应的tty设备(比如/dev/ttyACM0)。serial库只能操作tty类型的串口设备,直接访问USB总线节点会因为不支持串口配置的ioctl命令报错。
可以通过修改udev规则解决,具体步骤如下:
确认设备的tty节点属性
插好设备后,执行命令查看/dev/ttyACM0的详细udev属性:udevadm info -a -n /dev/ttyACM0在输出里找到包含
idVendor=="0416"和idProduct=="5011"的父设备条目,确认这些属性属于该tty设备的父USB设备。修改udev规则文件
编辑/etc/udev/rules.d/ka3305p.rules,将规则改成:SUBSYSTEM=="tty", ATTRS{idVendor}=="0416", ATTRS{idProduct}=="5011", SYMLINK+="ka3305p", MODE="0660", GROUP="dialout"SUBSYSTEM=="tty":限定只匹配tty类设备,确保软链接指向串口设备ATTRS{}(复数形式):匹配父USB设备的vendor和product ID,因为tty节点本身可能没有这些属性,需要从父设备继承
重新加载udev规则并生效
执行命令重新加载规则,然后触发设备重认:sudo udevadm control --reload-rules sudo udevadm trigger验证结果
重新插拔设备,查看/dev/ka3305p的指向,应该会指向/dev/ttyACM0(或对应的tty节点),此时用Python的serial库访问该软链接就能正常通信了。
内容的提问来源于stack exchange,提问作者Mantabit
相关产品推荐
相关产品推荐

