将DOS程序移植到linux上通过usb读写串口

将DOS程序移植到linux上通过usb读写串口,linux,serial-port,dos,tty,Linux,Serial Port,Dos,Tty,我有一个旧的DOS程序,它使用串行端口。我需要将它移植到linux。我已经通过USB(使用rs232电缆)将串行设备连接到linux。它显示为/dev/ttyUSB0 我是否可以使用函数inb、outb(而不是DOS等效的inp、outp)从我的代码中读取或写入设备?(inb和outb用于低层读写字节到特定端口地址的特殊功能)。我不明白如何确定正确的端口号 也许还有另一种方法——例如打开文件“/dev/ttyUSB0”。但在这种情况下,我在读取诸如调制解调器控制寄存器(MCR)或线路状态寄存器(

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

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


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

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

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

  • 串行端口配置:
  • 检查是否有接收到的数据(LSR):选择()
  • 数据输入/输出->读取()/写入()
  • MSR(DCD、RI、CTS)/MCR(DTR、RTS,如果硬件流控制被禁用)->ioctl()或
你可以从中学习


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

您最好描述如何通过串行线使用设备。如果需要配置奇偶校验、位数等,只需使用open、read、write plus-tcsettr即可。