当我的 USB 串行加密狗初始化时,它会断言 RTS 线。无论是在启动期间插入加密狗,还是在启动后插入加密狗,我都会得到相同的行为。
这是我的 hamshack 电脑,其中串行端口连接到我的收发器。RTS 线路将设备置于传输模式,我宁愿不将其作为默认模式。当然,一旦我运行 fldigi 或 wsjtx,RTS 线路就会正常工作。
有地方可以设置该默认值吗?我在 /etc 中搜索了一下,但没有找到任何可以设置默认值的初始化或配置文件。它可能很简单,只需将“stty -F /dev/ttyUSB0 -crtscts”放在某处,但在哪里呢?
这台计算机没有内置串行端口,因此加密狗是唯一的选择。
运行 16.04 LTS 版本。
答案1
最后经过一番研究,我成功回答了你的问题。
假设您的 USB 转串口适配器已连接并可用/dev/USB0
。那么您首先必须找出一些配置信息udev.rules
:
udevadm info -n ttyUSB0 -a
将引导您完成信息树。例如,如果您希望创建的规则仅匹配这特定加密狗,您可以参考供应商、产品和序列号:
$ udevadm info -n ttyUSB0 -a
.
.
SUBSYSTEMS=="usb"
.
ATTRS{idProduct}=="6001"
ATTRS{idVendor}=="0403"
.
ATTRS{serial}=="FTHL8XKY"
.
.
那么这些就是您在制定规则时需要尊重的属性。
/etc/udev/rules.d
接下来,为该设备创建一个 udev 规则:
$ sudo vi /etc/udev/rules.d/99-ttyUSB.rules
ACTION=="add", SUBSYSTEMS="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTHL8XKY", RUN+="/bin/stty -F /dev/%k -crtscts"
(输入您设备 rsp 的值)。该行内容为:
仅当添加了加密狗(ACTION="add"
),并且供应商、产品和序列号与给定的值匹配时,才会运行按您需要定义的操作,其中“%k”是kernel name
设备的ttyUSB0
(但下次可能会有所不同)。
规则文件的名称是任意的,但您应该遵守 udev 使用的命名约定。要查看将要执行的操作,您可以通过以下方式进行测试udevadm test -a add /devices/pci0000:00/0000:00:13.2/usb2/2-4/2-4.1/2-4.1:1.0/ttyUSB0/tty/ttyUSB0
(设备路径显示在 udev 信息的第一行中)。
要查看这是否有效,您可以在插入加密狗时查看 /var/log/syslog。首先通过修改为读取来配置udev
不仅显示错误消息;否则您将只看到错误消息。重新启动服务(),然后: /etc/udev/udev.conf
udev_log="debug"
udev
sudo systemctl restart udev
$ tail -f /var/log/syslog | grep udev
.
.
Feb 13 14:47:42 desk systemd-udevd[16013]: starting '/bin/stty -F /dev/ttyUSB0 -crtscts'
Feb 13 14:47:42 desk systemd-udevd[15995]: Process '/bin/stty -F /dev/ttyUSB0 -crtscts' succeeded.
.
.
如果不成功,这也应该显示错误。udev
尝试在不同阶段不同时间运行命令,因此会出现一些错误,但最终它应该会成功。
如果您希望每次插入加密狗时都创建固定的设备符号链接,这也是可以的。只需将操作添加到您的规则中:
ACTION=="add", SUBSYSTEMS="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTHL8XKY", SYMLINK+="mynewserial", RUN+="/bin/stty -F /dev/%k -crtscts"
这将创建一个/dev/mynewserial
您可以在程序中使用的符号链接,而无需考虑动态创建的设备。
还有更多的可能性;这只是给如何进行提供一些印象。
答案2
上面的答案中有一个小错误。应该是SUBSYSTEMS=="usb"
(双等号)
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTHL8XKY", RUN+="/bin/stty -F /dev/%k -crtscts"