移植DOS程序到Linux读取/写入USB串行端口

问题描述:

我有旧的DOS程序,它与串行端口一起工作。我需要将它移植到linux。我通过USB将我的串口设备连接到linux(使用rs232电缆)。它显示为/ dev/ttyUSB0。移植DOS程序到Linux读取/写入USB串行端口

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

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

+1

您应该介绍一下如何通过串口线来使用设备。如果您需要配置奇偶校验,位数等,则只需使用open,read,write plus tcsetattr。 – fghj

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

要添加串行端口时触发您的程序可以使用udev规则或旧的hotplug。要确定USB串行端口转换器的端口,您可以使用USB总线标识和端口标识。您可以通过lsusb -t命令检查号码。

  • 串行端口配置:http://linux.die.net/man/3/termios
  • 如果检查有接收的数据(LSR):选择()
  • 数据INB/OUTB - >读()/写()
  • MSR(DCD, RI,CTS)/ MCR(DTR,RTS如果硬件流控制禁用) - >的ioctl()或tty_ioctl

您可以从picocom source code

学习

实时应用程序可能存在的问题:由USB总线轮询和进程/线程切换引起的延迟。