因此,我四处寻找/dev/ttyS0
和/dev/ttyUSB0
,试图让一些业余无线电配件正常工作,但把它弄坏了。ttyS0
控制无线电传输,如果我/dev/ttyS0
以普通用户身份运行 cat,无线电就会传输。
但是,如果我运行以前与无线电一起使用的调制解调器软件 (FLdigi) ttys0
,它就不起作用。启动程序时,日志中显示一条消息“串口测试失败”。我同时属于“dialout”和“uucp”组,所以我认为它应该有效。
我记得跑步的一件事是sudo chmod 777 /dev/ttyS0
。我不确定应该将其设置回什么。关于为什么我可以访问它而我运行的软件却不能访问它的任何想法,即使它们都来自同一用户?
答案1
当您要使用该端口时,请检查是否没有应用程序打开该端口。
检查内核日志中是否没有消息(使用
dmesg
)。检查应用程序中到底发生了什么 - 运行它
strace
,将报告应用程序进行的系统调用。你可能希望你使用类似的东西:$ strace -f -s 512 -o /path/to/application.log.strace application ...
这也将是strace
子进程,将字符串记录到第 512 个字节,所有这些都会以 结尾/path/to/application.log.strace
,省略号代表应用程序的可能参数。您还可以告诉strace
附加到由 PID(-p
参数)标识的正在运行的进程。请参阅strace(1)
手册页以获取更多信息。在日志末尾,您应该能够找到write()
打印错误消息的调用。有可能的是相对地在此之前不久将是一个open()
或write()
(在设备文件上)返回-1。这可能会让您了解错误的原因是什么。
作为关于权限的旁注:您不想使用chmod 777
,因为这会使文件可执行,而对于可执行文件和目录之外的其他任何内容来说,这都不是一个好主意。对于设备文件(取决于其性质),合理的值为 0640 或 0660,这允许 root 的完全访问权限以及组的读取或读写访问权限(相关用户应该是该组的成员以获得权限 - 在您的情况下)这可能就是dialout
您提到的组)。
在大多数情况下,您还想在前面添加一个零(例如,chmod 0664
因为这会删除任何 suid 位,这会导致通常是个好主意)。