Публикация информации от IOKit KEXT на OS X - PullRequest
4 голосов
/ 22 февраля 2010

У меня есть расширение ядра на основе IOKit в Mac OS X, подкласс IOService. Когда эта служба загружается, мне нужно опубликовать из нее дополнительную конкретную информацию времени выполнения, и мне нужно, чтобы она была доступна из пользовательского пространства без каких-либо особых запросов IOUserClient. Информация, о которой идет речь, в основном представляет собой пары поле \ значение, и ее формат передается между KEXT и его библиотекой оболочки пользовательского пространства. Содержимое со временем будет меняться при определенных событиях внутри службы, когда она активна.

В Linux я бы сделал это с помощью файла в файловой системе / proc. Можете ли вы посоветовать аналогичную стратегию на OS X? Может быть, что-то связано с IORegistry?

Спасибо.

1 Ответ

3 голосов
/ 25 февраля 2010

Ну, это оказалось довольно легко. Ваша служба IOKit (равномерно) унаследована от класса IOService, который, в свою очередь, унаследован от IORegistryEntry, который представляет экземпляр записи вашей службы в IORegistry и предоставляет семейство методов setProperty \ getProperty для добавления \ изменения \ удаления ваших собственных полей в IORegistry. запись для вашего обслуживания.

IORegistry в базе данных в памяти, которая, конечно, программно доступна из пространства пользователя, где вы ищете ее для записи своей службы и читаете информацию, опубликованную ею.

...