我目前正在研究一个电子项目,该项目使用微控制器通过 USB 将信息发送到计算机,然后从串行端口读取信息。我可以使用 screen 读取数据,并使用 stty 记录数据。我遇到的问题是,串行端口(特殊文件?)在设备启动之前不会显示在 /dev 中。我手动启动 screen 或 stty,但错过了重要的启动消息。
有没有办法等待串行端口出现,然后立即记录或查看传入的数据?
答案1
我知道你会期待/dev/ttyUSB0
出现,你可以使用 inotify 系统等待它出现,然后执行命令:
inotifywait -m -e create --format %f /dev |
while read file
do if [ "$file" = ttyUSB0 ]
then cat /dev/ttyUSB0
fi
done
上面打印了/dev
目录中创建的每个新文件(或设备)的基本名称,例如“ttyUSB0”。
创建通知非常快,udev 还没有时间将设备更改为组拨出。要等到完成,您还需要查找属性更改事件,如下所示:
inotifywait -m -e create,attrib --format %f /dev |
while read file
do if [ "$file" = ttyUSB0 ]
then ls -l /dev/ttyUSB0
group=$(stat --format=%G /dev/ttyUSB0)
if [ "$group" = dialout ]
then cat /dev/ttyUSB0
fi
fi
done