категории | RSS

Кексты. Описание и установка

Кексты. Описание и установка

Рассказывая об установке OS X, нельзя не коснуться темы кекстов. В сообществе Apple, объединенном принципом Think Different, любят называть привычные вещи другими именами. И кексты тому не исключение. Что же это такое? Слово “кекст” происходит от английского kext или kernel extension, т.е. расширение ядра. В виде кекстов реализованы практически все драйверы для OS X. Они используются для работы различных устройств в OS X. Но это не единственное их назначение, также, например, есть кексты отвечающие за правильные выключение и перезагрузку системы, переход в режим сна, за экономию энергии системой (Power Management) и многие другие функции. При загрузке системы ядро mach_kernel подгружает все кексты из специального кэша, а этот кэш, в свою очередь, периодически создаётся на базе системной папки для расширений ядра - /System/Library/Extensions. Важно понимать, что без правильно подобранной конфигурации кекстов нормальная работа OS X не возможна. Вообще тема кекстов распространена в гораздо большей степени в хаксообществе, нежели среди маководов. Apple не приветствует вмешательство пользователей в работу системы на низком уровне. А копаться в "самой совершенной в мире компьютерной операционной системе" - это удел хакинтошников. Отчасти это справедливо, поскольку большинство драйверов в OS X либо уже встроены (ассортимент маков все же не очень богат и комплектация в общих чертах типовая), либо реализованы в виде специальных установочных пакетов (с расширениями .pkg или .mpkg), при запуске которых от вас потребуется лишь ввести пароль, а всё остальное сделают скрипты. Apple way во всем... Хотя и не всегда всё так гладко: иногда при подключении периферии от посторонних производителей вам может достаться просто файл с расширением .kext. Так что маководы тоже не застрахованы от работы с кекстами. Если же у вас хакинтош, приготовьтесь к тому, что вам придётся перепробовать десятки разных кекстов, прежде чем вы заставите свой компьютер работать именно так, как хочется вам.

Как все устроено


Полагаю, мало кто из винюзеров задумывался над тем, как устроен драйвер, куда он устанавливается и как взаимодействует с системой. Написание и редактирование драйверов на взгляд обычного пользователя кажется чем-то за гранью фантастики. Еще бы, большинство драйверов упаковано в exe, снабжено красивыми установщиками, причем настолько красивыми, что пользователю и делать только остается, как со всех согласиться и перезагрузиться. Лишь в крайнем случае пользователь вместо красивой обертки получает кучу dll-ек, которую нужно ставить через Диспетчер устройств. В случае с хакинтошем главная проблема - это тотальная нехватка драйверов. При чем зачастую ввиду отсутствия официальной поддержки готового решения днем с огнем не сыщешь. Хотя не все безнадежно, иногда для того, чтобы завести упрямый сетевой адаптер или звуковую карту, достаточно немного подредактировать кекст. Как это делается? Для начала взглянем изнутри на такой типовой кекст, как ApplePS2Controller.kext. Он отвечает за работу клавиатуры, мыши и тачпада. Важный кекст. Что он из себя представляет?

Для начала это не файл. Но и не совсем папка. Это бандл (bundle). Это, надо сказать, типично Apple-вское явление, при котором папка с определенным расширением и структурой начинает вести себя как файл. При двойном щелчке по кексту в маке, мы получим сообщение с меню с выбором программы для запуска, в других системах мы увидим лишь папку с “расширением” .kext. Чтобы посмотреть потроха кекста в маке, нужно щелкнуть правой кнопкой по нему и выбрать пункт “Показать содержимое пакета”. Внутри мы увидим папку Contents, далее MacOS, Plugins, Resourses, Info.plist.

