Câu hỏi Làm cách nào để đặt giá trị mặc định thời gian khởi động ttyUSB?


Khi dongle nối tiếp USB của tôi khởi tạo, nó đi kèm với dòng RTS được xác nhận. Tôi nhận được hành vi tương tự nếu nó được cắm vào trong khi khởi động hoặc nếu tôi cắm vào dongle sau khi khởi động.

Điều này là dành cho máy tính hamshack của tôi, nơi cổng nối tiếp được kết nối với bộ thu phát của tôi. Dòng RTS đặt giàn khoan vào chế độ truyền, mà tôi không muốn làm mặc định. Tất nhiên, một khi tôi chạy fldigi hoặc wsjtx, dòng RTS hoạt động.

Có một nơi để đặt mặc định đó không? Tôi đã poked xung quanh một chút trong / etc, nhưng tôi đã không tìm thấy bất kỳ init hoặc cấu hình tập tin, nơi mặc định có thể được. Nó có thể đơn giản như đặt 'stty -F / dev / ttyUSB0 -crtscts' ở đâu đó, nhưng ở đâu?

Máy tính này không có cổng nối tiếp được tích hợp sẵn, do đó, khóa điện tử là tùy chọn duy nhất ở đây.

Chạy phiên bản 16.04 LTS.


1
2018-02-11 14:36


gốc


Có thể có cơ hội để xác định udev quy tắc (xem crashcourse.ca/wiki/index.php/Udev) để thiết lập các dòng nối tiếp khi dongle được kích hoạt. Bạn sẽ phải làm quen với udevquy tắc.. - ridgy
Cảm ơn bạn đã chỉ cho tôi wiki đó. Tôi có một nơi để bắt đầu ngay bây giờ. Nó không rõ ràng với tôi được nêu ra nếu một quy tắc udev có thể làm một cái gì đó cụ thể như thiết lập các dòng điều khiển modem. - G Weast
Để biết thêm thông tin và để tránh những lỗi thường gặp, hãy xem ví dụ: câu trả lời đây và đây hoặc tìm kiếm udev rules RUN. - ridgy


Các câu trả lời:


Cuối cùng sau khi một số nghiên cứu tôi đã thành công trong việc trả lời câu hỏi của bạn.

Giả sử dongle USB-to-serial của bạn được kết nối và có sẵn dưới dạng /dev/USB0. Sau đó, trước tiên bạn phải tìm hiểu một số thông tin để định cấu hình udev.rules:

udevadm info -n ttyUSB0 -a sẽ hướng dẫn bạn qua cây thông tin. Ví dụ: nếu bạn muốn quy tắc tạo chỉ khớp điều này dongle cụ thể, bạn có thể tham khảo nhà cung cấp, sản phẩm và Id nối tiếp:

$ udevadm info -n ttyUSB0 -a
.
.
   SUBSYSTEMS=="usb"
.
   ATTRS{idProduct}=="6001"
   ATTRS{idVendor}=="0403"
.
   ATTRS{serial}=="FTHL8XKY"
.
.

thì đây là những thuộc tính để tôn trọng trong quy tắc của bạn.

Tiếp theo, tạo quy tắc udev trong /etc/udev/rules.d cho thiết bị này:

$ 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"

(Nhập các giá trị cho rsp thiết bị của bạn.). Dòng đọc:

Chỉ khi dongle được thêm vào (ACTION="add") và khi nhà cung cấp, sản phẩm và nối tiếp khớp với các giá trị đã cho, thì hãy chạy hành động, được định nghĩa là bạn muốn, trong đó '% k' là kernel name của thiết bị, trong trường hợp này ttyUSB0(nhưng có thể khác thời gian tiếp theo).

Tên của tập tin quy tắc của bạn là tùy ý, nhưng bạn nên tôn trọng các quy ước đặt tên được sử dụng bởi udev. Để xem những gì sẽ được thực hiện, bạn có thể kiểm tra 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 (đường dẫn thiết bị được hiển thị trong thông tin udev, dòng đầu tiên).

Để xem điều này có hiệu quả không, bạn có thể xem / var / log / syslog khi cắm dongle. Cấu hình đầu tiên udev không chỉ hiển thị thông báo lỗi bằng cách sửa đổi /etc/udev/udev.conf đọc udev_log="debug"; nếu không bạn sẽ chỉ thấy thông báo lỗi. Khởi động lại udevdịch vụ (sudo systemctl restart udev), sau đó:

$ 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.
.
.

Điều này cũng sẽ hiển thị lỗi nếu nó không thành công. udevcố gắng chạy lệnh thời gian khác nhau trong các giai đoạn khác nhau, do đó sẽ có một số lỗi, nhưng cuối cùng nó sẽ thành công.

Nếu bạn muốn có một liên kết thiết bị cố định được tạo bất cứ khi nào bạn cắm dongle, điều này cũng có thể. Chỉ cần thêm hành động vào quy tắc của bạn:

ACTION=="add", SUBSYSTEMS="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTHL8XKY", SYMLINK+="mynewserial", RUN+="/bin/stty -F /dev/%k -crtscts"

Điều này sẽ tạo ra một liên kết tượng trưng /dev/mynewserial bạn có thể sử dụng trong các chương trình của mình, mà không liên quan đến các thiết bị được tạo theo dynanmically.

Có nhiều khả năng hơn; điều này chỉ nên đưa ra một số ấn tượng về cách tiến hành.


2
2018-02-13 14:08