Ağ üzerinden / dev / ttyUSB0 için nasıl “USB proxy” ayarlayabilirim?


14

Test edilen bir cihazım var (DUT) ve gücünü kullanarak bir Power Analyzer Datalogger kullanarak güç kullanımını ölçüyorum /dev/ttyUSB0.

Sorun şu ki, DUT artık veri toplamak için kullandığım iş istasyonundan uzaktan, ancak aynı ağda, bir tür USB proxy ve ssh olarak USB üzerinden Power Anlayzer'a doğrudan bağlanan 2. bir PC kullanmam gerekiyor "proxy" makinesinin USB ölçüm makinesinde bir tür sembolik bağlantı oluşturmak için.

resim açıklamasını buraya girin

1 nasıl yukarıdaki diyagram Verilen st PC erişimi /dev/ttyUSB02 nd doğrudan bir bakıma, bağlı olduğu bilgisayardan 1 den akışı okuma bir program olduğunu st PC fark olmaz?

Yanıtlar:


19

socat burada işe yarayabilir.

2. bilgisayarda socatverileri dinleyebilir /dev/ttyUSB0ve bir tcp portuna sunabilirsiniz, örneğin:

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

Daha sonra 1. PC'de 2. PC'ye socat ile bağlanabilir ve /dev/ttyVUSB0uygulamanız için bir sözde terminalde veri sağlayabilirsiniz :

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

Bu test edilmez ve socatbirçok seçeneği destekler, bu nedenle ince ayar gerekebilir.


3
Teşekkürler! Dizüstü bilgisayardaki docker konteynerinde test ortamı -> SSH tüneli -> temiz odada PC -> temiz odada AVR programcısı ve FTDI kaydedici
Mark K Cowan

2

Sen bir arada kullanabilir ser2netve socat. Örneğin, bir seri port üzerinden ahududu pi bağlı bir robot var. Raspberry pi yerel ağıma bağlı (2. PC'nize eşdeğer). Ve dizüstü bilgisayarım aynı yerel ağa bağlı (1. PC'nize eşdeğer). Daha sonra seri portu 2. PC'den TCP üzerinden iletmek için ser2net kullanıyorum socatve 1. PC'de kullanarak bir proxy seri cihaz dosyası oluşturuyorum .

Bu kurulum sizin için de işe yarayabilir. Önerilen çözüm:

Adım 1: Ser2net paketini 2. PC'nize kurun (diyagramınıza göre)

sudo apt-get install ser2net

ser2net bir TCP bağlantı noktasını dinler ve bir TCP bağlantı noktası üzerinden bir seri bağlantı noktasına veri gönderebilir. Konfigürasyon dosyası aracılığıyla hangi vekil sunucuları oluşturmak istediğiniz seri portları ayarlayabilirsiniz /etc/ser2net.conf.

2.Adım: Ser2net'i 2. PC'de yapılandırın

Örneğin, /dev/ttyACM0baudrate ile bağlı bir cihazınız varsa 115200ve bunu localhost port 3333'ten sunmak istiyorsanız, aşağıdaki satırı/etc/ser2net.conf

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

Yapılandırma dosyasını oluşturduktan sonra, ya ikinci bilgisayarda çalışarak ser2net'i başlatın:

ser2net

veya (zaten çalışıyorsa, aşağıdaki gibi yeniden başlatın)

/etc/init.d/ser2net restart

Burada önemli bir şey remctl seçeneğidir. İstemci tarafının (diyagramınızdaki 1. PC) cihaza bağlanmasına ve seri bağlantı seçeneklerini serbestçe seçmesine izin verir. Bu şekilde seri iletişimin veri toplama çalışma alanı perspektifinden tamamen şeffaf olduğunu düşünüyorum. Daha fazla ayrıntıyı burada görebilirsiniz .

Adım 3: Veri toplama iş istasyonunda proxy seri aygıt dosyasını ayarlama (1. PC)

(eğer toplumunuz yoksa, o zaman sudo apt-get install socat)

Son olarak, 1. PC'deki bir terminalde socat, tcp portundan dinleyecek bir proxy seri portu oluşturalım:

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

Nerede, bu örnekte ip=<2nd-PC-IP-address>ve port=3333(veya /etc/ser2net.conf2. PC'de kurulum yaparken ne seçerseniz seçin ).

Adım 4: MyProxySerialPort'a Bağlanma

Artık $HOME/MyProxySerialPort1. PC'de bulunan cihaza normal bir seri bağlantı açabilmeniz gerekir .

Bu blog yazısında bu kurulum hakkında daha fazla bilgi var: http://techtinkering.com/2013/04/02/connecting-to-a-remote-serial-port-over-tcpip/


çok ayrıntılı cevap +1
Eduard Florinescu

1

/ Dev / bus / usb / BUS_ID / DEV_ID ile / dev / char / MAJOR arasında sembolik bir bağlantı kullanan linux çekirdeğinde : MINOR socat , bu tür aygıtları uygun olmayan bir IOCTL hatası nedeniyle açamıyor!
Bu yüzden bu yaklaşım doğrudan USB cihazlarında işe yaramıyor gibi görünüyor.

Daha yakın bir uygulama olan ancak sadece eski çekirdeklerde desteklenen usbip'i denedim .

Benim çözümüm pcsc-lite ile bağlı kart okuyucuları hakkında olduğundan, libpcsclite istemcileri için ortam değişkenini kullanarak daha iyi bir çözüm vardı .

export PCSCLITE_CSOCK_NAME=$HOME/.pcscd.comm

Bu şekilde farklı bir unix etki alanı soketi belirtilebilir. Ve bu, socat kullanılarak uzak bir ana bilgisayarda kart okuyucu soketine iletilebilir :

Kart okuyucuyu değiştirmek için bunu ana bilgisayarda çalıştırın

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

bunu pcsc kart okuyucu bağlıyken CARD_READER_HOST ana bilgisayarında çalıştır

socat UNIX-CONNECT:/var/run/pcscd/pcscd.comm tcp-listen:8888,fork,reuseaddr

1
Merhaba ve hoş geldiniz :). Bu ilginç bir bilgidir, ancak /dev/ttyUSB0PCSCLITE kullanmayan bir güç analizörü veya sorusuyla ilgili değildir. Bu bilgiyi göndermek isterseniz, ayrı bir soru olarak daha iyi olur. Hemen takip cevabına sahip olduğunuz konu üzerine sorular yayınlamanıza izin verilir ve teşvik edilir.
sourcejedi

3
Ben denedim ve ilgili bilgi önerilen cevap işe yaramadı oldu! Bu bilginin paylaşılması gerektiğini düşünüyorum. Gerisi gerçekten doğrudan alakalı değil, ilgili problemler için farklı bir yaklaşım sunuyor.
UV

Bu :yoldaki karakter yüzünden mi olur ? Socat man sayfasında, "ADRES ÖZELLİKLERİ" bölümü, karakterlerden nasıl kaçacağına dair bir paragrafa sahiptir (v1.5.0 sonrası).
David Knipe

ilginç bir nokta, ancak proje artık kontrol etmek için hiçbir yol konserve edilmiştir :(
UV
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.