【问题标题】:Porting DOS program to linux to read/write serial port over usb将 DOS 程序移植到 linux 以通过 USB 读取/写入串行端口
【发布时间】:2013-07-11 18:18:59
【问题描述】:

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

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

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

【问题讨论】:

  • 您应该更好地描述您将如何通过串行线路使用设备。如果需要配置奇偶校验、位数等,只需要使用open、read、write加上tcsetattr即可。

标签: linux serial-port dos tty


【解决方案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 source code学习

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

【讨论】:

    猜你喜欢
    • 2011-05-27
    • 2011-04-21
    • 1970-01-01
    • 2012-05-07
    • 2021-09-20
    • 1970-01-01
    • 2022-01-20
    • 2012-08-29
    • 1970-01-01
    相关资源
    最近更新 更多