首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试创建和挂载新的HFS卷时出错(以测试筛选方案驱动程序)

尝试创建和挂载新的HFS卷时出错(以测试筛选方案驱动程序)
EN

Stack Overflow用户
提问于 2019-01-08 18:18:40
回答 1查看 287关注 0票数 1

我正在尝试测试一个IO工具包示例应用程序,它实现了一个过滤器方案。有关上下文,请参见此处的10.7.10部分。由于源代码很难剪切和粘贴(当我尝试获得错误时),我使用的是来自构建的这里的源代码。

在页面上的最后一个图(1038)中,它有一系列步骤来创建和挂载一个新的HFS卷。这样做的目的是要看到KEXT正在工作并进行加密。我已经构建了示例KEXT并使用它进行了测试,但是在进行“打开”调用时,我总是会得到“没有可挂载的文件系统”错误。我已经证实KEXT是正确装载的。

如果删除"-partitionType“,我就能够正常地操作卷(尽管这不涉及KEXT)。

有人能告诉我这里可能出了什么问题吗?

在图1038的脚本中,我的部分混淆是在打开之前运行的"detach“命令。它对我来说是失败的,但我不确定这是否是导致“开放”之后失败的原因,还是没有关系。

代码语言:javascript
复制
$ 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,这是更重要的反正。

UPDATE2:看来kext最终会被卸载(可能会崩溃)。有时似乎是在“开放”的时候,有时是之后。我尝试添加像IOLog这样的语句(“CSD: init"),但是没有一个语句出现在系统日志或控制台日志中。寻找其他方式,我可以分类(不需要一个单独的机器)。

UPDATE3:下面是我尝试启动KEXT时的输出。这里有很多警告,但是由于我禁用了签名检查,所以我认为它仍然在加载。我还看到它通过kextstat加载。

另一件奇怪的事情是,我在"ioreg“的输出中没有看到这个KEXT的任何迹象,也没有看到来自IOLog()的任何print语句。

代码语言:javascript
复制
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:我调整了plist中的包ID,使其匹配,现在它没有给“无法找到的kext命名”错误:

代码语言:javascript
复制
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" }

UPDATE5:

现在,每次加载KEXT并执行"hdiutil附加-nomount /tmp/cryp.dmg“(在创建/tmp/cryp.dmg之后),我的操作系统都会崩溃。

显然,我的KEXT现在正在运行,但出于某种原因,我仍然没有看到IOLog()语句。将不得不查看系统日志,看看是否有任何迹象表明它正在崩溃。

UPDATE6:我得到了一个象征性的内核恐慌,但它指向了另一个KEXT (我认为我也没有这个源代码)。下面是它的相关部分。

我尝试使用相同测试的另一个版本的KEXT (这里),而没有做任何更改(我已经删除了IOLog()语句,因为它们没有出现)。

我看到了一个笔记,这是在MacOS10.6上测试过的,但是有没有人让这个样本在10.13.16 (高塞拉)上工作?

代码语言:javascript
复制
...
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
...

UPDATE7:我放弃了尝试使用SimpleCryptoDisk.cpp测试应用程序,从零开始,一次添加一点点代码。我已经取得了一些成功(驱动程序启动,我可以看到日志),虽然我还没有真正的任何工作。

如果我被困在这个问题上,我可能会发布另一个问题,但我会继续把pmdj的答案标记为正确,因为他回答了我原来的问题。

如果有人知道一个修改版本的SimpleCryptoDisk,工作在高塞拉利昂,但我仍然想知道。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-09 15:01:01

要回答你最初的问题:

为什么不加载kext并使用分区类型"osxbook_HFS"时“没有可挂载的文件系统”

如您所见,使用任意文本字符串来标识分区类型。macOS逐字使用此字符串作为“内容提示”,它选择要尝试在该卷上自动运行的文件系统类型。HFS+文件系统只查找Apple_HFS (区分大小写的Apple_HFSX )。

kext背后的想法是,它本身与新定义的内容提示相匹配,并发布一个新的存储nub对象,而这个对象又为文件系统提供了HFS+内容提示。

为什么hdiutil detach 失败

$ hdiutil detach /dev/disk2 2 hdiutil: detach失败-没有这样的文件或目录

在当前版本的macOS中,需要将命令重写为以下两种:

代码语言:javascript
复制
$ hdiutil detach disk2

代码语言:javascript
复制
$ hdiutil detach /Volumes/VOLUMENAME

我不能立即回答您当前的问题,为什么它不与kext一起工作,但我可以建议您查看您的kext在IO注册表方面的行为是否如预期的那样。请与IORegistryExplorer或ioreg检查它是否将卷与特殊分区类型匹配,以及是否使用Apple_HFS内容提示创建和注册虚拟(解密)卷。如果不确定,将ioreg输出(ioreg -w 0 -lirc YOUR_DRIVERS_CLASSNAME)添加到您的问题中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54097520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档