Техническое примечание TN2163

Создание Universal Драйверы Набора I/O

Описывает шаги для конфигурирования XCode проект драйвера ядра Набора I/O произвести универсальный драйвер. Также обсуждает типичные проблемы при загрузке универсальных драйверов.

Введение
Который XCode и Mac OS X версии SDK для Использования
Подготовка проекта создать Универсальный драйвер
Типичные проблемы с Universal Драйверы Набора I/O
История версии документа

Введение

Создание универсальных драйверов Набора I/O очень подобно создаванию повсеместных приложений, но существуют критические различия, которые могут влиять на водительскую совместимость на уровне двоичных кодов. Это техническое примечание описывает шаги для конфигурирования XCode проект драйвера ядра Набора I/O произвести универсальный драйвер и обсуждает общие проблемы совместимости на уровне двоичных кодов с универсальными драйверами.

Который XCode и Mac OS X версии SDK для Использования

XCode 2.2.1 является самой старой версией XCode, который может использоваться для создания универсальных драйверов Набора I/O.

Создание для основанных на Intel компьютеров Mac

Сторона Intel Вашего Набора I/O KEXT должна быть создана с помощью GCC 4.0 и Mac OS X 10.4u (Universal) SDK или позже. Используйте SDK, представляющий самую старую версию Mac OS X, который Вы хотите поддерживать, имея в виду, что первой версией Mac OS X, который будет поставлен в основанных на Intel системах, был Mac OS X 10.4.4.

Создание для основанных на PowerPC компьютеров Mac

Сторона PowerPC Вашего KEXT должна быть создана с помощью Mac OS X SDK, представляющий самую старую версию Mac OS X, который Вы хотите поддерживать.

Создание для основанных на PowerPC компьютеров Mac: Предназначение для Версий Mac OS X Ранее, чем 10,4

Создание для версий Mac OS X до 10,4 также требует, чтобы Вы создали GCC 3.3 использования.

Создание для основанных на PowerPC компьютеров Mac: Предназначение для Mac OS X 10.4.x Используя XCode 2.2.x или Xcode 2.3

При использовании XCode 2.2.x или 2.3, драйверы Набора I/O, предназначающиеся для Mac OS X 10.4.x в основанных на PowerPC системах, должны быть созданы с помощью Mac OS X 10.4.0 (не Universal) SDK. Это отличается от повсеместного применения, где 10.4u (Universal) SDK может использоваться на обеих архитектуре.

10.4.0 SDK доступен как автономный установщик от веб-сайта Соединения Разработчика Apple. Чтение меня файл доступно для установщика SDK.

10.4.0 SDK может также быть установлен от установщика Xcode 2.0, расположенного на Mac OS X 10,4 установок DVD. Это может быть найдено в заказных установках XCode при Кросс-разработке.

Создание для основанных на PowerPC компьютеров Mac: Предназначение для Mac OS X 10.4.x Используя Xcode 2.4 или Позже

Начало с Xcode 2.4 существует другая опция, которая должна определить символ препроцессора KPI_10_4_0_PPC_COMPAT при создании для архитектуры PowerPC. Когда этот символ препроцессора будет определен, 10.4u (Universal), SDK даст те же результаты как использование 10.4.0 SDK. Тот же SDK может тогда использоваться и для PowerPC и для архитектур Intel.

Если Ваш проект не будет сконфигурирован должным образом, то Вы будете видеть ошибку, описанную позже в Типичных проблемах с Universal Драйверы Набора I/O, когда Вы попытаетесь загрузить свой драйвер.

Подготовка проекта создать Универсальный драйвер

Для преобразования XCode только для PowerPC проект драйвера Набора I/O в универсальный проект сначала удостоверьтесь, что все цели в проекте являются собственными целями XCode. Можно проверить это путем открытия проекта в XCode, затем выбрать Project меню и видит если команда Upgrade All Targets in Project to Native включен. Если это, сделайте резервную копию своего проекта, то используйте ту команду для преобразования всех устаревших целей собственному компоненту.

Затем внесите следующие изменения в настройки Project или Target Build, в зависимости от которой версии XCode Вы используете. Измените настройки Project, если Вы хотите, чтобы настройки применились ко всем целям в проекте. Измените настройки Target, если Вы хотите просто, чтобы определенная цель произвела универсальный KEXT.

XCode 2.x настройки сборки

