0
点赞
收藏
分享

微信扫一扫

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/ttyS2​​​ 和 ​​echo 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/devices​​​ 和 ​​cat /proc/tty/drivers​​​ 和 ​​ls -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打开失败!”);
}



举报

相关推荐

0 条评论