tty 可以工作,但无法运行程序

tty 可以工作,但无法运行程序

因此,我四处寻找/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 位,这会导致通常是个好主意)。

相关内容