Как взаимодействовать с самодельными расширениями ядра OSX?

Как взаимодействовать с самодельными расширениями ядра OSX?

Я нашел следующее руководство по созданию расширения: https://developer.apple.com/library/mac/documentation/Darwin/Conceptual/KEXTConcept/KEXTConceptKEXT/kext_tutorial.html Это прекрасно работает, но я не смог найти способ отправки команд на мое расширение.

Было бы здорово, если бы кто-нибудь мог указать мне на пример :)

Или даже опубликовать минимальный пример :)

Почему я спрашиваю?

Я знаю, что почти все работает внутри пользовательского пространства. Поскольку приближается лето и температура в моей комнате под крышей становится все выше, мне очень больно видеть, как мой MacBook Air медленно выкипает. НО чем я наткнулся на этот github.com/nanoant/DisableTurboBoost.kext. Кажется, это работает. Но нет никакого способа включить или отключить по требованию, кроме ручной загрузки и выгрузки kext. Мне бы очень хотелось иметь маленькое приложение для отправки моему расширению команды для установки или отключения бита Turbo Boost.

И после сканирования http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf я нашел много интересных функций для использования. Но я понятия не имею, как получить информацию, собранную из моего расширения... Не могли бы вы указать мне пример? Или полезная книга?

И поскольку только kext может использовать ядро ​​​​Framework, у меня нет другого выбора, чтобы писать напрямую в регистры ЦП ... Или я?? Не могли бы вы указать мне пример? Или полезная книга?


person uti.devel    schedule 27.05.2014    source источник
comment
Что вы пытаетесь сделать с расширением ядра?   -  person    schedule 28.05.2014
comment
Я добавил то, что хотел, в исходный пост :)   -  person uti.devel    schedule 28.05.2014
comment
В этой книге есть все, что вам нужно знать: amazon.com/Mac -OS-Internals-Systems-Approach/dp/0321278542   -  person TheDarkKnight    schedule 28.05.2014
comment
И это тоже хорошее сопровождение: amazon.com/Mac- OS-iOS-Internals-Apples/dp/1118057651   -  person TheDarkKnight    schedule 28.05.2014
comment
Есть примеры? Или что почитать в сети?   -  person uti.devel    schedule 28.05.2014


Ответы (1)


Как правило, пользователи редко взаимодействуют (сознательно) с модулями ядра.

Рассмотрим общие модули ядра, такие как драйвер локальной сети, драйвер диска, драйвер файловой системы и т. д. В действительности пользователи постоянно взаимодействуют с этими расширениями ядра; но они этого не знают.

Это совсем другая среда, чем «пространство пользователя». Как правило, нет потоков stdin, stdout, stderr; где вы можете вводить команды для вашего расширения ядра с клавиатуры и видеть результат на экране.

Расширения ядра могут использовать множество способов взаимодействия с пользователями (в пользовательском пространстве). Это включает:

  • Системные вызовы
  • ioctl
  • Виртуальные файловые системы
  • Общая память
  • TCP-сокет или соединение
  • События файловой системы
  • ...

Это сводится к следующему: целью расширения ядра является взаимодействие с ядром, а не непосредственное взаимодействие с пользователями.

Существует много способов взаимодействия расширения ядра с ядром; но прямое взаимодействие с пользователями — чуждое понятие для расширений ядра.

person Mahonri Moriancumer    schedule 27.05.2014
comment
я знаю, что почти все работает внутри пользовательского пространства. Поскольку приближается лето и температура в моей комнате под крышей становится все выше, мне очень больно видеть, как мой MacBook Air медленно выкипает. НО чем я наткнулся на этот github.com/nanoant/DisableTurboBoost.kext. Кажется, это работает. Но нет никакого способа включить или отключить по требованию, кроме ручной загрузки и выгрузки kext. Мне бы очень хотелось иметь маленькое приложение для отправки моему расширению команды для установки или отключения бита Turbo Boost. - person uti.devel; 28.05.2014
comment
И после сканирования intel.com/content/dam/www/public/us/en/documents/manuals/ я нашел много интересных функций для использования. Но я понятия не имею, как получить информацию, собранную из моего расширения... Не могли бы вы указать мне пример? Или полезная книга? - person uti.devel; 28.05.2014
comment
И поскольку только kext может использовать ядро ​​​​Framework, у меня нет другого выбора, чтобы писать напрямую в регистры ЦП ... Или я?? Не могли бы вы указать мне пример? Или полезная книга? - person uti.devel; 28.05.2014