黑苹果PCI设备ID仿冒:FakePCIID.kext

2020-02-14 / 1.03w / 驱动 / 7.04k / 21分钟

FakePCIID.kext 的设计目的是使黑苹果系统能连接到任何IOPCIDevice,以便当连接到同一设备的另一个驱动程序请求它们时,它可以提供备用PCI ID。可以使用此技术代替修补可能会检查其IOService :: probe或IOService :: start方法中受支持的设备ID(或其他PCI ID)的二进制文件。

为了将FakePCIID附加到给定的IOPCIDevice,必须构建IOKit可以用来匹配的kext注入器。驱动的Info.plist没有内置的IOKitPersonalities,因为它是通用的,并且并非为特定目的而构建。压缩包中提供的发行版具有四个这样的kext注入器,也可以为其他设备创建自定义kext注入器。

在任何情况下,注入器的Info.plist中的DSDT补丁,FakeID配置(Clover)或FakeProperties字典都将需要注入FakePCIID可以在IOPCIDevice上读取的属性。FakePCIID使用的属性将在本文后面描述。这些属性必须存在于被挂接的PCIDevice(FakePCIID的直接父级)上。

备注
  • 在较新的硬件平台上,Hackintool、Clover Configurator比这个驱动更能解决仿冒设备ID的问题,如果二者都不能解决你的仿冒ID问题时,再尝试本驱动;
  • FakePCIID_Intel_HD_Graphics.kext适用于HD4400移动版,HD4600移动版,HD4200移动版和HD4600桌面版。

 

安装&使用
  • 和 Lilu/AppleALC/WhateverGreen 不同,FakePCIID.kext 需要使用 Kext 安装器(例如KextWizard)安装;
  • 通常情况下,请使用 Release 发行版,如果出现问题,可使用 debug 进行排错;
  • 为了使kext加载到特定设备上,还必须安装适当的进样器kext。当前,提供了四个注射器:
    • FakePCIID_Intel_HD_Graphics.kext (formerly FakePCIID_HD4600_HD4400.kext):此kext将附加到 8086:0412、8086:0416、8086:0a1e,8086:041e,8086:0a16、8086:041a,8086:016a,8086:191d 或 8086:162a
      • 8086:0412 是 HD4600 桌面端
      • 8086:0a16 是 HD4400 移动端
      • 8086:0416 是 HD4600 移动端
      • 8086:0a1e 是 HD4200 移动端
      • 8086:041e 是 HD4400 桌面端
      • 8086:041a 是 P4600 服务器端
      • 8086:016a 是 P4000 服务器端
      • 8086:191d 是 P530 服务器端
      • 8086:162a 是 P6300 服务器端
    • 通常,注入一个虚假的设备ID 8086:0412 是针对 macOS Yosemite,因为 Yosemite 本身无法识别8086:0416。8086:0412是HD4600(桌面端)的设备ID。通过注入0412,将加载 AppleIntelFramebufferAzul 和 AppleIntelHD5000Graphics。而且,由于FakePCIID也将连接到这些设备,因此它将成功地使该设备的两个kext 欺骗 Intel HD4600 桌面端 iGPU(0412)。要获得P4000支持,请注入设备ID 0166(HD4000)。要获得P530支持,请注入设备ID 1912(HD530)。要支持P6300,请注入设备ID 1622(HD6200)
    • FakePCIID_Intel_HDMI_Audio.kext:此kext将附加到 8086:0c0c 或 8086:9d70 或 8086:a170
    • 目的是为在 Haswell 及更高版本硬件上提供 HDMI 音频的不受支持的HDAU(通常称为B0D3,但已重命名为 HDAU 以符合Apple的期望)提供支持。8086:0c0c是不受支持的ID。支持其他两个 8086:0d0c 和 8086:0a0c。这个kext AppleHDAController 按 PCI 类加载,因此通常不会为此注入device-id,但是为了使 FakePCIID 正常工作,您可能需要注入RM,受支持的 device-id。默认情况下,kext注入RM,device-id = <0c 0a 00 00>(0x0a0c),可以使用DSDT编辑覆盖它。
    • 例如,_DSM修补程序,用于HDAU设备,用于FakePCIID和HDMI音频,如果要 0x0d0c 而不是 0x0a0c。
