2012-03-23 75 views
1

我在ubuntu 12.04 beta上。 我假設minicom在/ dev/ttyS0上正常工作(但膩子沒有)。 我控制的C代碼的端口,該端口上正常工作的Ubuntu 11.10:/dev/ttyS0在ubuntu 12.04 beta中不打開

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測試我的printf的後< 0和出口得到FD。 有沒有人有同樣的經歷,併成功?

+2

什麼是'errno'?這應該是你首先看的東西。 – paxdiablo 2012-03-23 13:29:39

+0

我得到errno:Permission denied,再次用sudo運行它。你解決了我的問題,謝謝你(即使我沒有理解爲什麼在12.04中,我需要sudo在11.10中打開串口,但這不是必須的)。 – giuspen 2012-03-23 13:42:34

+0

沒有probs,我會複製到一個答案,並添加一些可能的原因和修復更多的細節。 – paxdiablo 2012-03-23 13:59:36

回答

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 
+0

是的,它也適用於我,非常感謝(sudo usermod -a -G dialout myusername; sudo shutdown -r 0) – giuspen 2012-03-23 14:01:11

+0

無需「重新啓動」。 'pax'用戶只需要註銷並重新登錄即可。 – Wodin 2012-11-22 12:10:52

1

我用下面的命令設置perminssion(我使用/dev/ttyUSB0)。

sudo chmod 0777 /dev/ttyUSB0 

當我執行命令:

AvailableSerialPorts: {'/dev/ttyUSB0'} 
     JarFileVersion: 'Version 2.11.0' 
ObjectConstructorName: {'serial('/dev/ttyUSB0');'} 
      SerialPorts: {'/dev/ttyUSB0'} 

並與超級用戶權限(在終端)也,我已經打開MATLAB。

sudo /usr/local/MATLAB/R2010b/bin/matlab 
+0

謝謝,但這隻適用於一個串行設備...我認爲將用戶添加到組撥出是一個更好的解決方案 – giuspen 2012-06-28 12:19:25