我在 INTEL NUC DE3815TYBE 上使用串行端口时遇到问题。我安装了 Debian Wheezy,内核版本为 3.16.0-0.bpo.4-amd64。
当我做:
setserial -g /dev/ttyS*
我得到:
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x0000, IRQ: 19
/dev/ttyS2, UART: 16550A, Port: 0x0000, IRQ: 19
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3
我可以毫无问题地连接到 ttyS0 - ttyS2,但 ttyS3 无法正常工作,并且收到此错误:
我调用命令:
stty -F /dev/ttyS3 9600 cs8 cread clocal
我得到:
stty: /dev/ttyS3: Input/output error
知道如何解决这个问题吗?我以 ROOT 身份运行命令。我也尝试过:setserial /dev/ttyS3 irq 3 uart 16550Askip_test但我得到相同的stty:/dev/ttyS3:输入/输出错误
输出:
dmesg | grep tty
[ 0.000000] console [tty0] enabled
[ 0.952559] serial8250: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[ 0.953593] 0000:00:1e.3: ttyS1 at MMIO 0xd0810000 (irq = 19, base_baud = 2764800) is a 16550A
[ 0.954072] 0000:00:1e.4: ttyS2 at MMIO 0xd080e000 (irq = 19, base_baud = 2764800) is a 16550A
[ 27.740208] ttyS2 - failed to request DMA
[ 27.746627] ttyS1 - failed to request DMA
[ 440.532070] ttyS3: LSR safety check engaged!
[ 443.700047] ttyS3: LSR safety check engaged!
[ 445.288960] ttyS3: LSR safety check engaged!
[ 452.796029] ttyS3: LSR safety check engaged!
[ 453.716441] ttyS3: LSR safety check engaged!
[ 463.732506] ttyS3: LSR safety check engaged!
[ 470.222491] ttyS3: LSR safety check engaged!
[ 470.222774] ttyS3: LSR safety check engaged!
[ 473.748363] ttyS3: LSR safety check engaged!
[ 474.359756] ttyS3: LSR safety check engaged!
[ 482.783201] ttyS3: LSR safety check engaged!
[ 483.763953] ttyS3: LSR safety check engaged!
[ 493.931641] ttyS3: LSR safety check engaged!
[ 503.982224] ttyS3: LSR safety check engaged!
[ 514.020686] ttyS3: LSR safety check engaged!
[ 524.074170] ttyS3: LSR safety check engaged!
[ 534.090644] ttyS3: LSR safety check engaged!
[ 544.110381] ttyS3: LSR safety check engaged!
lsof /dev/ttyS3 不返回任何内容,所以这意味着没有任何东西连接到 ttyS3 我猜,但我对 Linux 不太熟练,所以我可能会错
为什么我在 Linux 中可以看到 4 个 ttyS*,但实际上我的主板上只有 2 个物理串行端口?
答案1
您声明您只有 2 个物理串行端口,您检测到 ttyS1 和 ttyS2。 ttyS3 和 ttyS4 不存在;它们是暴露的,但你必须忽略它们。这就是驱动程序的工作方式;它会探测什么可能是串行端口并将其暴露给您,但您必须验证它是否是真正的串行端口,因为驱动程序无法 100% 确定。这行:
ttyS3:LSR 安全检查已启动!
告诉您串行端口ttyS3
尚未准备好,在您的情况下它永远不会准备好,因为它不存在。驱动程序尽力正确检测串行端口,但有时会失败。在这种情况下,您必须找到哪些公开的接口真正手动连接到硬件,而您已经这样做了。