into method label _DSM parent_adr 0x00030000 remove_entry;
into device name_adr 0x00030000 insert
begin
Method (_DSM, 4, NotSerialized)\n
{\n
    If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
    Return (Package()\n
    {\n
        "RM,device-id", Buffer() { 0x0c, 0x0d, 0x00, 0x00 },\n
        "hda-gfx", Buffer() { "onboard-1" },\n
    })\n
}\n
end;
    • 对于Skylake 8086:9d70 或 8086:1a70,它连接到 HDEF 设备(通常称为HDAS,但已重命名为HDEF以符合Aple的期望)。Skylake HDMI / DP音频编解码器与板载音频一起位于HDEF上。它为 0x9d70注入RM,device-id = <70 a1 00 00>,为 0xa170 注入RM,device-id = <70 9d 00 00>。换句话说,这两个设备ID将调换它们。如果已正确设置HDMI / DP音频的所有设置,但是不起作用,请尝试一下上面的方法。这是通过注意到Skylake HDMI音频可在NUC6i7KYK上运行而在其他NUC6设备上无法运行而发现的,这完全取决于系统。有些计算机需要交换它们,而其他计算机则不需要。
    • 该扩展程序无法解决在HDMI / DP设置中可能遇到的其他问题/错误(例如,缺少“ hda-gfx”,不匹配的“ layout-id”注入,不正确或错误的帧缓冲区补丁或缺少ACPI重命名)。
      • FakePCIID_AR9280_as_AR946x:此kext将附加到168c:0034或168c:002a。
        • FakePCIID.kext的此特定应用程序用于将AR9280重命名为其他设备的情况。例如,对于Lenovo u430,将AR9280重命名为AR946x是很有用的,因为该设备被BIOS白名单允许,而AR9280则不允许。通过使用FakePCIID,即使设备本身正在报告168c:0034,我们也可以将PCI ID重新映射回AR9280(168c:002a)。
      • FakePCIID_Broadcom_WiFi.kext(以前称为FakePCIID_BCM94352Z_as_BCM94360CS2.kext)。此kext将附加到14e4:43b1、14e4:4357、14e4:4331、14e4:4353、14e4:432b,14e4:43ba,14e4:43a3、14e4:43a3、106b:4e,14e4:4312、14e4:4313、14e4:4318、14e4:4319、14e4:431a,14e4:4320、14e4:4324、14e4:4325、14e4:4328、14e4:432c,14e4:432d。
      • FakePCIID.kext最初是为BCM94352Z创建的,此特定应用程序用于在使用各种受支持的Broadcom WiFi设备时模拟真实的Apple Airport Extreme。
      • FakePCIID_BCM57XX_as_BCM57765.kext:此kext将连接到许多不受支持的BCM57XX以太网设备,以使本机驱动程序可兼容更广泛的BCM以太网芯片组,但由于对PCI设备ID /子设备ID的探针测试而不受支持。
      • FakePCIID_Intel_GbX.kext:此kext将连接到许多Intel以太网设备,以尝试使基于Intel芯片组的卡的Small Tree驱动程序正常工作。
      • FakePCIID_XHCIMux.kext此kext将附加到8086:1e31、8086:9c31、8086:9cb1、8086:9c31和8086:8cb1。此注入器是对常规FakePCIID的扩展。它实际上并没有仿冒任何PCI-ID。而是将某些值强制设置为Intel XHCI USB3控制器上的XUSB2PR(PCI配置偏移0xD0)。效果是将连接到XHC端口上USB2引脚的任何USB2设备路由到EHC1。换句话说,使用USB2驱动程序而不是USB3驱动程序(AppleUSBEHCI与AppleUSBXHCI)处理USB2设备。
      • 配置属性及其默认值:RM,pr2-force <00 00 00 00>。默认情况下,强制所有XHCI端口将USB2设备路由到EHC1。RM,pr2-init <01>。如果非零,将在启动时写入RM,pr2-force值。RM,pr2-嵌段<01>。如果非零,将阻止对XUSB2PR的写入。RM,pr2m块<01>。没有证据表明OS X驱动程序尝试写入XUSB2PRM(偏移量0xD4),但是由于此kext依赖此处的有效值(由BIOS提供),因此如果非零,则阻止对其写入。RM,pr2-honor-pr2m <01>:如果XUSB2PR非零,对XUSB2PR的更改将被XUSB2PRM屏蔽。RM,pr2-chipset-mask:使用此值屏蔽对XUSB2PR的写入。这由芯片组文档定义,默认值取决于芯片组。
    • 有关更多信息,请参阅英特尔7/8/9系列芯片组数据表。
  • 为了创建自己的注入器,您应该熟悉 IOKit 匹配和 kext Info.plist 文件。在 developer.apple.com 上有足够的文档,使用现有的注入器作为模板来构建自己的注入器。

 

DSDT 补丁
  • FakePCIID.kext将返回在关联的IOPCIDevice下的IO注册表中找到的供应商ID,设备ID,子系统供应商ID和子系统ID。为了提供正确/受支持的值,采用_DSM注入(或带有Clover的FakeID)。例如,这是一个用于HD4600的补丁:
into method label _DSM parent_adr 0x00020000 remove_entry;
into device name_adr 0x00020000 insert
begin
Method (_DSM, 4, NotSerialized)\n
{\n
    If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
    Return (Package()\n
    {\n
        "device-id", Buffer() { 0x12, 0x04, 0x00, 0x00 },\n
        "AAPL,ig-platform-id", Buffer() { 0x06, 0x00, 0x26, 0x0a },\n
        "hda-gfx", Buffer() { "onboard-1" },\n
        "model", Buffer() { "Intel HD 4600" },\n
    })\n
}\n
end;
  • 请注意,以上补丁中FakePCIID读取的唯一属性是“ device-id”。Clover的config.plist(FakeID)或(例如)Chimera的IGPDeviceID标志也可以提供“ device-id”注入。FakePCIID和IOKit匹配都使用“ device-id”属性。通常这是可以的,但是为了灵活性,也可以使用前缀属性“ RM”来指定FakePCIID使用的其他ID。因此,简化补丁如下所示:
