如何创建无代码内核扩展?
How to create a codeless kernel extension?
我知道如何在KEXT中加载驱动程序,我知道如何使用xcode。问题是,如何创建 无代码 kext?
假设我已经有一个文本文件并且可以将其保存为 PLIST 文件?然后呢?如何将它(PLIST 文件)转换为 .KEXT 文件?使用 Xcode?还是从命令行?
我正在寻找分步指导。
无代码 kext 几乎就是一堆包含 Info.plist 和从 OS X 10.9 开始的加密签名的目录。
YourKextName.kext/
+ Contents/
+ Info.plist - Your plist file
+ _CodeSignature/ - The 'codesign' tool will create and fill this appropriately
您可能还有一些本地化数据,但我不知道这在无代码 kext 中有什么用。
要创建它,您有 2 个选择:
手动创建无代码kext
- 创建您的 Info.plist(一些关于此的进一步提示。)
- 创建目录树(
mkdir -p "$BUILD_DIR/YourKextName.kext/Contents"
)
- 将Info.plist复制到(
cp "$SOURCE_DIR/Info.plist" "$BUILD_DIR/YourKextName.kext/Contents/"
)
- 签名。 (
codesign -fs "Developer Id" "$BUILD_DIR/YourKextName.kext"
)
您可以在 Xcode 中创建一个 "Aggregate" 目标,并将所有这些命令(除了第一个)放在目标的 "Run Script" 构建阶段,如果您愿意的话它是您 Xcode 构建的一部分。
Xcode 方式
如果您希望 Xcode 像对常规 kext 那样对 Info.plist 进行预处理,您还可以让 Xcode 为你,不需要自定义脚本:
- 在您的项目中创建一个 "I/O Kit Driver" Xcode 目标。
- 删除源代码文件Xcode将自动创建。 (最简单:在项目导航器中删除它们,在询问时回复 "move to trash"。这将从目标的构建和源代码树中删除它们。)
- 自定义您的 Info.plist(见下文)
- 如有必要,请选择您将用于在目标构建设置中签署 kext 的 Developer Id 证书。
- 点击构建 (⌘B)
无代码 kext Info.plist 提示
您的 Info.plist 与任何其他 I/O Kit kext 的 Info.plist 相似,除了:
- 没有可执行文件,所以
CFBundleExecutable
属性 一定不存在。
- 您没有 need/want
OSBundleLibraries
属性 因为没有需要链接的可执行文件。
- 你的
IOKitPersonalities
词典中的每个个性都必须有一个 CFBundleIdentifier
属性 标识 另一个 kext,一个包含提供任何 IOClass
你指定的。
我知道如何在KEXT中加载驱动程序,我知道如何使用xcode。问题是,如何创建 无代码 kext?
假设我已经有一个文本文件并且可以将其保存为 PLIST 文件?然后呢?如何将它(PLIST 文件)转换为 .KEXT 文件?使用 Xcode?还是从命令行? 我正在寻找分步指导。
无代码 kext 几乎就是一堆包含 Info.plist 和从 OS X 10.9 开始的加密签名的目录。
YourKextName.kext/
+ Contents/
+ Info.plist - Your plist file
+ _CodeSignature/ - The 'codesign' tool will create and fill this appropriately
您可能还有一些本地化数据,但我不知道这在无代码 kext 中有什么用。
要创建它,您有 2 个选择:
手动创建无代码kext
- 创建您的 Info.plist(一些关于此的进一步提示。)
- 创建目录树(
mkdir -p "$BUILD_DIR/YourKextName.kext/Contents"
) - 将Info.plist复制到(
cp "$SOURCE_DIR/Info.plist" "$BUILD_DIR/YourKextName.kext/Contents/"
) - 签名。 (
codesign -fs "Developer Id" "$BUILD_DIR/YourKextName.kext"
)
您可以在 Xcode 中创建一个 "Aggregate" 目标,并将所有这些命令(除了第一个)放在目标的 "Run Script" 构建阶段,如果您愿意的话它是您 Xcode 构建的一部分。
Xcode 方式
如果您希望 Xcode 像对常规 kext 那样对 Info.plist 进行预处理,您还可以让 Xcode 为你,不需要自定义脚本:
- 在您的项目中创建一个 "I/O Kit Driver" Xcode 目标。
- 删除源代码文件Xcode将自动创建。 (最简单:在项目导航器中删除它们,在询问时回复 "move to trash"。这将从目标的构建和源代码树中删除它们。)
- 自定义您的 Info.plist(见下文)
- 如有必要,请选择您将用于在目标构建设置中签署 kext 的 Developer Id 证书。
- 点击构建 (⌘B)
无代码 kext Info.plist 提示
您的 Info.plist 与任何其他 I/O Kit kext 的 Info.plist 相似,除了:
- 没有可执行文件,所以
CFBundleExecutable
属性 一定不存在。 - 您没有 need/want
OSBundleLibraries
属性 因为没有需要链接的可执行文件。 - 你的
IOKitPersonalities
词典中的每个个性都必须有一个CFBundleIdentifier
属性 标识 另一个 kext,一个包含提供任何IOClass
你指定的。