Bagaimana saya bisa mengatur "proksi USB" untuk / dev / ttyUSB0 melalui jaringan?

14

Saya memiliki perangkat yang sedang diuji (DUT) dan saya mengukur penggunaan daya menggunakan Power Analyzer Datalogger menggunakan data dari /dev/ttyUSB0.

Masalahnya adalah bahwa DUT sekarang jauh dari workstation yang saya gunakan untuk mengumpulkan data, tetapi di jaringan yang sama, saya perlu menggunakan PC ke-2 yang terhubung langsung melalui USB ke Power Anlayzer sebagai semacam proxy USB dan ssh. untuk membuat semacam tautan simbolis pada mesin pengukur USB dari mesin "proxy".

masukkan deskripsi gambar di sini

Mengingat diagram di atas bagaimana bisa 1 st PC akses /dev/ttyUSB0dari 2 nd PC yang terhubung langsung, dengan cara yang program membaca aliran dari 1 st PC tidak akan melihat perbedaan?

Eduard Florinescu
sumber

Jawaban:

19

socat mungkin bekerja di sini.

Pada PC ke-2 Anda dapat membiarkannya socatmendengarkan data /dev/ttyUSB0dan menyajikannya ke port tcp, misalnya:

socat /dev/ttyUSB0,raw,echo=0 tcp-listen:8888,reuseaddr

Kemudian pada PC ke-1 Anda dapat terhubung ke PC ke-2 dengan socat dan memberikan data pada terminal semu /dev/ttyVUSB0untuk aplikasi Anda:

socat PTY,raw,echo=0,link=/dev/ttyVUSB0 tcp:<ip_of_pc2>:8888

Ini tidak diuji dan socatmendukung banyak opsi, jadi diperlukan penyesuaian.

FloHimself
sumber
3
Terima kasih! Uji lingkungan dalam wadah buruh pelabuhan di laptop -> Terowongan SSH -> PC di kamar bersih -> Pemrogram AVR dan pencatat FTDI di kamar bersih
Mark K Cowan
2

Anda dapat menggunakan kombinasi dari ser2netdan socat. Sebagai contoh, saya memiliki robot yang terhubung ke raspberry pi melalui port serial. Pi raspberry terhubung ke jaringan lokal saya (setara dengan PC ke-2 Anda). Dan laptop saya terhubung ke jaringan lokal yang sama (setara dengan PC 1 Anda). Kemudian saya menggunakan ser2net untuk meneruskan port serial melalui TCP dari PC ke-2, dan membuat file perangkat serial proxy menggunakan socatpada PC ke-1.

Pengaturan ini juga dapat bekerja untuk Anda. Solusi yang diusulkan:

Langkah 1: Instal paket ser2net pada PC ke-2 Anda (mengikuti diagram Anda)

sudo apt-get install ser2net

ser2net mendengarkan port TCP dan dapat mengirim data ke dan dari port serial melalui port TCP. Anda dapat mengatur port serial mana yang ingin Anda buat "proksi" untuk melalui file konfigurasinya /etc/ser2net.conf.

Langkah 2: konfigurasikan ser2net di PC ke-2

Misalnya, jika Anda memiliki perangkat yang terhubung /dev/ttyACM0dengan baudrate 115200dan ingin menyajikannya dari port localhost 3333, maka Anda dapat menambahkan baris berikut ke/etc/ser2net.conf

3333:raw:0:/dev/ttyACM0:115200,remctl

Setelah membuat file konfigurasi, kemudian jalankan ser2net dengan menjalankannya di PC kedua:

ser2net

atau (jika sudah berjalan, maka restart saja seperti di bawah ini)

/etc/init.d/ser2net restart

Satu hal penting di sini adalah opsi remctl. Ini memungkinkan sisi klien (PC pertama dalam diagram Anda) untuk terhubung ke perangkat dan memilih opsi koneksi serial dengan bebas. Saya pikir cara ini komunikasi serial benar-benar transparan dari perspektif ruang kerja pengumpulan data. Lihat lebih detail di sini .

Langkah 3: Mengatur file perangkat serial proxy pada workstation pengumpulan data (PC pertama)

(jika Anda tidak memiliki socat, maka sudo apt-get install socat)

Terakhir, di terminal PC pertama, mari kita socatbuat port serial proxy yang akan mendengarkan dari port tcp:

socat pty,link=$HOME/MyProxySerialPort,waitslave tcp:$ip:$port,forever,reuseaddr,keepalive

Di mana, dalam contoh ini ip=<2nd-PC-IP-address>dan port=3333(atau apa pun yang Anda pilih saat mengatur /etc/ser2net.confpada PC ke-2).

Langkah 4: Sambungkan ke MyProxySerialPort

Sekarang Anda harus dapat membuka koneksi serial secara normal ke perangkat yang terletak di $HOME/MyProxySerialPortPC pertama.

Posting blog ini juga memiliki beberapa informasi tentang pengaturan ini: http://techtinkering.com/2013/04/02/connecting-to-a-remote-serial-port-over-over-tcpip/

PsyKongroo
sumber
jawaban sangat terinci +1
Eduard Florinescu
1

Di kernel linux yang menggunakan tautan simbolis dari / dev / bus / usb / BUS_ID / DEV_ID ke / dev / char / MAJOR: MINOR socat tidak dapat membuka perangkat tersebut karena kesalahan IOCTL yang tidak pantas!
Jadi pendekatan ini sepertinya tidak bekerja secara langsung pada perangkat USB.

Saya mencoba usbip yang merupakan implementasi yang lebih dekat tetapi hanya didukung pada kernel yang lebih tua.

Karena solusi saya adalah tentang pembaca kartu yang terhubung melalui pcsc-lite, ada solusi yang lebih baik menggunakan variabel lingkungan untuk klien libpcsclite .

export PCSCLITE_CSOCK_NAME=$HOME/.pcscd.comm

Dengan cara ini soket domain unix yang berbeda dapat ditentukan. Dan yang ini dapat diteruskan ke soket pembaca kartu pada host jarak jauh menggunakan socat :

Jalankan ini pada host untuk mengganti pembaca kartu

socat tcp:$CARD_READER_HOST:8888 UNIX-LISTEN:$PCSCLITE_CSOCK_NAME,fork

jalankan ini pada host CARD_READER_HOST dengan pembaca kartu pcsc tersambung

socat UNIX-CONNECT:/var/run/pcscd/pcscd.comm tcp-listen:8888,fork,reuseaddr
UV
sumber
1
Hai dan selamat datang :). Ini adalah informasi yang menarik tetapi tidak berhubungan dengan pertanyaan tentang /dev/ttyUSB0, atau penganalisis daya yang tidak menggunakan PCSCLITE. Jika Anda ingin memposting informasi ini, akan lebih baik sebagai pertanyaan terpisah. Anda diizinkan dan didorong untuk mengirim pertanyaan sesuai topik yang Anda punya jawaban tindak lanjut langsung.
sourcejedi
3
Saya mencobanya dan informasi yang relevan adalah bahwa jawaban yang diusulkan JANGAN BEKERJA! Saya pikir info ini memerlukan berbagi. Selebihnya benar-benar tidak relevan secara langsung tetapi menawarkan pendekatan yang berbeda untuk masalah terkait.
UV
Apakah ini karena :karakter di jalan? Halaman manual socat, bagian "SPESIFIKASI ALAMAT", memiliki paragraf tentang cara melarikan diri karakter (v1.5.0 dan seterusnya).
David Knipe
poin yang menarik, tetapi proyek ini telah dikalengkan sehingga tidak ada cara untuk memeriksanya lagi :(
UV