Используя надлежащий SDK и компилятор версии легко выполняется с помощью настроек сборки XCode на архитектуру.

  1. Набор Architectures к ppc i386. Это может быть сделано путем двойного щелчка по слову Architectures и затем выбор обоих PowerPC и Intel флажки.

  2. Удалите любую установку для SDK Path и VALID_ARCHS путем выбора опции и затем щелчка - кнопка у основания окна.

  3. Добавьте пользовательские настройки SDKROOT_i386 и SDKROOT_ppc. Установите значение каждого к пути SDK для использования для построения на каждой архитектуре. SDKROOT_i386 должен быть установлен в /Developer/SDKs/MacOSX10.4u.sdk и SDKROOT_ppc должен указать на SDK, соответствующий самый старый главный Mac OS X, выпускают Вас, хотят поддерживать, такой как /Developer/SDKs/MacOSX10.2.8.sdk.

  4. Добавьте настройки GCC_VERSION_i386 и GCC_VERSION_ppc это указывает версию компилятора для использования при создании для каждой архитектуры. GCC_VERSION_i386 должен быть установлен в 4.0 или больше. Если Вы хотите поддерживать версии Mac OS X до 10,4, GCC_VERSION_ppc должен быть установлен в 3.3.

  5. Если Вы используете Xcode 2.4, 2.4.1, или 2.5, и сторона PowerPC Вашего KEXT предназначается для Mac OS X 10.4.x, добавьте установку PER_ARCH_CFLAGS_ppc это указывает флаги компилятора для передачи GCC только при создании для архитектуры PowerPC. Установите значение PER_ARCH_CFLAGS_ppc к -DKPI_10_4_0_PPC_COMPAT.

  6. Набор Mac OS X Deployment Target к Compiler Default.

  7. Добавьте настройки MACOSX_DEPLOYMENT_TARGET_i386 и MACOSX_DEPLOYMENT_TARGET_ppc. Эти настройки должны иметь значение главного номера релизной версии Mac OS X такой как 10.2 или 10.4. Не указывайте версии обновления программного обеспечения такой как 10.3.9. MACOSX_DEPLOYMENT_TARGET_i386 должен быть установлен в 10.4 или позже, и MACOSX_DEPLOYMENT_TARGET_ppc должен быть установлен в самый старый главный Mac OS X, выпускают Вас, хотят поддерживать.

Настройки сборки Xcode 3.0

Xcode 3.0 обеспечивает улучшенный пользовательский интерфейс для настроек сборки на архитектуру по XCode 2.x.

  1. Установите Configuration меню наверху окна к All Configurations.

  2. Единственный щелчок значение установки сборки Architectures и измените его на i386 ppc.

  3. Набор Base SDK к /Developer/SDKs/MacOSX10.4u.sdk если сторона Intel Вашего KEXT предназначается для Mac OS X 10.4 или /Developer/SDKs/MacOSX10.5.sdk при предназначении для Mac OS X 10.5.

    Если Вы хотите использовать различный SDK при создании для архитектуры PowerPC выберите Base SDK установка сборки, затем выберите Add Per-Architecture Setting For из меню действий в левом нижнем углу окна и выбора PowerPC из подменю. Измените значение PowerPC устанавливая просто добавленный к пути желаемого SDK для архитектуры PowerPC, такой как /Developer/SDKs/MacOSX10.3.9.sdk.

  4. Набор Debug Information Format к DWARF with dSYM File.

    Если необходимо использовать GCC 3.3 при создании для архитектуры PowerPC выберите Debug Information Format установка сборки, затем выберите Add Per-Architecture Setting For из меню действий в левом нижнем углу окна и выбора PowerPC из подменю. Изменитесь PowerPC установка просто добавленного к Stabs использование всплывающего меню вправо.

  5. Добавьте определяемую пользователем установку GCC_VERSION и набор его значение к 4.0.

    Если Вы хотите поддерживать версии Mac OS X до 10,4 при создании для архитектуры PowerPC выберите GCC_VERSION установка сборки, затем выберите Add Per-Architecture Setting For из меню действий в левом нижнем углу окна и выбора PowerPC из подменю. Измените значение PowerPC установка просто добавленного к 3.3.

  6. Набор Mac OS X Deployment Target к Mac OS X 10.4 или позже.

    Если Вы хотите поддерживать версии Mac OS X до 10,4 при создании для архитектуры PowerPC выберите Mac OS X Deployment Target установка сборки, затем выберите Add Per-Architecture Setting For из меню действий в левом нижнем углу окна и выбора PowerPC из подменю. Измените значение PowerPC установка просто добавленного к самому старому главному Mac OS X выпускает Вас, хотят поддерживать использование всплывающего меню вправо.

  7. Если сторона PowerPC Вашего KEXT предназначается для Mac OS X 10.4.x, выберите Other C Flags установка сборки, затем выберите Add Per-Architecture Setting For из меню действий в левом нижнем углу окна и выбора PowerPC из подменю. Измените значение PowerPC установка просто добавленного к -DKPI_10_4_0_PPC_COMPAT.

