Linux下查看串口是否可用的笨方法

  最近尝试将一个网关程序从 VxWorks 平台移植到 Linux 平台。在串口方面遇到了一些问题,这里记录一下。
  首先在 VxWorks 下,用 devs 命令查看设备:

-> devs
drv name
  0 /null
  1 /tyCo/0
  1 /tyCo/1
  2 /pcConsole/0
  2 /pcConsole/1
  9 host:
  4 /ram
 11 /vio
  4 /ahci01:1
value = 0 = 0x0

  源程序中用到的串口就是 /tyCo/0 和 /tyCo/1,然后同事说 Linux 系统没有串口驱动,我想这怎么可能嘛!于是,在 Linux 下用 ls /dev/tty* 查看了一下,有好多呀。那么,如何确定哪个串口可用呢?
  我先用 dmesg | grep tty 看看系统启动过程中初始化了哪些串口设备,输出如下:

[    0.000000] console [tty0] enabled
[    1.478484] 00:0c ttyS2 at I/O 0x3e8 (irq = 5, base_baud = 115200) is a 16550A
[    1.500255] 00:0d ttyS3 at I/O 0x2e8 (irq = 10, base_baud = 115200) is a 16550A

  tty0 是当前控制终端,执行命令 echo 123456 > /dev/tty0,发现会在当前终端下打印“123456”。同样,我们测试 echo 123456 > /dev/ttyS2echo 123456 > /dev/ttyS3,发现没有提示错误,而其他(例如:ttyS0)则会提示错误。
  另外我们可以用 cat /proc/tty/driver/serial 查看串口驱动信息,部分输出如下:

serinfo:1.0 driver revision:
0: uart:unknown port:000003F8 irq:4
1: uart:unknown port:000002F8 irq:3
2: uart:16550A port:000003E8 irq:5 tx:0 rx:0
3: uart:16550A port:000002E8 irq:10 tx:0 rx:0
4: uart:unknown port:00000000 irq:0
5: uart:unknown port:00000000 irq:0
6: uart:unknown port:00000000 irq:0
......
31: uart:unknown port:00000000 irq:0

  显然,这里的信息与系统启动时打印的信息刚好对的上,16550A 是可编程串行接口芯片的型号。此外,通过 cat /proc/devicescat /proc/tty/driversls -l /dev/tty* 等命令,也可以看出一些有用信息。
  通过上面这些笨方法,基本上可以确定 VxWorks 系统的 /tyCo/0/tyCo/1 对于 Linux 系统的 /dev/ttyS2/dev/ttyS3。接下来就可以把相应的代码作修改进行验证了,或者进行串口编程来测试,例如:

int fd;
fd = open(“/dev/ttyS2”, O_RDWR);
if(fd == -1)
{
    perror(“串口1打开失败!”);
}

更详细的串口编程,可以参考:http://www.cnblogs.com/lovemo1314/archive/2010/10/29/1864327.html

你可能感兴趣的:(Linux设备驱动,嵌入式Linux开发)