我正在使用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;
}
但在12.04测试版中,我获得了fd&lt; 0并在printf之后退出。 有没有人经历过同样的事情并以某种方式取得成功?
答案 0 :(得分: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
您可能会发现需要将您的用户添加到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
答案 1 :(得分:1)
我使用以下命令来设置perminssion(我正在使用/dev/ttyUSB0
)。
sudo chmod 0777 /dev/ttyUSB0
当我执行命令时:
AvailableSerialPorts: {'/dev/ttyUSB0'}
JarFileVersion: 'Version 2.11.0'
ObjectConstructorName: {'serial('/dev/ttyUSB0');'}
SerialPorts: {'/dev/ttyUSB0'}
而且,我已经使用root权限(在终端中)打开了matlab。
sudo /usr/local/MATLAB/R2010b/bin/matlab