3

我有DOS与串行端口一起使用的旧程序。我需要将它移植到linux. 我已经通过 USB(使用 rs232 电缆)将我的串行设备连接到 linux。它显示为 /dev/ttyUSB0。

我可以使用函数inboutb而不是DOS等效的 inp、outp)从我的代码中读取或写入设备吗?(inb以及outb低级读写字节到特定端口地址的特殊功能)。我不明白如何确定正确的端口号。

也许还有另一种方法 - 例如打开文件'/dev/ttyUSB0'。但在这种情况下,我在读取设备寄存器时遇到问题,例如调制解调器控制寄存器 (MCR) 或线路状态寄存器 (LSR)。

4

1 回答 1

1

您可以将 inb/outb 或 mmap(例如 devmem,取决于架构)用于板载标准串行端口,但不建议在用户空间中使用。您需要 root 权限,可能会导致与内核驱动程序发生冲突,并且您必须确保您的硬件(例如 16C550)与您的代码完全兼容。

要在添加串行端口时触发您的程序,可以使用 udev 规则或旧的热插拔。要确定 USB 串行端口转换器的端口,您可以使用 USB 总线 ID 和端口 ID。您可以通过lsusb -t命令检查数字。

  • 串口配置: http: //linux.die.net/man/3/termios
  • 检查是否有接收到的数据(LSR):select()
  • 数据输入 / 输出 -> 读取() / 写入()
  • MSR (DCD, RI, CTS) / MCR (DTR, RTS if hardware flow control disabled) -> ioctl() or tty_ioctl

可以参考picocom源码

实时应用可能出现的问题:USB 总线轮询和进程/线程切换导致的延迟。

于 2013-07-15T16:04:49.863 回答