Публикация информации из IOKit KEXT в OS X
Вопрос
У меня есть расширение ядра на основе IOKit в Mac OS X, подкласс IOService.Когда эта служба загружается, мне нужно опубликовать дополнительную конкретную информацию о времени выполнения из нее, и мне нужно, чтобы она была доступна из пользовательского пространства без выполнения некоторых конкретных запросов IOUserClient.Информация, о которой идет речь, в основном представляет собой пары поле \ значение, и ее формат является общим для KEXT и его библиотеки-оболочки пользовательского пространства.Содержимое будет меняться со временем в зависимости от некоторых конкретных событий внутри сервиса, когда он активен.
В Linux я бы выполнил это с помощью файла в файловой системе /proc.Можете ли вы посоветовать аналогичную стратегию для OS X?Может быть, что-то связанное с IORegistry?
Спасибо.
Решение
Что ж, это оказалось довольно просто.Ваш сервис IOKit (eventially) унаследован от класса IOService, который, в свою очередь, унаследован от IORegistryEntry, который представляет экземпляр записи вашего сервиса в IORegistry и предоставляет семейство методов setProperty \ getProperty для добавления \ изменения \ удаления ваших собственных полей в записи IORegistry для вашего сервиса.
IORegistry в базе данных в памяти, которая, конечно, программно доступна из пользовательского пространства, где вы ищете в ней запись вашей службы и считываете опубликованную ею информацию.