2015-11-16 31 views
5

Su Windows, ci sono diverse alternative decenti (per lo più a pagamento) che consentono di monitorare le comunicazioni della porta seriale. Su OSX ci sono molte applicazioni terminali che ti permettono di parlare con dispositivi seriali ma non ho trovato un meccanismo per monitorare la comunicazione della porta seriale.metodo per sniffare la comunicazione usb-seriale su osx

Il caso d'uso specifico è: Ho un dispositivo USB-Seriale che vive sulla /dev/tty.usbmodem99999

Ho scritto un test di integrazione che corre più comandi (con successo).

In caso di riesecuzione del comando, il dispositivo non risponde. Ho confermato (meglio che posso) che il dispositivo va bene. Funziona su altre piattaforme come previsto. Tuttavia su OSX posso solo rieseguire i test dopo aver ripristinato il dispositivo (ciclo di alimentazione).

La mia teoria è che il mio codice non sta rilasciando il dispositivo correttamente ma è difficile confermare quando non riesco a vedere la comunicazione tra il mio dispositivo e la mia applicazione.

Questa applicazione: "http://www.aggsoft.com/serial-port-monitor.htm" dispone di una funzione di 'spia' che non è stato possibile trovare su OSX funzionalità simili. Ho sperimentato "strumenti seriali" su osx, ma non sembra che funzioni spionando su una singola porta, in quel caso sembra che il caso d'uso sia un passthrough tra due dispositivi piuttosto che il monitoraggio sulla porta .

Ogni pensiero è molto apprezzato.

biblioteca seriale utilizzato è: https://github.com/jacobsa/go-serial

+1

Che dire [tracciante USB] (http://stackoverflow.com/a/32468703/1643939)? – nemo

+0

@gbulmer È un eseguibile go. e usando una libreria seriale golang. Ma tu hai ragione, non è assolutamente ovvio, ho modificato per mostrare la libreria seriale che sto usando. – Gary

+0

@nemo Ho già provato questo, non ho visto nulla da quello strumento. Ci riproverò, potrebbe essermi abusato. – Gary

risposta

4

avete usato DTrace?

L'ho usato per monitorare le comunicazioni USB tra un convertitore USB/seriale FTDI e un'applicazione 'Black Box' di terze parti. Così ho potuto ottenere a il tutto che l'applicazione ha inviato alla porta seriale USB.

Questo era piuttosto semplice perché conoscevo il nome dell'applicazione, quindi DTrace poteva osservarlo. Ho scritto lo script DTrace per osservare i descrittori di file aperti dall'applicazione, (cercando il '/dev/tty.usbmodem ...') quindi ho osservato le interazioni con quel descrittore di file.

Non ho osservato un driver di periferica. In linea di principio, DTrace può farlo se il kernel o il driver del dispositivo è compilato per funzionare con DTrace, sebbene non ci sia certezza che lo sia. Apple può anche creare codice che è 'invisibile' a DTrace (ad esempio, credo che iTunes sia reso opaco a DTrace per proteggere i suoi meccanismi DRM.)

Quindi, un possibile punto di partenza è osservare tutte le chiamate open/creat del sistema operativo, cercando per /dev/tty.usbmodemXXX, e prova ad identificare il sottosistema e osservalo. È possibile che sia possibile osservare il sottosistema e questo dovrebbe aiutare a vedere cosa sta facendo il driver del dispositivo OS +.

Questo non è banale. Se il tuo tempo ha qualche valore, potrebbe essere più economico e più affidabile ottenere uno sniffer USB hardware e inserirlo nel cavo, specialmente se è dotato solo di 1.2Mbits o 12MBits USB (gli sniffer sono molto più costosi per una maggiore velocità dei dati).

Questi link possono aiutare:
About DTrace
DTrace Guide
DTrace book
Brendan Gregg's Top 10 DTrace scripts for Mac OS X
Apple DTrace manual
Hooked on DTrace

+0

Grazie per le informazioni, mi occuperò di questo. Ho menzionato il tracciatore hardware al mio capo, che con mia grande sorpresa ... Ne ho uno a casa per progetti personali ... Quindi probabilmente finirò per seguire quella strada. – Gary

+0

@Gary: se riesci a combinare uno sniffer USB con DTrace potresti vedere "tutto". Buona fortuna. – gbulmer

+0

Quindi aggiornamento: ho usato un modulo di tracciamento hardware ... Tuttavia la natura della traccia significava usare un adattatore seriale USB -> Allo sniffer poi rs-232 -> rs-232 al dispositivo hardware. Questo in effetti significava che stavo usando un diverso dispositivo USB -> seriale e il problema è andato via. Quindi abbiamo inequivocabilmente dimostrato che si tratta di un problema a livello di conducente o di seguito. – Gary