В папке MacOS находится исполняемый бинарник без расширения. Это и есть сам драйвер. Его тоже можно патчить (часто это делается скриптами), но для этого нужно быть специалистом несколько иного уровня. Оставим его. В папке Resourses мы увидим языковые модули с расширением .lproj (ничего не напоминает, пользователь iPhone?). Еще есть файл Info.plist. Собственно, он нам и нужен, поскольку именно его правка и снимает множество проблем. Так же есть Plugins. Эта папка есть не во всех кекстах, только в “сложных”. А поскольку этот кекст охватывает три совершенно разных устройства, под каждое из них есть свой кекст с аналогичной структурой. Иногда еще в папке с кекстом можно найти файлик versions.plist. Там записываются данные о версии драйвера. В частности он есть в AppleIntelCPUPowerManagemant.kext, отвечающий за управление питанием. Но нас интересует в первую очередь Info.plist.

По своей структуре это обычный xml, поэтому открывать его можно как в обычном тестовой редакторе, так и в утилите типа PlistEditor. В файле есть определенные ключи (key) и строковые значения (string). В подавляющем большинстве случаев хакинтошников интересует раздел IOKitPersonalities, в котором заданы параметры работы устройства, а также id оборудования и производителя. Это очень важный момент, поскольку очень часто драйвер физически может работать с вашим устройством, но банально не подгружается, поскольку id вашего оборудования не совпадает с id устройств, записанных в Info.plist. Правка id помогает завести формально неподдерживаемые ревизии wifi-адаптеров, картридеров, звуковых карт и прочего оборудования. Во многом случаях есть готовые инструкции по правке Info.plist или работе со скриптами-патчами. И пусть это вас не смущает, поскольку сложного здесь ничего нет. После правки кекста нужно, как всегда, восстановить права доступа через Дисковую утилиту и перезагрузиться.

Установка кекстов


Помимо довольно простой структуры драйверов у маков есть еще одно достоинство - это довольно простая установка кекстов. В общем виде установка кекста сводится к трем действиям:
1. Копирование кекста в папку /System/Library/Extensions*
2. Исправление прав доступа
3. Удаление и переформирование кэша ядра для загрузки системы

*Сразу оговорюсь, что в случае с загрузчиком типа Chameleon некоторые кексты можно класть в /Extra/Extensions

