В аналогичном ключе к вопросу, размещенному здесь:
Невозможно выгрузить расширение ядра; У классов есть экземпляры
Я пытаюсь понять, что нужно сделать, чтобы решить это.
С нашим KEXT у нас есть демон launchctl, который запускается, ожидает загрузки kext, выполняет sysctl для загрузки конфигурации для KEXT.
Мы делаем это с помощью вызова kext registerService (): https://github.com/openzfsonosx/zfs/blob/master/module/zfs/zfs_osx.cpp#L192
и маленький «zconfigd» ждет его здесь:
https://github.com/openzfsonosx/zfs/blob/master/cmd/zconfigd/zconfigd.c#L186
Небольшой небольшой код, взятый из одного из примеров Apple. Так что я бы предположил, что он выпускает все, как ожидалось?
Если я пытаюсь разгрузить kext, он отказывается (на Sierra) из-за наличия экземпляров классов. Если я убью zconfigd (даже несмотря на то, что launchctl запустит новый), я могу его нормально загрузить. Предположительно я могу сделать это exit(0)
после того, как sysctl был выполнен, было бы неплохо выяснить, почему он держится за Class в этом примере. Предположительно это что-то простое.
У нас есть еще одна проблема с классом, но это самое простое, я бы начала с маленьких шагов.
Задача ещё не решена.
Других решений пока нет …