Domanda

Ho un'estensione del kernel IOKit basati su Mac OS X, una sottoclasse di IOService. Quando questo carichi di servizio ho bisogno di pubblicare informazioni aggiuntive runtime specifiche da esso e ho bisogno di essere accessibile da spazio utente senza fare alcune richieste IOUserClient specifici. Le informazioni in questione è fondamentalmente campo coppie \ valore ed è formato viene condiviso tra il kext ed è libreria wrapper user-space. I contenuti cambiano nel tempo su alcuni eventi specifici all'interno del servizio quando è attivo.

In Linux avrei compiuto questo con un file nel file system / proc. Si può consigliare una strategia simile su OS X? Forse qualcosa legato alla IORegistry?

Grazie.

È stato utile?

Soluzione

Bene, questo si è rivelato abbastanza facile. Il vostro servizio IOKit è (eventially) ereditato dalla classe IOService, a sua volta ereditato da IORegistryEntry, che rappresenta un'istanza di entrata del vostro servizio in IORegistry e fornisce una famiglia di metodi setProperty \ getProperty aggiungere \ cambiamento \ rimuovere i propri campi in IORegistry voce per il vostro servizio.

L'IORegistry in un database in memoria che è, naturalmente, a livello di codice accessibile da user space dove si cerca per voi l'ingresso di servizio e leggere le informazioni pubblicate da esso.

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