Anda dapat menggunakan pty ("pseudo-teletype", di mana port serial adalah "teletype nyata") untuk ini. Dari satu ujung, buka /dev/ptyp5
, lalu lampirkan program Anda ke /dev/ttyp5
; ttyp5
akan bertindak seperti port serial, tetapi akan mengirim / menerima semua yang dilakukannya melalui / dev / ptyp5.
Jika Anda benar-benar membutuhkannya untuk berbicara dengan sebuah file bernama /dev/ttys2
, maka cukup pindahkan file lama Anda /dev/ttys2
dan buat symlink dari ptyp5
ke ttys2
.
Tentu saja Anda dapat menggunakan beberapa nomor selain ptyp5
. Mungkin pilih satu dengan angka tinggi untuk menghindari duplikat, karena semua terminal login Anda juga akan menggunakan ptys.
Wikipedia memiliki lebih banyak tentang ptys: http://en.wikipedia.org/wiki/Pseudo_terminal
pts
halaman manual untuk lebih detil.Melengkapi jawaban @ slonik.
Anda dapat menguji socat untuk membuat Virtual Serial Port dengan melakukan prosedur berikut (diuji di Ubuntu 12.04):
Buka terminal (sebut saja Terminal 0) dan jalankan:
Kode di atas mengembalikan:
Buka terminal lain dan tulis (Terminal 1):
nama port perintah ini dapat diubah sesuai dengan pc. itu tergantung pada keluaran sebelumnya.
Anda harus menggunakan nomor yang tersedia di area yang disorot.
Buka terminal lain dan tulis (Terminal 2):
Sekarang kembali ke Terminal 1 dan Anda akan melihat string "Test".
sumber
link=/path/to/link
setelah setiap deklarasi perangkat (setelah echo = 0). Dengan demikian, ini dapat digunakan dalam pengujian otomatis. (seperti yang dilakukan slonik dalam jawaban mereka)socat -d -d pty,raw,echo=0 /dev/ttyUSB5,raw,echo=0
./dev/ttyS0
bukan/dev/pts/1
?Gunakan socat untuk ini:
Sebagai contoh:
sumber
Ada juga tty0tty http://sourceforge.net/projects/tty0tty/ yang merupakan emulator modem null nyata untuk linux.
Ini adalah modul kernel sederhana - file sumber kecil. Saya tidak tahu mengapa itu hanya mendapat jempol di sourceforge, tetapi itu bekerja dengan baik untuk saya. Hal terbaik tentang itu adalah juga mengemulasi pin perangkat keras (RTC / CTS DSR / DTR). Ia bahkan mengimplementasikan perintah TIOCMGET / TIOCMSET dan TIOCMIWAIT iotcl!
Pada kernel terbaru, Anda mungkin mendapatkan kesalahan kompilasi. Ini mudah untuk diperbaiki. Cukup masukkan beberapa baris di bagian atas sumber module / tty0tty.c (setelah disertakan):
Ketika modul dimuat, itu membuat 4 pasang port serial. Perangkat-perangkat tersebut adalah / dev / tnt0 ke / dev / tnt7 di mana tnt0 terhubung ke tnt1, tnt2 terhubung ke tnt3, dll. Anda mungkin perlu memperbaiki izin file agar dapat menggunakan perangkat.
edit:
Saya kira saya sedikit cepat dengan antusiasme saya. Meski pengemudi terlihat menjanjikan, sepertinya tidak stabil. Saya tidak tahu pasti, tetapi saya pikir mesin itu menabrak mesin di kantor yang saya kerjakan dari rumah. Saya tidak dapat memeriksa sampai saya kembali ke kantor pada hari Senin.
Hal kedua adalah TIOCMIWAIT tidak berfungsi. Kode tersebut tampaknya disalin dari beberapa kode contoh "tiny tty". Penanganan TIOCMIWAIT tampaknya ada, tetapi tidak pernah bangun karena panggilan terkait ke wake_up_interruptible () hilang.
edit:
Kecelakaan di kantor itu benar-benar kesalahan pengemudi. Ada inisialisasi yang hilang, dan kode TIOCMIWAIT yang belum teruji menyebabkan kerusakan mesin.
Saya menghabiskan kemarin dan hari ini menulis ulang pengemudi. Ada banyak masalah, tapi sekarang berhasil dengan baik untuk saya. Masih ada kode yang hilang untuk kontrol aliran perangkat keras yang dikelola oleh pengemudi, tetapi saya tidak membutuhkannya karena saya akan mengelola pin sendiri menggunakan TIOCMGET / TIOCMSET / TIOCMIWAIT dari kode mode pengguna.
Jika ada yang tertarik dengan versi kode saya, kirimi saya pesan dan saya akan mengirimkannya kepada Anda.
sumber
Anda mungkin ingin melihat Tibbo VSPDL untuk membuat port serial virtual linux menggunakan driver Kernel - sepertinya cukup baru, dan tersedia untuk diunduh sekarang (versi beta). Tidak yakin tentang lisensinya saat ini, atau apakah mereka ingin membuatnya tersedia secara komersial di masa mendatang.
Ada alternatif komersial lainnya, seperti http://www.ttyredirector.com/ .
Dalam Open Source, Remserial (GPL) juga dapat melakukan apa yang Anda inginkan, menggunakan Unix PTY. Ini mentransmisikan data serial dalam "bentuk mentah" ke soket jaringan; Pengaturan parameter terminal seperti STTY harus dilakukan saat membuat port, mengubahnya nanti seperti yang dijelaskan di RFC 2217 tampaknya tidak didukung. Anda harus dapat menjalankan dua contoh remserial untuk membuat nullmodem virtual seperti com0com, kecuali Anda harus mengatur kecepatan port dll terlebih dahulu.
Socat (juga GPL) adalah seperti varian yang diperluas dari Remserial dengan lebih banyak pilihan, termasuk metode "PTY" untuk mengarahkan PTY ke sesuatu yang lain, yang dapat menjadi contoh lain dari Socat. Untuk Unit tets, socat mungkin lebih bagus daripada remserial karena Anda bisa langsung memasukkan file ke dalam PTY. Lihat contoh PTY di halaman manual. Sebuah patch ada di bawah "contrib" untuk memberikan dukungan RFC2217 untuk menegosiasikan pengaturan jalur serial.
sumber
Menggunakan tautan yang diposting di jawaban sebelumnya, saya mengkodekan sedikit contoh di C ++ menggunakan Virtual Serial Port. Saya memasukkan kode ke GitHub: https://github.com/cymait/virtual-serial-port-example .
Kode ini cukup jelas. Pertama, Anda membuat proses master dengan menjalankan ./main master dan akan mencetak ke stderr yang digunakan perangkat. Setelah itu, Anda memanggil ./main slave device, di mana device adalah perangkat yang dicetak pada perintah pertama.
Dan itu dia. Anda memiliki hubungan dua arah antara kedua proses tersebut.
Dengan menggunakan contoh ini, Anda dapat menguji aplikasi dengan mengirimkan semua jenis data, dan melihat apakah berfungsi dengan benar.
Selain itu, Anda selalu dapat menghubungkan perangkat tersebut, jadi Anda tidak perlu mengkompilasi ulang aplikasi yang Anda uji.
sumber
Apakah Anda dapat menggunakan adaptor USB-> RS232? Saya punya beberapa, dan mereka hanya menggunakan driver FTDI. Kemudian, Anda harus dapat mengganti nama / dev / ttyUSB0 (atau apa pun yang dibuat) sebagai / dev / ttyS2.
sumber
Saya dapat memikirkan tiga opsi:
Terapkan RFC 2217
RFC 2217 mencakup port com ke standar TCP / IP yang memungkinkan klien di satu sistem untuk meniru port serial ke program lokal, sementara secara transparan mengirim dan menerima data dan sinyal kontrol ke server di sistem lain yang sebenarnya memiliki port serial. Berikut adalah ikhtisar tingkat tinggi .
Apa yang akan Anda lakukan adalah menemukan atau mengimplementasikan driver com port klien yang akan mengimplementasikan sisi klien dari sistem pada PC Anda - tampak seperti port serial nyata tetapi pada kenyataannya memindahkan semuanya ke server. Anda mungkin bisa mendapatkan driver ini secara gratis dari Digi, Lantronix, dll untuk mendukung server port serial mandiri yang sebenarnya.
Anda kemudian akan mengimplementasikan sisi server dari koneksi secara lokal di program lain - memungkinkan klien untuk menghubungkan dan mengeluarkan data dan perintah kontrol sesuai kebutuhan.
Ini mungkin tidak sepele, tetapi RFC ada di luar sana, dan Anda mungkin dapat menemukan proyek open source yang mengimplementasikan satu atau kedua sisi koneksi.
Ubah driver port serial linux
Sebagai alternatif, sumber driver port serial untuk Linux sudah tersedia. Ambil itu, buang bagian kontrol perangkat keras, dan minta satu driver itu menjalankan dua port / dev / ttySx, sebagai loopback sederhana. Kemudian hubungkan program Anda yang sebenarnya ke ttyS2 dan simulator Anda ke ttySx lainnya.
Gunakan dua kabel USB <--> Serial dalam satu loopback
Tapi hal termudah untuk dilakukan sekarang? Belanjakan $ 40 untuk dua perangkat USB port serial, sambungkan keduanya (modem null) dan sebenarnya memiliki dua port serial nyata - satu untuk program yang Anda uji, satu untuk simulator Anda.
-Adam
sumber