Domanda

Sono piuttosto nuovo al dispositivo Linux conducente programmring, ma a scopo di debug, vorrei scrivere un flusso di dati direttamente in un file. O forse dovrei Aks la questione in modo diverso:

Ho un sistema on-chip, dove uno modulo fornisce un flusso di dati. Il modulo deve essere initlized con un indirizzo di scrittura. Invece di scrivere i dati in memoria, vorrei reindirizzare il flusso di dati a tale indirizzo in un file. Questo potrebbe anche essere fatto tramite userspace, perché scrivere su file in kernelspace non è raccomandato.

Qualcuno può abbozzare all'incirca come fare questo?

Grazie, Stefan

È stato utile?

Soluzione

Dalla tua domanda, suppongo che questo è un modulo hardware a scrivere direttamente in un buffer di memoria. Avrete sempre bisogno di un buffer di memoria intermedia sulla strada per il file, ma ci sono diversi modi per gestire questo nel vostro driver di periferica.

Il caso più semplice è quello di implementare un driver di periferica carattere, che restituisce i dati verso l'userspace attraverso un'operazione di lettura. L'applicazione userspace che scrive il file può quindi essere semplice come cat. Il modulo scriverà in un buffer di memoria allocata dal driver, e il metodo read copierà i dati da questo buffer nel buffer userspace. Questo è coperto da DMA-Mapping.txt nella documentazione del kernel e in Linux Device Drivers (LDD).

Se la velocità di trasmissione dati è alto (dove è alto rispetto alla performance del dispositivo), è necessario prendere in considerazione un'operazione di lettura più avanzata, in cui si blocca le pagine di richiesta read nella memoria, e il modulo scrive direttamente a quelle pagine. Questo è più complicato, e la documentazione in LDD su questa zona è piuttosto vecchia. Vorrei consigliare a studiare l'origine dei driver di acquisizione video nel kernel per capire questo.

Se il driver ha più tipi di comunicazione da realizzare, si può decidere di utilizzare Netlink.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top