无法在linux中打开串口

时间:2012-02-10 05:40:17

标签: c++ linux

使用fedora 11,

在连续课程中:

/*
     \return 1 success 

\return -1 device not found

\return -2 error while opening the device

\return -3 error while getting port parameters

 \return -4 Speed (Bauds) not recognized

\return -5 error while writing port parameters

\return -6 error while writing timeout parameters

*/
`char serialib::Open(const char *Device,const unsigned int Bauds){`

    struct termios options; // Structure with the device's options
    // Open device
    fd = open(Device, O_RDWR | O_NOCTTY | O_NDELAY);            // Open port
    if (fd == -1) return -2;                        // If the device is not open, return -1
    fcntl(fd, F_SETFL, FNDELAY);                    // Open the device in nonblocking mode

......................

[termina]$ dmesg | grep tty

console [tty0] enabled

serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A

00:07: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

00:08: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A

............................................... ........

在我的主程序中我做了Ret = LS.Open(DEVICE_PORT,4800);
和Ret值为-2,这意味着如上所述打开设备时出错 这可能是一个许可问题吗?我怎么能解决这个问题并打开端口,谢谢!

1 个答案:

答案 0 :(得分:1)

  

可能是权限问题

很有可能。根据您使用的Linux,有几种更改权限的选项。

可能就像将当前用户添加到dailout组一样简单。或者,您可能需要更改udev规则以设置串行端口的权限。