into method label _DSM parent_adr 0x00020000 remove_entry;
into device name_adr 0x00020000 insert
begin
Method (_DSM, 4, NotSerialized)\n
{\n
    If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
    Return (Package()\n
    {\n
        "RM,device-id", Buffer() { 0x12, 0x04, 0x00, 0x00 },\n
    })\n
}\n
end;
  • 当然,必须注入“ device-id”和“ ig-platform-id”,才能使用其他某种机制运行HD4600。但是FakePCIID.kext只能使用“ RM,device-id”来完成其工作。下面是AR9280中用作AR946x场景的补丁:
into method label _DSM parent_label PXSX remove_entry;
into device label PXSX parent_label RP03 insert
begin
Method (_DSM, 4, NotSerialized)\n
{\n
    If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
    Return (Package()\n
    {\n
        "vendor-id", Buffer() { 0x8c, 0x16, 0x00, 0x00 },\n
        "device-id", Buffer() { 0x2a, 0x00, 0x00, 0x00 },\n
        "subsystem-id", Buffer() { 0x8F, 0x00, 0x00, 0x00 },\n
        "subsystem-vendor-id", Buffer() { 0x6B, 0x10, 0x00, 0x00 },\n
        "compatible", "pci168c,2a",\n
        "IOName", "pci168c,2a",\n
        "name", "pci168c,2a",\n
        "AAPL,slot-name", Buffer() { "AirPort" },\n
        "device_type", Buffer() { "AirPort" },\n
        "model", Buffer() { "Atheros 928x 802.11 b/g/n Wireless Network Adapter" },\n
    })\n
}\n
end;
  • 对于BCM94352CS2作为BCM94352Z,使用以下DSDT补丁:
into device Label PXSX parent_label RP03 replace_content begin
Method (_DSM, 4, NotSerialized)\n
{\n
	If (LEqual(Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
	Return (Package()\n
	{\n
		"vendor-id", Buffer() { 0xe4, 0x14, 0x00, 0x00 },\n
		"device-id", Buffer() { 0xa0, 0x43, 0x00, 0x00 },\n
		"subsystem-vendor-id", Buffer() { 0x6b, 0x10, 0x00, 0x00 },\n
		"subsystem-id", Buffer() { 0x34, 0x01, 0x00, 0x00 },\n
		"compatible", "pci14e4,43a0",\n
		"IOName", "pci14e4,43a0",\n
		"name", "pci14e4,43a0"
	})\n
}\n
end;
  • 请注意,节点PXSX和RP​​03特定于从属的DSDT,在这种情况下是Lenovo u430笔记本电脑,同样,针对WiFi场景的简化补丁看起来像这样:
into method label _DSM parent_label PXSX remove_entry;
into device label PXSX parent_label RP03 insert
begin
Method (_DSM, 4, NotSerialized)\n
{\n
    If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }\n
    Return (Package()\n
    {\n
        "RM,vendor-id", Buffer() { 0x8c, 0x16, 0x00, 0x00 },\n
        "RM,device-id", Buffer() { 0x2a, 0x00, 0x00, 0x00 },\n
        "RM,subsystem-id", Buffer() { 0x8F, 0x00, 0x00, 0x00 },\n
        "RM,subsystem-vendor-id", Buffer() { 0x6B, 0x10, 0x00, 0x00 },\n
    })\n
}\n
end;
  • 假设原始示例中提供的“兼容”功能与某些其他机制(注入器kext或Clover配置)一起使用。下面列出了FakePCIID支持的属性及其对应的PCI配置空间偏移:
    • Offset 0x00: "vendor-id", "RM,vendor-id"
    • Offset 0x02: "device-id", "RM,device-id"
    • Offset 0x2c: "subsystem-vendor-id", "RM,subsystem-vendor-id"
    • Offset 0x2e: "subsystem-id", "RM,subsystem-id"
  • 更多信息,参考:http://en.wikipedia.org/wiki/PCI_configuration_space

 

 

 

···下载地址
该资源永久超级会员免费 去升级
  • 解压密码heipg.cn
  • 文件大小70KB
  • 最近更新2020年02月14日
0. 本站所有资源解压密码均为 heipg.cn
1. 本站资源收集于网络,仅做学习和交流使用,请于下载后24小时内删除。如果你喜欢我们推荐的软件,请购买正版支持作者。
2. 如有无法下载的链接,请及时邮箱[email protected],或到QQ群进行反馈,我们将及时进行处理。
3. 本站发布的内容若侵犯到您的权益,请联系站长删除,联系方式:[email protected],我们将第一时间配合处理!
扫描QQ二维码加入【黑苹果星球交流群】

黑苹果星球 » 黑苹果PCI设备ID仿冒:FakePCIID.kext

1 评论

  1. 怎么下载啊啊。啊。啊 啊。啊啊

发表评论