Domanda

Duplicato su StackOverflow da uno dei miei amici che ha lo stesso problema:

Ho copiato il codice da questo tutorial: http://www.thegeekstuff.com/2012/04/create-proc-files/

E ho creato il modulo che ha creato il mio procfile.

Sono stato felice di scoprire di aver ottenuto un procfile in cui potevo echo "text" > proc/name_of_procfile

Posso leggere anche con il gatto!!

Ci ho provato e ora ho un numero considerevole di valori nel mio procfile - ogni volta che cat passo questi valori in sequenza:

Q1.Mi chiedo: come posso eliminare i valori dal procfile?

INOLTRE, più tardi, cercherò di ottenere il comportamento che ogni volta che un file legge il mio procfile, cambia il valore di qualunque cosa abbia appena letto in proc_file.

Q2.So che questo verrebbe implementato nel mio metodo "int read_info", ma qualche indicazione su come farlo?

È stato utile?

Soluzione

Q1.

Non è possibile eliminare questi valori nel senso normale di un'operazione di eliminazione su un file system.Potresti echo qualcosa in procfile se è scrivibile.Quindi dipende dal comportamento del modulo il modo in cui vengono trattati questi dati "in entrata".Verrà archiviato o scartato o in qualche modo contabilizzato in qualche modo internamente: decide il modulo.Per essere più precisi, la logica inserita nel modulo definisce il trattamento.Il modulo di questo esempio ha una logica molto semplice:memorizza una stringa nel suo buffer interno quando il kernel la chiama write_info funzione: in realtà concatena un nuovo dato con il contenuto corrente.Quindi può restituire il contenuto di questo buffer quando il kernel chiama la sua funzione read_info.Quindi se lo fai:

echo "some text">/proc/yourprocfile
echo "another text">/proc/yourprocfile

Poi cat /proc/yourprocfile stamperebbe

some text
another text

sullo schermo.Riassumere:il comportamento completo di questi file è module-defined.

Q2.

Potresti farlo quasi come lo fai normalmente C programma.Ci sono due differenze principali:

  • l'API accessibile in modalità kernel è diversa.Alcune funzioni hanno nomi e funzionalità uguali o molto simili a quelli dei loro analoghi standard C la biblioteca ha.Le altre funzioni hanno nomi diversi ma comunque analoghi ad alcune funzioni dello spazio utente.E poi, alcune funzioni specifiche disponibili solo nello spazio del kernel.

  • tutto ciò che fai nello spazio del kernel dovrebbe essere controllato più volte da te e sottoposto a debug on the sheet of paper poiché qualsiasi bug nel tuo modulo può causare come minimo il dump del core del kernel (il kernel si ferma e quindi devi premere reset per riavviare il sistema) e, nel peggiore dei casi, potrebbe causare il danneggiamento dei dati dei file system.

Quindi, ti consiglierei di configurare il pacchetto VirtualBox;creare con questo bellissimo strumento una macchina virtuale;per installare lì la versione minima di Linux e per creare un'istantanea del suo disco virtuale dopo l'installazione.Quindi, se qualcosa va storto, puoi sempre ripristinare eventuali danni.Non è necessario installare lì tutti gli strumenti di compilazione e i sorgenti del kernel: caricherai e testerai/debugerai solo i tuoi moduli/applicazioni su questa macchina virtuale.

Ma comunque, l'area che stai per toccare, o, per essere più corretti, già toccata, è molto interessante.

Buona fortuna

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