Я пытаюсь протестировать пример приложения IO kit, в котором реализована схема фильтрации. Смотрите секцию 10.7.10 здесь для контекста. Поскольку источник трудно вырезать и вставить (и когда я попытался, я получил ошибки), я использую источник из здесь , который строит.
На последнем рисунке на этой странице (1038) есть ряд шагов для создания и подключения нового тома HFS. Идея состоит в том, чтобы увидеть, что KEXT работает и выполняет шифрование. Я построил образец KEXT и протестировал его, но всегда получаю ошибку «Нет монтируемых файловых систем», когда я выполняю «открытый» вызов. Я проверил, правильно ли загружен KEXT.
Если я удаляю «-partitionType», я могу нормально управлять томом (хотя это не включает KEXT).
Может кто-нибудь подсказать, что может быть не так?
Часть моей путаницы в сценарии на рисунке 1038 - это команда «detach», которая запускается перед открытием. Это терпит неудачу для меня, но я не уверен, является ли это причиной "открытия" после того, как это терпит неудачу, или не связано.
$ sudo kextload /System/Library/Extensions/IOKitDriverTestApp.kext/
$ hdiutil create -size 32m -partitionType osxbook_HFS /tmp/crypto.dmg
created: /tmp/crypto.dmg
$ hdiutil attach -nomount /tmp/crypto.dmg
/dev/disk2 Apple_partition_scheme
/dev/disk2s1 Apple_partition_map
/dev/disk2s2 osxbook_HFS
$ diskutil list
/dev/disk0 (internal, physical):
[cut]
/dev/disk1 (synthesized):
[cut]
/dev/disk2 (disk image):
#: TYPE NAME SIZE IDENTIFIER
0: Apple_partition_scheme +33.6 MB disk2
1: Apple_partition_map 32.3 KB disk2s1
2: osxbook_HFS 33.5 MB disk2s2
$ newfs_hfs -v Crypto /dev/rdisk2s2
Initialized /dev/rdisk2s2 as a 32 MB case-insensitive HFS Plus volume
$ hdiutil detach /dev/disk2
hdiutil: detach failed - No such file or directory
$ open /tmp/crypto.dmg
==> Get popup window with error "crypto.dmg" "No mountable file systems"
ОБНОВЛЕНИЕ: изначально вопрос был нацелен на случай, когда KEXT не был загружен. С тех пор как я получил это на работу, я изменил его, чтобы отразить случай с KEXT, который в любом случае важнее.
ОБНОВЛЕНИЕ2: Кажется, что в конечном итоге kext выгружается (возможно, происходит сбой). Иногда кажется, что во время «открытия», иногда после. Я попытался добавить операторы типа IOLog («CSD: init»), но ни один из них не появился в системном журнале или журнале консоли. Ищете, как еще я могу сортировать это (без необходимости отдельной машины).
ОБНОВЛЕНИЕ3: Ниже приведен вывод, когда я пытаюсь запустить KEXT. Есть множество предупреждений, но так как у меня отключена проверка подписи, я думаю, что она все еще загружается. Также я вижу, что он загружается через kextstat.
Другая странная вещь - я не вижу никаких признаков этого KEXT в выводе «ioreg», и при этом я не вижу никаких операторов печати из IOLog ().
My-MacBook-Pro:Extensions myuser$ sudo kextutil -v /System/Library/Extensions/IOKitDriverTestApp.kext/
Defaulting to kernel file '/System/Library/Kernels/kernel'
Kext with invalid signatured (-67050) allowed: <OSKext 0x7fa53703ec70 [0x7fff8fe6faf0]> { URL = "file:///System/Library/Extensions/IOKitDriverTestApp.kext/", ID = "com.osxbook.driver.IOKitDriverTestApp" }
Code Signing Failure: code signature is invalid
Warnings:
Personality CFBundleIdentifier differs from containing kext's (not necessarily a mistake, but rarely done):
SimpleCryptoDisk
Personality CFBundleIdentifier names a kext that can't be found:
'SimpleCryptoDisk' -> 'com.osxbook.driver.SimpleCryptoDisk'
Warnings:
Personality CFBundleIdentifier differs from containing kext's (not necessarily a mistake, but rarely done):
SimpleCryptoDisk
Personality CFBundleIdentifier names a kext that can't be found:
'SimpleCryptoDisk' -> 'com.osxbook.driver.SimpleCryptoDisk'
/System/Library/Extensions/IOKitDriverTestApp.kext appears to be loadable (not including linkage for on-disk libraries).
Loading /System/Library/Extensions/IOKitDriverTestApp.kext.
/System/Library/Extensions/IOKitDriverTestApp.kext successfully loaded (or already loaded).
Invalid signature -67050 for kext <OSKext 0x7fa53703ec70 [0x7fff8fe6faf0]> { URL = "file:///System/Library/Extensions/IOKitDriverTestApp.kext/", ID = "com.osxbook.driver.IOKitDriverTestApp" }
UPDATE4: я изменил идентификатор пакета в списке, чтобы он совпадал, и теперь он не выдает ошибку «names the kext not found»:
My-MacBook-Pro:Debug myuser$ sudo kextutil -v /System/Library/Extensions/IOKitDriverTestApp.kext/
Password:
Defaulting to kernel file '/System/Library/Kernels/kernel'
Kext with invalid signatured (-67050) allowed: <OSKext 0x7f8be663ecf0 [0x7fff866bcaf0]> { URL = "file:///System/Library/Extensions/IOKitDriverTestApp.kext/", ID = "com.osxbook.driver.IOKitDriverTestApp" }
Code Signing Failure: code signature is invalid
/System/Library/Extensions/IOKitDriverTestApp.kext appears to be loadable (not including linkage for on-disk libraries).
Loading /System/Library/Extensions/IOKitDriverTestApp.kext.
/System/Library/Extensions/IOKitDriverTestApp.kext successfully loaded (or already loaded).
Invalid signature -67050 for kext <OSKext 0x7f8be663ecf0 [0x7fff866bcaf0]> { URL = "file:///System/Library/Extensions/IOKitDriverTestApp.kext/", ID = "com.osxbook.driver.IOKitDriverTestApp" }
ОБНОВЛЕНИЕ 5:
Теперь моя ОС постоянно дает сбой каждый раз, когда я загружаю KEXT и затем выполняю «hdiutil attach -nomount /tmp/crypto.dmg» (после создания /tmp/crypto.dmg).
Кажется очевидным, что мой KEXT сейчас запущен, но по какой-то причине я до сих пор нигде не вижу операторов IOLog (). Придется просматривать системные журналы и видеть, есть ли какие-либо признаки, почему он дает сбой.
ОБНОВЛЕНИЕ 6: Мне удалось получить символическую панику ядра, но она указывает на другой KEXT (который, я думаю, у меня тоже нет источника). Ниже приведена соответствующая часть.
Я пытался использовать другую версию того же теста KEXT ( здесь ) без каких-либо изменений (я удалил операторы IOLog (), поскольку они не отображаются).
Я вижу примечание, что это было проверено на Mac OS 10.6, но кто-нибудь заставил этот образец работать на 10.13.16 (High Sierra)?
...
0xffffff800c94f540 : 0xffffff800cb8776f mach_kernel : _kernel_trap + 0x70f
0xffffff800c94f6b0 : 0xffffff800ca1e1e0 mach_kernel : _return_from_trap + 0xe0
0xffffff800c94f6d0 : 0xffffff7f8d527251 com.apple.iokit.IOStorageFamily : __ZN9IOStorage8completeEP19IOStorageCompletioniy + 0x27
0xffffff81f7a4b980 : 0xffffff7f8d51a0c4 com.apple.iokit.IOStorageFamily : __ZN20IOBlockStorageDriver24prepareRequestCompletionEPvS0_iy + 0xc2
0xffffff81f7a4b9e0 : 0xffffff7f903afa7a com.apple.driver.DiskImages : __ZN13IOHDIXCommand8completeEiy + 0x26
0xffffff81f7a4ba00 : 0xffffff7f903adbfe com.apple.driver.DiskImages : __ZN22IOHDIXHDDriveOutKernel12processReplyEPK13HDIReplyOOL64P18IOMemoryDescriptor + 0x2be
0xffffff81f7a4ba60 : 0xffffff7f903aee9b com.apple.driver.DiskImages : __ZN32IOHDIXHDDriveOutKernelUserClient14processReply64EPK13HDIReplyOOL64 + 0xd3
0xffffff81f7a4bac0 : 0xffffff800d0c3959 mach_kernel : _shim_io_connect_method_structureI_structureO + 0x1c9
0xffffff81f7a4bb20 : 0xffffff800d0c1ae0 mach_kernel : __ZN12IOUserClient14externalMethodEjP25IOExternalMethodArgumentsP24IOExternalMethodDispatchP8OSObjectPv + 0x340
0xffffff81f7a4bb70 : 0xffffff800d0ca567 mach_kernel : _is_io_connect_method + 0x217
...
ОБНОВЛЕНИЕ7: Я перестал пытаться использовать тестовое приложение SimpleCryptoDisk.cpp и начал с нуля, добавляя немного кода за раз. У меня был некоторый успех (драйвер запускается, и я вижу журнал), хотя у меня пока ничего не работает.
Если я застряну в этом, я могу опубликовать еще один вопрос, но я продолжу и отмечу ответ pmdj как правильный, так как он ответил на мой первоначальный вопрос.
Если кто-нибудь знает модифицированную версию SimpleCryptoDisk, которая работает на High Sierra, я все же хотел бы знать, однако.