/ dev/ttyS0在ubuntu 12.04 beta中无法打开

giu*_*pen 1 ubuntu serial-port

我在ubuntu 12.04测试版上.我假设minicom在/ dev/ttyS0上正常工作(但putty没有).我在C代码中控制端口,它在ubuntu 11.10上正常工作:

fd = open(p_ttys_parms->device, O_RDWR | O_NOCTTY | O_NDELAY);
if(fd < 0)
{
    printf("ERROR: cannot open device %s\n", p_ttys_parms->device);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但在12.04测试版中,我得到fd <0并在printf之后退出.有没有人经历过同样的事情并以某种方式成功了?

pax*_*blo 7

你应该做的第一件事是检查值errno.如果open调用返回-1,则调用将设置errno为指示实际问题的值.


并且,根据您的评论,它Permission denied和您的程序在运行时运行时sudo,它可能是/dev/ttyS0设备文件的权限问题.

我在Debian 6下遇到了类似的问题:

pax> ls -al /dev/ttyS0
crw-rw---- 1 root dialout 4, 64 Mar 23 21:00 /dev/ttyS0
pax> echo xyzzy >/dev/ttyS0
bash: /dev/ttyS0: Permission denied
Run Code Online (Sandbox Code Playgroud)

您可能会发现需要将您的用户添加到dialout组(或其他组,具体取决于Ubuntu偏离我心爱的Debian的程度)以允许访问:

pax> id -Gn
pax cdrom floppy audio dip video plugdev netdev bluetooth scanner

pax> sudo adduser pax dialout
[sudo] password for pax: 
Adding user pax to group dialout
Done.

<< Restart done here to ensure new group picked up >>

pax> id -Gn
pax dialout cdrom floppy audio dip video plugdev netdev bluetooth scanner
Run Code Online (Sandbox Code Playgroud)