Установка Набора I/O KEXT Без Перезагрузки
Q: Действительно ли возможно установить Набор I/O KEXT, не требуя перезапуска?
A: Нет никакого простого решения этой проблемы. В настоящее время даже собственные установщики Apple требуют перезапуска после установки KEXT. Вот то, почему это более сложно, чем это может казаться.
Если другой драйвер является в настоящее время соответствующим к Вашему устройству, тот драйвер должен быть разгружен сначала. Это поочередно означает, что не может использоваться устройство. Плюс, предпочтительный механизм для обновления списка системы известного KEXTs не существует в ранних выпусках Mac OS X.
Уделенный то внимание, вот логика, которую необходимо использовать:
После установки Вашего KEXT, выполненного touch команда на /System/Library/Extensions. Затем
если выпуск 10.5 или более новый, нет ничего больше, чтобы сделать. Все кэши KEXT за исключением предварительно соединенного ядра обновляются автоматически после малой задержки; предварительно соединенное ядро обновляется после следующего перезапуска.
Если выпуск или 10.3.x или 10.4.x и
kextdНЕ работает, потребуйте перезапуска. Сценарий оболочки может определить лиkextdвыполняет использование кода в Перечислении 1. Этот код возвратит PIDkextdесли это работает, или ничего не возвратите, если это не.Если выпуск или 10.3.x или 10.4.x AND
kextdработает, отправитьkextdaSIGHUPсигнализируйте как показано в Перечислении 2.Если выпуск 10.2.x или более старый (Ягуар или прежде), потребуйте перезапуска.
Перечисление 1 , Определяющее, работает ли kextd.
/bin/ps -ax | /usr/bin/awk '{print $1" "$4}' | grep kextd | /usr/bin/awk '{print $1}' |
Перечисление 2 , Отправляющее SIGHUP в kextd.
/bin/kill -1 `/bin/ps -ax | /usr/bin/awk '{print $1" "$4}' | grep kextd | /usr/bin/awk '{print $1}'` |
Важно, чтобы Ваш сценарий установки справился со случаем где kextd не работает.
Вы могли бы задаться вопросом, можете ли Вы просто posix_spawn kextload загрузить Ваш KEXT. Этот подход имеет свои собственные ловушки. Если Вы работаете kextload но пользователь ожидает дольше, чем приблизительно минута для включения устройства, драйвер будет разгружен, и другой драйвер соответствия будет загружен для устройства вместо этого. И, даже если пользователь включит устройство быстро, если они отключат устройство позже, то Ваш драйвер будет все еще разгружен после минуты. Вы теперь вернулись к первой ситуации потому что kextd не знает о Вашем KEXT, если Вы загрузили его ручным использованием kextload. kextd перечисляет доступный KEXTs только согласно логике, представленной ранее.
История версии документа
| Дата | Примечания |
|---|---|
| 22.07.2011 | Переформатированный и внес незначительные редакционные изменения. Добавленная информация о Mac OS X 10.5 и позже. |
| 28.10.2003 | Новый документ, описывающий состояние установки расширений ядра Набора I/O (KEXTs), не требуя перезапуска. |