Как я могу получить номер версии OS X в kext? - PullRequest
3 голосов
/ 13 августа 2011

У меня есть kext, который должен знать, на какой версии OS X он работает. CocoaDev имеет статью , в которой описывается, как получить информацию о версии OS X с помощью Gestalt (), но для кода требуется Cocoa.

Могу ли я позвонить в Гештальт () из кекста?
Если да, то что #include я могу использовать для его определения?
Если нет, есть ли другие решения?


Справочная информация:

Я хотел бы использовать одни и те же кекс-коды во всех версиях OS X с 10.4 до 10.7.

НО: kexts вызывает cdevsw_add, который был изменен в Lion без обратной совместимости. Наряду с (очевидно) изменениями в некоторых программах ядра, которые его вызывают, эти изменения означают - согласно комментарию перед процедурой - что cdevsw_add должен вызываться с другим первым аргументом в 10.7, чем в OS X 10.0–10.6. (-12 на Льве, -1 на более ранних версиях.)

Если кексы могут определить, на какой версии OS X они работают, это легко. (Если нет, это будет трудная задача - может быть, ужасный клочок, похожий на создание двух разных версий kexts и выбор кода загрузки kext, который нужно загрузить.)

Ответы [ 2 ]

3 голосов
/ 29 августа 2011

Kernel.framework обеспечивает,Объявлены некоторые внешние переменные, такие как version_major, version_minor и т. Д. AFAIK, которые экспортируются из libkern.kpi.

Надеюсь, это поможет.

2 голосов
/ 14 августа 2011

Вы можете использовать sysctl, чтобы получить версию ядра (прокрутите вниз до метода 3).Как утверждается, он работает при разработке модулей ядра.

Вот пример метода на случай, если сайт когда-нибудь выйдет из строя.

#include <sys/param.h>
#include <sys/sysctl.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{
    int mib[] = {CTL_KERN, KERN_OSRELEASE};
    size_t len;
    sysctl(mib, sizeof mib / sizeof(int), NULL, &len, NULL, 0);

    char* kernelVersion = malloc(len);
    sysctl(mib, sizeof mib / sizeof(int), kernelVersion, &len, NULL, 0);

    printf("Kernel version is %s\n", kernelVersion);
    free(kernelVersion);
}

Конечно, вам необходимо выяснитьВерсии ядра Snow Leopard и Lion, но это не должно быть очень сложно.(Я могу засвидетельствовать, что версия ядра текущей версии Lion 11.0.0.)

...