无法获取串口信息:Innapropriate ioctl for device问题求解
解决USB转串口设置波特率时的"Inappropriate ioctl for device"错误
问题背景
执行自定义bash脚本设置/dev/ttyUSB0波特率时,触发错误提示:
Cannot get serial info: Inappropriate ioctl for device
原脚本内容:
#!/usr/bin/env bash BASEBPS=24000000 [ "$2" = "" ] && { echo 'use args <dev> <bps>'; exit; } dev=$1 bps=$2 setserial $dev divisor $[ $BASEBPS / $bps ] spd_cust stty -F $dev 38400 2> /dev/null
执行命令:
sudo ./setbaud.sh /dev/ttyUSB0 256000
错误原因
setserial是为传统硬件UART串口设计的配置工具,而/dev/ttyUSB0属于USB转串口设备(常见驱动为CH340、PL2303等),这类设备的驱动不支持setserial依赖的ioctl系统调用,因此会触发该错误。
解决方法
方法1:直接用stty设置波特率
多数现代USB转串口驱动支持通过stty直接设置自定义波特率,替换原脚本中setserial和stty的逻辑:
#!/usr/bin/env bash [ "$2" = "" ] && { echo '用法: <dev> <bps>'; exit 1; } dev=$1 bps=$2 # 先配置串口为raw模式,避免干扰 stty -F $dev raw -echo -echoe -echok # 设置目标波特率 stty -F $dev $bps
直接执行测试:
sudo stty -F /dev/ttyUSB0 256000
方法2:使用芯片专属配置工具
如果stty无法生效,针对不同USB转串口芯片使用对应工具:
- CH340/CH341芯片:安装
ch341-uart-config后,执行:sudo ch341-uart-config -b 256000 /dev/ttyUSB0 - PL2303芯片:部分驱动支持通过sysfs节点配置:
echo 256000 | sudo tee /sys/class/tty/ttyUSB0/device/baudrate
方法3:验证串口配置
设置完成后,可通过以下命令确认波特率是否生效:
stty -F /dev/ttyUSB0
内容的提问来源于stack exchange,提问作者Luiz Henrique
相关产品推荐
相关产品推荐

