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

无法获取串口信息: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:45:40