gpt4 book ai didi

serial-port - 串行接口(interface)永久拒绝请求

转载 作者:行者123 更新时间:2023-12-03 20:37:45 26 4
gpt4 key购买 nike

我的实际问题是,每次我想访问我的串行接口(interface)(Arduino)时,系统都会返回 权限被拒绝 .

root@laptop:/home/user #> cu -l /dev/ttyACM0 -s 115200
/usr/bin/cu: open (/dev/ttyACM0): Permission denied
/usr/bin/cu: /dev/ttyACM0: Line in Use

root@laptop:/home/user #> ls -la /dev/ttyACM*
crw-rw---- 1 root dialout 166, 0 Mär 14 10:37 /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 Mär 14 10:37 /dev/ttyACM1
crw-rw---- 1 root dialout 166, 0 Mär 14 10:37 /dev/ttyACM2
crw-rw---- 1 root dialout 166, 0 Mär 14 10:37 /dev/ttyACM3

由于此错误,要寻找的另一个位置是什么?

感谢您的任何建议!

最佳答案

我从未使用过 Arduino,所以我认为您的方法是正确的。我会尝试的第一件事是sudo第一个命令:

sudo cu -l /dev/ttyACM0 -s 115200

但是,由于第二条消息是 Line in Use也可能是 /dev/ttyACM0实际上已经被占用/锁定。换句话说,是否有任何进程使用该端口?我无法在串口上测试它,但我会尝试 piping list open files 的输出命令到 grep命令:
lsof | grep ACM 

应该 列出 process identifer锁定端口的进程。然后你可以使用 kill停止该进程的命令:
kill <PID_FROM_OUTPUT_OF_UPPER_COMMAND>

要验证您是否成功停止了进程,您可以通过管道输出 list all active processes grep 命令的命令:
ps x | grep <PID_FROM_OUTPUT_OF_UPPER_COMMAND>

如果进程成功停止,它应该不返回任何输出。如果没有,它将输出该行,因此您可以尝试使用 -9 标志,如下所示:
kill -9 <PID_FROM_OUTPUT_OF_UPPER_COMMAND>

它最终会停止。

如果没有测试,我不确定 lsof以当前形式编写的命令列出所采取的 tty设备。如果是这种情况,那么必须有一些标志组合可以列出它们,因为 Unix 中的所有内容都是一个文件。

因此,原则必须有效:找出正在使用设备的进程并停止它(一旦您拥有正确的进程标识符, pskill 命令将起作用)。

如果以上都不是,那么 大概你的方法不对。在这种情况下,我会先仔细重新阅读 Arduino 文档 :)

关于serial-port - 串行接口(interface)永久拒绝请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15406105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com