Я создаю собственное ядро для Mac OS (Mountain Lion, Darwin 2050.22.13). Я могу построить ядро просто отлично, и я могу добавить материал к нему, но я что-то упустил.Использование пользовательского ядра Darwin
Чтобы все было в порядке, вот пример того, что я пытаюсь сделать.
Давайте предположим, что я хочу, чтобы добавить функцию [my_func (Недействительными *)], чтобы сказать, BSD/Керн/kern_fork.c Я могу добавить включаемый файл и вставить его в osfmk/BSD и изменить Makefile так, что новый .h-файл теперь скопирован в BUILD/obj/RELEASE_X86_64/EXPORT_HDRS/
Я также добавил имя функции в config/BSDKernel.exports. Я могу видеть функцию с ее символом в/mach_kernel, чтобы она выглядела нормально.
Теперь вот сложная часть. Это не сложно, но я не могу понять. То, что я хочу сделать, - это сделать вызов моей функции из kext, который я также пишу. В принципе, для меня это был бы частный API.
Мой kext компилируется отлично, но когда я запускаю kextload/kextutil, он жалуется, что не может найти символ my_func.
(ядро) kxld [com.blah.foo.kext]: Следующие символы нерешенные этого Kext (ядро) kxld [com.blah.foo.kext]: _my_func
kextlibs возвращения: для всех архитектур: com.apple.kpi.libkern = 12,3
для x86_64: 1 символ не найден ни в одной библиотеке Kext
Таким образом, вопрос, как я могу сделать, чтобы моя функция (s) видно к моим kext (s)? Спасибо!
Спасибо! Я думал, что изначально, но это, похоже, не проблема. Вот часть моего Info.plist в Kext, что бы использовать функции (ы): OSBundleLibraries \t \t com.apple.kpi.libkern \t \t 10,8 \t \t ком .apple.kpi.bsd \t \t 10,8 \t \t com.apple .kpi.mach \t \t 10,8 \t --- Там должно быть что-то, что я не делаю. Забавно, глядя на файлы xxxx.exports, я вижу экспортированную apis, такую как current_task(), и мой собственный api не находится ни в одном из этих файлов. –
Я обновил свой ответ другой теорией. Надеюсь, вы сможете заставить его работать с этим. Кстати, 10.8 в OSBundleLibraries относится к числу Дарвина - 10.8 означает OSX 10.6.8, а не Mountain Lion (это 12.0). На всякий случай это было непонятно. – pmdj
Спасибо! Я дам ему попытку, надеюсь, иногда и сегодня. Как только я получу эту работу, я опубликую обновление. Я документирую этот материал, когда я ухожу. –