Последний пункт можно обойти в случае загрузки с ключем UseKernelCache=No. Что нам это дает? Правильно, это дает возможность оперативно менять кексты даже если система не грузится и даже если у вас другого мака под рукой нет. Так то, даже драйвера в макось при необходимости можно устанавливать папочным способом, хоть и не рекомендуется. Второй пункт частично решается ключем -f (тот же ApplePS2Controller может работать и без лечения прав). По крайней мере при наличии совместимых кекстов ключи -f и -s позволят вам загрузиться в консоль и поправить права доступа. Лечение прав на примере FakeSMC уже рассматривалось в предыдущей статье OS X 10.8. Заметки по установке .
В случае ручной установки кекстов на “живой” системе все действия можно проделать в Терминале:
sudo -s (получаем права суперпользователя)
Password: (вводим пароль)
cp -r -v путь/к/кексту.kext /System/Library/Extensions/ (копируем кекст в /S/L/E)
rm -r -v /System/Library/Caches/com.apple.kernelcaches/kernelcache
rm -r -v /System/Library/Extensions/Caches/*
rm -r -v /System/Library/Extensions.mkext (чистим кэш)
chown -R root:wheel /System/Library/Extensions/* (устанавливаем владельцем пользователя root и группу wheel)
chmod -R 755 /System/Library/Extensions/* (лечим права)

либо

diskutil repairpermissions /

Все!

Для еще большего упрощения жизни пользователей OS X придуманы также автоматические средства установки. Самым известным из них является простенькая программка Kext Utility. Она умеет практически всё, что связано с кекстами: установку, исправление прав доступа, перепаковку кэша. От пользователя потребуется ввести пароль и подождать некоторое время до завершения всех служебных процедур.

При всех этих талантах утилита от имеет только одну кнопку в интерфейсе (воистину Apple way!). Есть несколько способов работы с этой программой:

1) Перетаскивание кекста на значок программы: в этом случае начнётся полный комплекс процедур по установке кекста в систему.

2) Перетаскивание сразу нескольких кекстов на значок программы: утилита установит кексты по очереди.

3) Запуск самой утилиты. В этом случае будет запущена проверка прав доступа к уже установленным кекстам и перестроение кэша.

Пока идут служебные процедуры, в окне программы крутится индикатор-ромашка, а вам предлагается созерцать лог происходящих событий. По завершении работы Kext Utility кнопка Cancel изменит своё название на Quit. После перезагрузки все новые устройства, для которых вы установили кексты, должны опознаться системой.

Манипуляции с кекстами в консоли


Помимо команд для собственно установки в OS X есть ряд полезных команды для работы с уже установленными кекстами. Приведу краткий перечень (команды выполняются в консоли или Терминале с правами суперпользователя).
Для просмотра загруженных кекстов - kextstat
Для загрузки нужного кекста - kextload /System/Library/Extensions/Имя_файла.kext
Для выгрузки кекста : sudo kextunload /System/Library/Extensions/Имя_файла.kext

Описание кекстов


Привожу описание лишь некоторых кекстов, поскольку их много.

1. Управление питанием

Fakesmc.kext- это эмулятор System Management Controller (SMC) для OS X с открытым кодом. Без этого кекста OS X не запустится на PC. В дополнение к нему модули-индикаторы ACPISensors.kext и IntelCPUMonitor.kext.

AppleIntelCPUPowerManagement - это стандартный кекст для процессоров Intel, отвечающий за управление питанием. В случае полной совместимости будет работать из коробки, в случае неполной - потребуется или патч, или полное отключение. Использование оригинального AppleIntelCPUPowerManagement.kext возможно, если ваш процессор поддерживает инструкции SSE4 и использовании отредактированного DSDT (должна быть исправлена HPET-секция)

NullCPUPowerManagement.kext - отключает оригинальный AppleIntelCPUPowerManagement.kext.

OpenHaltRestart.kext - с этим кекстом выключение/перезагрузка компьютера проходит правильно (выключаются кулеры, жесткие диски и т.д.).

EvOreboot.kext - Аналог OpenHaltRestart.kext

Sleepenabler.kext - восстанавливает работу сна, если вы используете NullCPUPowerManagement.kext (AppleIntelCPUPowerManagement.kext отключен).

EvOSpeedStep.kext - позволяет системе использовать технологию SpeedStep для вашего процессора. С помощью нее при простое частота вашего процессора понижается, снижается его энерпотребление, тепловыделение. Сама частота увеличивается пропорционально нагрузке на процессор. Но этот кекст работает не всегда, также при включенном SpeedStep производительность снижается.

VoodooBattery.kext и AppleSmartBatteryManager.kext - кексты для отображения заряда батареи на ноутбуках. До Mac OS X 10.6 работали полностью самостоятельно, начиная с Mac OS X 10.7, требуется правка DSDT.

2. Видео

AppleIntelHDGraphics.kext и AppleIntelHDGraphicsFB.kext - оригинальные кексты для видеокарт Intel HD3000 и выше. Если у вас именна эта серия видеокарт, то замена скорее всего не потребуется

GeForce.kext, NVDAGF100Hal.kext, NVDAResman.kext - оригинальные кексты для видеокарт NVidia различных серий.

nvinject.kext, nvenabler.kext, nvkush.kext, natit.kext и другие - инжекторы видеокарт NVidia, то есть ваша видеокарта работает корректно (можно выставлять разрешение, частоту обновления, поворот изображения)

FramebufferDisabler.kext - модифицированный Generic disabler.kext для отключения "framebuffer" кекстов: NVDAResman.kext, ATIFramebuffer.kext, AppleIntelIntegratedFramebuffer.kext, которые вызывают панику ядра при загрузке с установочного диска или в уже установленную систему, в которой не работает графическое ускорение.

EVOenabler.kext - инжектор любой видеокарты, то есть ваша видеокарта работает корректно (можно выставлять разрешение, частоту обновления, поворот изображения). Чтобы настроить этот кекст под свою видеокарту, вам необходимо изменить имеющиеся значения в Info.plist на свои. По умолчанию прописана ATI 4890.

3. Звук

AppleHDA.kext - оригинальный кекст на звук. Совместим с большим количеством карт Realtek серии ALC. Кексты на звук следует по кодеку, скажем, ALC269 и т.п. Часто требует патча под конкретную звуковую карту.

VoodooHDA.kext - кекст, позволяющий работать большинству звуковых кодеков. Не совместим с AppleHDA.kext (вызывает панику ядра, если AppleHDA не выключить через HDADisabler или удалить). По качеству исполнения хуже оригинального AppleHDA и менее стабильный.

4. Сетевые карты и wifi

AttansicL1eEthernet.kext - необходим для работы сетевых карт на чипе Attansic L1e.

SKGE.kext - с помощью него работают некоторые сетевые карты на чипе Marvell, в частности Marvell Yukon 88E8001.

RealtekRTL81xx.kext - кекст под сетевые карты Realtek серий 81xx/82xx

IO80211Family.kext - стандартный кекст для wifi-адаптеров. Совместим с карточками с чипсетами Atheros и Broadcom. Для отдельных серий карточек может потребовать правка id в Info.plist.

5. SATA/IDE

IOATAFamily.kext - добавляют поддержку PATA (IDE) устройств большинству компьютеров. Также позволит вам использовать SATA устройства без включенного AHCI-режима на большинстве материнских плат с чипсетами ICH6/7/8/9/10.

JMicronATA.kext - необходим для правильной работы контролера JMicron ATA (IDE) в системах с 4 гигабайтами оперативной памяти и больше.

AHCIPortInjector.kext - добавляет поддержку AHCI-контролеров, которые не поддерживаются стандартным кекстом (для ICH9 и предыдущих поколений ICH чипсетов).

LegacyAppleAHCIPort.kext - отображает название вашего SATA контролера вместо Unknown AHCI controller в System Profiler.

LegacyJMicronATA.kext - добавляют поддержку IDE на контролере JMicron большинству компьютеров.

6. PS/2

ApplePS2Controller.kext и AppleACPIPS2Nub.kext - стандартные кексты для PS/2 клавиатур, мышек и тачпадов. Зачастую для работы требуется патч.
PS2Controller

VoodooPS2Controller.kext - кексты для безнадежных PS/2 клавиатур, мышек и тачпадов. Начиная с Mac OS X 10.7 прекратил развиваться.

Post scriptum

Все скриншоты из статьи сделаны на реальной рабочей системе. Кексты и описания взяты с ресурса osx86.net.

Alex_G_Sam
2012-07-26T19:41:42Z
Здесь находятся
всего 0. За сутки здесь было 0 человек

Комментарии 5

#5   aleksei.pavin    

даааа кексты это ...... слово не подобрать даже только мысли))стоит у меня хакинтош и с кекстом попарился одним на звук для моей мамки, это было нечто пол тырнэта перекопал пока нашел))было бы хорошо если бы в обменнике добавили раздел например все для мака или хакинтоша) OS X хорошая система но единственный минус это в доступности халявного софта...на винде побольше доступного софта будет чем на маке, кстати если кто знает откуда можно качать ломанный софт то черкните в ЛС пожалуйста, на рутрекере маловато...


0 ответить

#5   Alex_G_Sam    

Vinogradof, планируется wassat Будет еще обзор софта, может что-нибудь еще наваяю, а пока работа не дает заниматься любимым делом sad


0 ответить

#5   Vinogradof    

Вот чего по настоящему не хватает, так описание что есть DSDT, как с ним работать, что и как править и зачем...


0 ответить

#5   Alex_G_Sam    

microoooo, а кто вам сказал, что линуха вообще сложная? Учитывая степень открытости, развитости коммьюнити, объемы документации, преобладание графики над консолью (особенно в дистрах для домохозяек), линь даже попроще винды будет wassat Суть не в сложности, а в возможности покопаться, поэкспериментировать в системе. Хакинтош дает такую возможность в избытке fellow


1 ответить

#5   microoooo    

жесть страшная)))) линуха вроде и та проще


0 ответить

Яндекс.Метрика