Настройки сборки Xcode 3.1

Xcode 3.1 использует условные настройки сборки вместо настроек сборки на архитектуру, используемых XCode 2.x и 3.0.

Для преобразования XCode только для PowerPC проект драйвера Набора I/O в универсальный проект сначала удостоверьтесь, что все цели в проекте являются собственными целями XCode. Можно проверить это путем открытия проекта в XCode, затем выбрать Project меню и видит если команда Upgrade All Targets in Project to Native включен. Если это, сделайте резервную копию своего проекта, то используйте ту команду для преобразования всех устаревших целей собственному компоненту.

Затем внесите следующие изменения в настройки Project или Target Build. Измените настройки Project, если Вы хотите, чтобы настройки применились ко всем целям в проекте. Измените настройки Target, если Вы хотите просто, чтобы определенная цель произвела универсальный KEXT.

  1. Установите Configuration меню наверху окна к All Configurations.

  2. Набор Architectures к Standard (32-bit Universal).

  3. Набор Base SDK к 10.4 или позже.

    Если Вы хотите использовать различный SDK при создании для архитектуры PowerPC выберите Base SDK установка сборки, затем выберите Add Build Setting Condition из меню действий в левом нижнем углу окна. Изменитесь Any Architecture установка в PowerPC и выберите желаемый SDK для архитектуры PowerPC из всплывающего меню вправо.

  4. Снимите флажок Build Active Architecture Only флажок.

  5. Набор Debug Information Format к DWARF with dSYM File.

    Если необходимо использовать GCC 3.3 при создании для архитектуры PowerPC выберите Debug Information Format установка сборки, затем выберите Add Build Setting Condition из меню действий в левом нижнем углу окна. Изменитесь Any Architecture установка в PowerPC и выберите Stabs из всплывающего меню вправо.

  6. Набор C/C++ Compiler Version к GCC System Version (4.0).

    Если Вы хотите поддерживать версии Mac OS X до 10,4 при создании для архитектуры PowerPC выберите C/C++ Compiler Version установка сборки, затем выберите Add Build Setting Condition из меню действий в левом нижнем углу окна. Изменитесь Any Architecture установка в PowerPC и выберите GCC 3.3 из всплывающего меню вправо.

  7. Набор Deployment Target к Mac OS X 10.4 или позже.

    Если Вы хотите поддерживать версии Mac OS X до 10,4 при создании для архитектуры PowerPC выберите Deployment Target установка сборки, затем выберите Add Build Setting Condition из меню действий в левом нижнем углу окна. Изменитесь Any Architecture установка в PowerPC и выберите самый старый главный Mac OS X, выпускают Вас, хотят поддерживать из всплывающего меню вправо.

  8. Проверьте Kernel Development Mode флажок.

  9. Если сторона PowerPC Вашего KEXT предназначается для Mac OS X 10.4.x, выберите Other C Flags установка сборки, затем выберите Add Build Setting Condition из меню действий в левом нижнем углу окна. Изменитесь Any Architecture установка в PowerPC и набор значение вправо к -DKPI_10_4_0_PPC_COMPAT.

Типичные проблемы с Universal Драйверы Набора I/O

Большинство проблем, с которыми Вы встретитесь после создания универсального драйвера, появится при загрузке его. Например, kextload могла бы сообщить ошибка

com.mycompany.driver.MyDriverClass is not compatible with its superclass, <superclass name> superclass changed?

Причина большинства ошибок времени загрузки состоит в том, что неправильный SDK использовался при создании драйвера. Например, сторона PowerPC драйвера предназначается для Mac OS X 10.3.x, но была создана с помощью 10.4u SDK. Пошлите к информации о версии SDK, показанной ранее в Который XCode и Mac OS X Версии SDK Использовать. Тогда проверьте, что Ваш проект XCode устанавливается, как описано ранее в XCode 2.x Настройки Сборки, Настройки Сборки Xcode 3.0 или Настройки Сборки Xcode 3.1.



История версии документа


ДатаПримечания
18.08.2008

Обновленный для XCode 3.x.

10.11.2006

Добавленное примечание о совместимости на уровне двоичных кодов IOSCSIParallelInterfaceController.

25.08.2006

Обновленный для Xcode 2.4.

02.02.2006

Новый документ это, как создать универсальный драйвер ядра Набора I/O при предотвращении распространенных ошибок.