Jump to content
ErmaC

Clover problems report & features request

168 posts in this topic

Recommended Posts

Ability to have bigger font size with Text Only mode, and have the menu in the center not top left. On 4K monitors text is very hard to see because the text is too small.

Share this post


Link to post
Share on other sites
Advertisement

A request for ig platform ID in the graphics section for AMD 2200g and 2400g Ryzen Vega chipsets.   Current Clover Graphics screen/Menu only allows Fake ID.   I have managed to spoof the Vega IGPU to KBL CRB and load 3 Intel frame buffers but no accelerators.   I have done this by editing info.plist of KBL kexts.   Having a ig platform option may allow for acceleration for these graphics by spoofing Iris graphics.?

Share this post


Link to post
Share on other sites
On 5/7/2018 at 12:09 AM, Hackmac101 said:

Ability to have bigger font size with Text Only mode, and have the menu in the center not top left. On 4K monitors text is very hard to see because the text is too small.

 

The text is based on the EFI console mode, so the reason it's so small is because that's the size your firmware sets. Usually there's only one or two modes and they don't really change the size of the text, they just draw in differently sized rectangles to allow more characters to be drawn. So changing your resolution to something smaller will make the text bigger, there's no other way to  change the size of the text.

 

On 5/7/2018 at 2:01 AM, Gigamaxx said:

A request for ig platform ID in the graphics section for AMD 2200g and 2400g Ryzen Vega chipsets.   Current Clover Graphics screen/Menu only allows Fake ID.   I have managed to spoof the Vega IGPU to KBL CRB and load 3 Intel frame buffers but no accelerators.   I have done this by editing info.plist of KBL kexts.   Having a ig platform option may allow for acceleration for these graphics by spoofing Iris graphics.?

 

You can inject properties into the _DSM of the device's ACPI with Devices/AddProperties (or you can create your own SSDT that does this and inject it), although not sure that it can do that for those. Also, there is no support for those graphics so you won't be getting it working without another kext to support it. You are confusing the Vega 8 and 11 in those CPUs with the Vega M in the Intels, they are not the same.

Share this post


Link to post
Share on other sites
Posted (edited)
On 5/8/2018 at 10:47 AM, apianti said:

 

The text is based on the EFI console mode, so the reason it's so small is because that's the size your firmware sets. Usually there's only one or two modes and they don't really change the size of the text, they just draw in differently sized rectangles to allow more characters to be drawn. So changing your resolution to something smaller will make the text bigger, there's no other way to  change the size of the text.

 

 

You can inject properties into the _DSM of the device's ACPI with Devices/AddProperties (or you can create your own SSDT that does this and inject it), although not sure that it can do that for those. Also, there is no support for those graphics so you won't be getting it working without another kext to support it. You are confusing the Vega 8 and 11 in those CPUs with the Vega M in the Intels, they are not the same.

 

I am pretty clear on the Intel vs. AMD Vega chips, not confused .   I am testing both and unfortunately both have only 7mb support so far.  

 

The Intel  i7 8705G has HBM2 and HD 630 but it doesn't have native AMD graphics support.   The closest Vega IDs are 0x69A0, and 0x69AF but neither works to activate the graphics.   These Intel chips have 630 graphics but they are not dsesigned to get acceleration only quick synch so accelerators won't load for these Kaby Lake graphics.

 

The AMD 2200g and 2400g vega chips are using DDR4 memory much like Intel chipsets and cost about 1/5 the price.   However I have been able to edit the info.plist of the Kaby Lake graphics kexts and get KBL CRB listing and Intel frame buffers loaded, but again only 7mb support.   I tested all the AMD kexts edits and Intel as well only the Kaby Lake registers.   Having a ig platform for ATI graphics in Clover would be a nice "trick" tool for testing and may get these chips to achieve acceleration.    ig ID 0x59E30003 may link the accelerators and get these working but I have no option for this.    Could you provide an example on how to do this in Add properties using clover?

 

***Look at the device IDs and Vendor info in the DCPIManager it has both AMD and intel codes.

 

 

Screen Shot 2018-05-10 at 9.27.21 AM.png

Screen Shot 2018-05-11 at 12.07.55 AM.png

Edited by Gigamaxx

Share this post


Link to post
Share on other sites
Posted (edited)

Fix for 32-bit builds with CLANG38 (stock EDK2, no patches; same as vit's fix for kernel_patcher.c):

 

Spoiler

diff --git a/rEFIt_UEFI/Platform/kext_patcher.c b/rEFIt_UEFI/Platform/kext_patcher.c
index c1b46e82..ddcbf182 100755
--- a/rEFIt_UEFI/Platform/kext_patcher.c
+++ b/rEFIt_UEFI/Platform/kext_patcher.c
@@ -28,7 +28,7 @@ UINTN SearchAndCount(UINT8 *Source, UINT64 SourceSize, UINT8 *Search, UINTN Sear
 {
   UINTN     NumFounds = 0;
   UINT8     *End = Source + SourceSize;
-  
+
   while (Source < End) {
     if (CompareMem(Source, Search, SearchSize) == 0) {
       NumFounds++;
@@ -55,7 +55,7 @@ UINTN SearchAndReplace(UINT8 *Source, UINT64 SourceSize, UINT8 *Search, UINTN Se
   if (!Source || !Search || !Replace || !SearchSize) {
     return 0;
   }
-  
+
   while ((Source < End) && (NoReplacesRestriction || (MaxReplaces > 0))) {
     if (CompareMem(Source, Search, SearchSize) == 0) {
       CopyMem(Source, Replace, SearchSize);
@@ -81,7 +81,7 @@ UINTN SearchAndReplaceTxt(UINT8 *Source, UINT64 SourceSize, UINT8 *Search, UINTN
   if (!Source || !Search || !Replace || !SearchSize) {
     return 0;
   }
-  
+
   while (((Source + SearchSize) <= End) &&
          (NoReplacesRestriction || (MaxReplaces > 0))) { // num replaces
     while (*Source != '\0') {  //comparison
@@ -101,19 +101,19 @@ UINTN SearchAndReplaceTxt(UINT8 *Source, UINT64 SourceSize, UINT8 *Search, UINTN
         Source++;
         Pos++;
       }
-      
+
       if (Pos == SearchEnd) { // pattern found
         Pos = FirstMatch;
         break;
       }
       else
         Pos = NULL;
-      
+
       Source = FirstMatch + 1;
 /*      if (Pos != Search) {
         AsciiPrint("\n");
       } */
-      
+
     }
 
     if (!Pos) {
@@ -138,10 +138,10 @@ VOID ExtractKextBundleIdentifier(CHAR8 *Plist)
   CHAR8     *BIStart;
   CHAR8     *BIEnd;
   INTN      DictLevel = 0;
-  
-  
+
+
   gKextBundleIdentifier[0] = '\0';
-  
+
   // start with first <dict>
   Tag = AsciiStrStr(Plist, "<dict>");
   if (Tag == NULL) {
@@ -149,19 +149,19 @@ VOID ExtractKextBundleIdentifier(CHAR8 *Plist)
   }
   Tag += 6;
   DictLevel++;
-  
+
   while (*Tag != '\0') {
-    
+
     if (AsciiStrnCmp(Tag, "<dict>", 6) == 0) {
       // opening dict
       DictLevel++;
       Tag += 6;
-      
+
     } else if (AsciiStrnCmp(Tag, "</dict>", 7) == 0) {
       // closing dict
       DictLevel--;
       Tag += 7;
-      
+
     } else if (DictLevel == 1 && AsciiStrnCmp(Tag, "<key>CFBundleIdentifier</key>", 29) == 0) {
       // BundleIdentifier is next <string>...</string>
       BIStart = AsciiStrStr(Tag + 29, "<string>");
@@ -178,7 +178,7 @@ VOID ExtractKextBundleIdentifier(CHAR8 *Plist)
     } else {
       Tag++;
     }
-    
+
     // advance to next tag
     while (*Tag != '<' && *Tag != '\0') {
       Tag++;
@@ -221,7 +221,7 @@ VOID ATIConnectorsPatchInit(LOADER_ENTRY *Entry)
   //
   // prepar boundle ids
   //
-  
+
   // Lion, SnowLeo 10.6.7 2011 MBP
   AsciiSPrint(ATIKextBundleId[0],
               sizeof(ATIKextBundleId[0]),
@@ -234,9 +234,9 @@ VOID ATIConnectorsPatchInit(LOADER_ENTRY *Entry)
               "com.apple.kext.AMD%sController",
               Entry->KernelAndKextPatches->KPATIConnectorsController
               );
-  
+
   ATIConnectorsPatchInited = TRUE;
-  
+
   //DBG(L"Bundle1: %a\n", ATIKextBundleId[0]);
   //DBG(L"Bundle2: %a\n", ATIKextBundleId[1]);
   //gBS->Stall(10000000);
@@ -247,7 +247,7 @@ VOID ATIConnectorsPatchInit(LOADER_ENTRY *Entry)
 //
 VOID ATIConnectorsPatchRegisterKexts(FSINJECTION_PROTOCOL *FSInject, FSI_STRING_LIST *ForceLoadKexts, LOADER_ENTRY *Entry)
 {
-  
+
   // for future?
   FSInject->AddStringToList(ForceLoadKexts,
                             PoolPrint(L"\\AMD%sController.kext\\Contents\\Info.plist", Entry->KernelAndKextPatches->KPATIConnectorsController)
@@ -259,7 +259,7 @@ VOID ATIConnectorsPatchRegisterKexts(FSINJECTION_PROTOCOL *FSInject, FSI_STRING_
   // SnowLeo
   FSInject->AddStringToList(ForceLoadKexts, L"\\ATIFramebuffer.kext\\Contents\\Info.plist");
   FSInject->AddStringToList(ForceLoadKexts, L"\\AMDFramebuffer.kext\\Contents\\Info.plist");
-  
+
   // dependencies
   FSInject->AddStringToList(ForceLoadKexts, L"\\IOGraphicsFamily.kext\\Info.plist");
   FSInject->AddStringToList(ForceLoadKexts, L"\\ATISupport.kext\\Contents\\Info.plist");
@@ -274,14 +274,14 @@ VOID ATIConnectorsPatchRegisterKexts(FSINJECTION_PROTOCOL *FSInject, FSI_STRING_
 //
 VOID ATIConnectorsPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 InfoPlistSize, LOADER_ENTRY *Entry)
 {
-  
+
   UINTN   Num = 0;
-  
+
   DBG_RT(Entry, "\nATIConnectorsPatch: driverAddr = %x, driverSize = %x\nController = %s\n",
          Driver, DriverSize, Entry->KernelAndKextPatches->KPATIConnectorsController);
   ExtractKextBundleIdentifier(InfoPlist);
   DBG_RT(Entry, "Kext: %a\n", gKextBundleIdentifier);
-  
+
   // number of occurences od Data should be 1
   Num = SearchAndCount(Driver, DriverSize, Entry->KernelAndKextPatches->KPATIConnectorsData, Entry->KernelAndKextPatches->KPATIConnectorsDataLen);
   if (Num > 1) {
@@ -290,7 +290,7 @@ VOID ATIConnectorsPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT
     gBS->Stall(5*1000000);
     return;
   }
-  
+
   // patch
   Num = SearchAndReplace(Driver,
                          DriverSize,
@@ -322,9 +322,9 @@ VOID ATIConnectorsPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT
 // Rehabman corrections 2014
 //
 
-UINT8   MovlE2ToEcx[] = { 0xB9, 0xE2, 0x00, 0x00, 0x00 };
-UINT8   MovE2ToCx[]   = { 0x66, 0xB9, 0xE2, 0x00 };
-UINT8   Wrmsr[]       = { 0x0F, 0x30 };
+STATIC UINT8   MovlE2ToEcx[] = { 0xB9, 0xE2, 0x00, 0x00, 0x00 };
+STATIC UINT8   MovE2ToCx[]   = { 0x66, 0xB9, 0xE2, 0x00 };
+STATIC UINT8   Wrmsr[]       = { 0x0F, 0x30 };
 
 VOID AppleIntelCPUPMPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 InfoPlistSize, LOADER_ENTRY *Entry)
 {
@@ -397,18 +397,18 @@ VOID AppleIntelCPUPMPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UI
 // http://www.insanelymac.com/forum/index.php?showtopic=276066
 //
 
-UINT8   LionSearch_X64[]  = { 0x75, 0x30, 0x44, 0x89, 0xf8 };
-UINT8   LionReplace_X64[] = { 0xeb, 0x30, 0x44, 0x89, 0xf8 };
+STATIC UINT8   LionSearch_X64[]  = { 0x75, 0x30, 0x44, 0x89, 0xf8 };
+STATIC UINT8   LionReplace_X64[] = { 0xeb, 0x30, 0x44, 0x89, 0xf8 };
 
-UINT8   LionSearch_i386[]  = { 0x75, 0x3d, 0x8b, 0x75, 0x08 };
-UINT8   LionReplace_i386[] = { 0xeb, 0x3d, 0x8b, 0x75, 0x08 };
+STATIC UINT8   LionSearch_i386[]  = { 0x75, 0x3d, 0x8b, 0x75, 0x08 };
+STATIC UINT8   LionReplace_i386[] = { 0xeb, 0x3d, 0x8b, 0x75, 0x08 };
 
-UINT8   MLSearch[]  = { 0x75, 0x30, 0x89, 0xd8 };
-UINT8   MLReplace[] = { 0xeb, 0x30, 0x89, 0xd8 };
+STATIC UINT8   MLSearch[]  = { 0x75, 0x30, 0x89, 0xd8 };
+STATIC UINT8   MLReplace[] = { 0xeb, 0x30, 0x89, 0xd8 };
 
 //SunKi
-UINT8   MavSearch[]  = { 0x75, 0x2e, 0x0f, 0xb6 };
-UINT8   MavReplace[] = { 0xeb, 0x2e, 0x0f, 0xb6 };
+STATIC UINT8   MavSearch[]  = { 0x75, 0x2e, 0x0f, 0xb6 };
+STATIC UINT8   MavReplace[] = { 0xeb, 0x2e, 0x0f, 0xb6 };
 
 //
 // We can not rely on OSVersion global variable for OS version detection,
@@ -420,19 +420,19 @@ UINT8   MavReplace[] = { 0xeb, 0x2e, 0x0f, 0xb6 };
 
 VOID AppleRTCPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 InfoPlistSize, LOADER_ENTRY *Entry)
 {
-  
+
   UINTN   Num = 0;
   UINTN   NumLion_X64 = 0;
   UINTN   NumLion_i386 = 0;
   UINTN   NumML = 0;
   UINTN   NumMav = 0;
-  
+
   DBG_RT(Entry, "\nAppleRTCPatch: driverAddr = %x, driverSize = %x\n", Driver, DriverSize);
   if (Entry->KernelAndKextPatches->KPDebug) {
     ExtractKextBundleIdentifier(InfoPlist);
   }
   DBG_RT(Entry, "Kext: %a\n", gKextBundleIdentifier);
-  
+
   if (is64BitKernel) {
     NumLion_X64 = SearchAndCount(Driver, DriverSize, LionSearch_X64, sizeof(LionSearch_X64));
     NumML  = SearchAndCount(Driver, DriverSize, MLSearch,  sizeof(MLSearch));
@@ -440,7 +440,7 @@ VOID AppleRTCPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 In
   } else {
     NumLion_i386 = SearchAndCount(Driver, DriverSize, LionSearch_i386, sizeof(LionSearch_i386));
   }
-  
+
   if (NumLion_X64 + NumLion_i386 + NumML + NumMav > 1) {
     // more then one pattern found - we do not know what to do with it
     // and we'll skipp it
@@ -449,7 +449,7 @@ VOID AppleRTCPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 In
     gBS->Stall(5000000);
     return;
   }
-  
+
   if (NumLion_X64 == 1) {
     Num = SearchAndReplace(Driver, DriverSize, LionSearch_X64, sizeof(LionSearch_X64), LionReplace_X64, 1);
     DBG_RT(Entry, "==> Lion X64: %d replaces done.\n", Num);
@@ -508,8 +508,8 @@ VOID CheckForFakeSMC(CHAR8 *InfoPlist, LOADER_ENTRY *Entry)
 //
 // EB9D2D31-2D88-11D3-9A16-0090273F -> EB9D2D35-2D88-11D3-9A16-0090273F
 //
-UINT8   DELL_SMBIOS_GUID_Search[]  = { 0x45, 0x42, 0x39, 0x44, 0x32, 0x44, 0x33, 0x31 };
-UINT8   DELL_SMBIOS_GUID_Replace[] = { 0x45, 0x42, 0x39, 0x44, 0x32, 0x44, 0x33, 0x35 };
+STATIC STATIC UINT8   DELL_SMBIOS_GUID_Search[]  = { 0x45, 0x42, 0x39, 0x44, 0x32, 0x44, 0x33, 0x31 };
+STATIC STATIC UINT8   DELL_SMBIOS_GUID_Replace[] = { 0x45, 0x42, 0x39, 0x44, 0x32, 0x44, 0x33, 0x35 };
 
 //
 // EB9D2D31-2D88-11D3-9A16-0090273F is the standard SMBIOS Table Type 1 for
@@ -525,19 +525,19 @@ VOID DellSMBIOSPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
     // than Yosemite, they are all pure 64bit platforms
     //
     UINTN gPatchCount = 0;
-    
+
     DBG_RT(Entry, "\nDellSMBIOSPatch: driverAddr = %x, driverSize = %x\n", Driver, DriverSize);
     if (Entry->KernelAndKextPatches->KPDebug)
     {
         ExtractKextBundleIdentifier(InfoPlist);
     }
     DBG_RT(Entry, "Kext: %a\n", gKextBundleIdentifier);
-    
+
     //
     // now, let's patch it!
     //
     gPatchCount = SearchAndReplace(Driver, DriverSize, DELL_SMBIOS_GUID_Search, sizeof(DELL_SMBIOS_GUID_Search), DELL_SMBIOS_GUID_Replace, 1);
-    
+
     if (gPatchCount == 1)
     {
         DBG_RT(Entry, "==> AppleSMBIOS: %d replaces done.\n", gPatchCount);
@@ -564,24 +564,24 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
 {
     UINT32 i;
     UINT64 os_ver = AsciiOSVersionToUint64(Entry->OSVersion);
-    
+
     DBG_RT(Entry, "\nSNBE_AICPUPatch: driverAddr = %x, driverSize = %x\n", Driver, DriverSize);
     if (Entry->KernelAndKextPatches->KPDebug) {
         ExtractKextBundleIdentifier(InfoPlist);
     }
-    
+
     DBG_RT(Entry, "Kext: %a\n", gKextBundleIdentifier);
-    
+
     // now let's patch it
     if (os_ver < AsciiOSVersionToUint64("10.9") || os_ver >= AsciiOSVersionToUint64("10.14")) {
         DBG("Unsupported macOS.\nSandyBridge-E requires macOS 10.9 - 10.13.x, aborted\n");
         DBG("SNBE_AICPUPatch() <===FALSE\n");
         return;
     }
-    
+
     if (os_ver < AsciiOSVersionToUint64("10.10")) {
         // 10.9.x
-        UINT8 find[][3] = {
+        STATIC UINT8 find[][3] = {
             { 0x84, 0x2F, 0x01 },
             { 0x3E, 0x75, 0x3A },
             { 0x84, 0x5F, 0x01 },
@@ -590,7 +590,7 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
             { 0xFC, 0x02, 0x74 },
             { 0x01, 0x74, 0x58 }
         };
-        UINT8 repl[][3] = {
+        STATIC UINT8 repl[][3] = {
             { 0x85, 0x2F, 0x01 },
             { 0x3E, 0x90, 0x90 },
             { 0x85, 0x5F, 0x01 },
@@ -599,7 +599,7 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
             { 0xFC, 0x02, 0xEB },
             { 0x01, 0xEB, 0x58 }
         };
-        
+
         for (i = 0; i < 7; i++) {
             if (SearchAndReplace(Driver, DriverSize, find[i], sizeof(find[i]), repl[i], 0)) {
                 DBG("SNBE_AICPUPatch (%d/7) applied\n", i);
@@ -609,12 +609,12 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
         }
     } else if (os_ver < AsciiOSVersionToUint64("10.11")) {
         // 10.10.x
-        UINT8 find[][3] = {
+        STATIC UINT8 find[][3] = {
             { 0x3E, 0x75, 0x39 },
             { 0x74, 0x11, 0xB9 },
             { 0x01, 0x74, 0x56 }
         };
-        UINT8 repl[][3] = {
+        STATIC UINT8 repl[][3] = {
             { 0x3E, 0x90, 0x90 },
             { 0xEB, 0x11, 0xB9 },
             { 0x01, 0xEB, 0x56 }
@@ -626,34 +626,34 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
                 DBG("SNBE_AICPUPatch (%d/7) not apply\n", i);
             }
         }
-        
-        UINT8 find_1[] = { 0xFF, 0x0F, 0x84, 0x2D };
-        UINT8 repl_1[] = { 0xFF, 0x0F, 0x85, 0x2D };
+
+        STATIC UINT8 find_1[] = { 0xFF, 0x0F, 0x84, 0x2D };
+        STATIC UINT8 repl_1[] = { 0xFF, 0x0F, 0x85, 0x2D };
         if (SearchAndReplace(Driver, DriverSize, find_1, sizeof(find_1), repl_1, 0)) {
             DBG("SNBE_AICPUPatch (4/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (4/7) not apply\n");
         }
-        
-        
-        UINT8 find_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x84 };
-        UINT8 repl_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x85 };
+
+
+        STATIC UINT8 find_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x84 };
+        STATIC UINT8 repl_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x85 };
         if (SearchAndReplace(Driver, DriverSize, find_2, sizeof(find_2), repl_2, 0)) {
             DBG("SNBE_AICPUPatch (5/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (5/7) not apply\n");
         }
-        
-        UINT8 find_3[] = { 0x02, 0x74, 0x0B, 0x41, 0x83, 0xFC, 0x03, 0x75, 0x22, 0xB9, 0x02, 0x06 };
-        UINT8 repl_3[] = { 0x02, 0xEB, 0x0B, 0x41, 0x83, 0xFC, 0x03, 0x75, 0x22, 0xB9, 0x02, 0x06 };
+
+        STATIC UINT8 find_3[] = { 0x02, 0x74, 0x0B, 0x41, 0x83, 0xFC, 0x03, 0x75, 0x22, 0xB9, 0x02, 0x06 };
+        STATIC UINT8 repl_3[] = { 0x02, 0xEB, 0x0B, 0x41, 0x83, 0xFC, 0x03, 0x75, 0x22, 0xB9, 0x02, 0x06 };
         if (SearchAndReplace(Driver, DriverSize, find_3, sizeof(find_3), repl_3, 0)) {
             DBG("SNBE_AICPUPatch (6/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (6/7) not apply\n");
         }
-        
-        UINT8 find_4[] = { 0x74, 0x0B, 0x41, 0x83, 0xFC, 0x03, 0x75, 0x11, 0xB9, 0x42, 0x06, 0x00 };
-        UINT8 repl_4[] = { 0xEB, 0x0B, 0x41, 0x83, 0xFC, 0x03, 0x75, 0x11, 0xB9, 0x42, 0x06, 0x00 };
+
+        STATIC UINT8 find_4[] = { 0x74, 0x0B, 0x41, 0x83, 0xFC, 0x03, 0x75, 0x11, 0xB9, 0x42, 0x06, 0x00 };
+        STATIC UINT8 repl_4[] = { 0xEB, 0x0B, 0x41, 0x83, 0xFC, 0x03, 0x75, 0x11, 0xB9, 0x42, 0x06, 0x00 };
         if (SearchAndReplace(Driver, DriverSize, find_4, sizeof(find_4), repl_4, 0)) {
             DBG("SNBE_AICPUPatch (7/7) applied\n");
         } else {
@@ -661,12 +661,12 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
         }
     } else if (os_ver < AsciiOSVersionToUint64("10.12")) {
         // 10.11
-        UINT8 find[][3] = {
+        STATIC UINT8 find[][3] = {
             { 0x3E, 0x75, 0x39 },
             { 0x75, 0x11, 0xB9 },
             { 0x01, 0x74, 0x5F }
         };
-        UINT8 repl[][3] = {
+        STATIC UINT8 repl[][3] = {
             { 0x3E, 0x90, 0x90 },
             { 0xEB, 0x11, 0xB9 },
             { 0x01, 0xEB, 0x5F }
@@ -678,33 +678,33 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
                 DBG("SNBE_AICPUPatch (%d/7) not apply\n", i);
             }
         }
-        
-        UINT8 find_1[] = { 0xFF, 0x0F, 0x84, 0x2D };
-        UINT8 repl_1[] = { 0xFF, 0x0F, 0x85, 0x2D };
+
+        STATIC UINT8 find_1[] = { 0xFF, 0x0F, 0x84, 0x2D };
+        STATIC UINT8 repl_1[] = { 0xFF, 0x0F, 0x85, 0x2D };
         if (SearchAndReplace(Driver, DriverSize, find_1, sizeof(find_1), repl_1, 0)) {
             DBG("SNBE_AICPUPatch (4/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (4/7) not apply\n");
         }
-        
-        UINT8 find_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x84 };
-        UINT8 repl_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x85 };
+
+        STATIC UINT8 find_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x84 };
+        STATIC UINT8 repl_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x85 };
         if (SearchAndReplace(Driver, DriverSize, find_2, sizeof(find_2), repl_2, 0)) {
             DBG("SNBE_AICPUPatch (5/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (5/7) not apply\n");
         }
-        
-        UINT8 find_3[] = { 0xC9, 0x74, 0x16, 0x0F, 0x32, 0x48, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x48 };
-        UINT8 repl_3[] = { 0xC9, 0xEB, 0x16, 0x0F, 0x32, 0x48, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x48 };
+
+        STATIC UINT8 find_3[] = { 0xC9, 0x74, 0x16, 0x0F, 0x32, 0x48, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x48 };
+        STATIC UINT8 repl_3[] = { 0xC9, 0xEB, 0x16, 0x0F, 0x32, 0x48, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x48 };
         if (SearchAndReplace(Driver, DriverSize, find_3, sizeof(find_3), repl_3, 0)) {
             DBG("SNBE_AICPUPatch (6/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (6/7) not apply\n");
         }
-        
-        UINT8 find_4[] = { 0xC9, 0x74, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
-        UINT8 repl_4[] = { 0xC9, 0xEB, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
+
+        STATIC UINT8 find_4[] = { 0xC9, 0x74, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
+        STATIC UINT8 repl_4[] = { 0xC9, 0xEB, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
         if (SearchAndReplace(Driver, DriverSize, find_4, sizeof(find_4), repl_4, 0)) {
             DBG("SNBE_AICPUPatch (7/7) applied\n");
         } else {
@@ -712,12 +712,12 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
         }
     } else if (os_ver < AsciiOSVersionToUint64("10.13")) {
         // 10.12
-        UINT8 find[][3] = {
+        STATIC UINT8 find[][3] = {
             { 0x01, 0x74, 0x61 },
             { 0x3E, 0x75, 0x38 },
             { 0x75, 0x11, 0xB9 }
         };
-        UINT8 repl[][3] = {
+        STATIC UINT8 repl[][3] = {
             { 0x01, 0xEB, 0x61 },
             { 0x3E, 0x90, 0x90 },
             { 0xEB, 0x11, 0xB9 }
@@ -729,33 +729,33 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
                 DBG("SNBE_AICPUPatch (%d/7) not apply\n", i);
             }
         }
-        
-        UINT8 find_1[] = { 0xFF, 0x0F, 0x84, 0x2D };
-        UINT8 repl_1[] = { 0xFF, 0x0F, 0x85, 0x2D };
+
+        STATIC UINT8 find_1[] = { 0xFF, 0x0F, 0x84, 0x2D };
+        STATIC UINT8 repl_1[] = { 0xFF, 0x0F, 0x85, 0x2D };
         if (SearchAndReplace(Driver, DriverSize, find_1, sizeof(find_1), repl_1, 0)) {
             DBG("SNBE_AICPUPatch (4/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (4/7) not apply\n");
         }
 
-        UINT8 find_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x84 };
-        UINT8 repl_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x85 };
+        STATIC UINT8 find_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x84 };
+        STATIC UINT8 repl_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x85 };
         if (SearchAndReplace(Driver, DriverSize, find_2, sizeof(find_2), repl_2, 0)) {
             DBG("SNBE_AICPUPatch (5/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (5/7) not apply\n");
         }
-        
-        UINT8 find_3[] = { 0xC9, 0x74, 0x15, 0x0F, 0x32, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x48 };
-        UINT8 repl_3[] = { 0xC9, 0xEB, 0x15, 0x0F, 0x32, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x48 };
+
+        STATIC UINT8 find_3[] = { 0xC9, 0x74, 0x15, 0x0F, 0x32, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x48 };
+        STATIC UINT8 repl_3[] = { 0xC9, 0xEB, 0x15, 0x0F, 0x32, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x48 };
         if (SearchAndReplace(Driver, DriverSize, find_3, sizeof(find_3), repl_3, 0)) {
             DBG("SNBE_AICPUPatch (6/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (6/7) not apply\n");
         }
 
-        UINT8 find_4[] = { 0xC9, 0x74, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
-        UINT8 repl_4[] = { 0xC9, 0xEB, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
+        STATIC UINT8 find_4[] = { 0xC9, 0x74, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
+        STATIC UINT8 repl_4[] = { 0xC9, 0xEB, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
         if (SearchAndReplace(Driver, DriverSize, find_4, sizeof(find_4), repl_4, 0)) {
             DBG("SNBE_AICPUPatch (7/7) applied\n");
         } else {
@@ -763,12 +763,12 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
         }
     } else if (os_ver < AsciiOSVersionToUint64("10.14")) {
         // 10.13
-        UINT8 find[][3] = {
+        STATIC UINT8 find[][3] = {
             { 0x01, 0x74, 0x61 },
             { 0x3E, 0x75, 0x38 },
             { 0x75, 0x11, 0xB9 }
         };
-        UINT8 repl[][3] = {
+        STATIC UINT8 repl[][3] = {
             { 0x01, 0xEB, 0x61 },
             { 0x3E, 0x90, 0x90 },
             { 0xEB, 0x11, 0xB9 }
@@ -780,40 +780,40 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
                 DBG("SNBE_AICPUPatch (%d/7) not apply\n", i);
             }
         }
-        
-        UINT8 find_1[] = { 0xFF, 0x0F, 0x84, 0xD3 };
-        UINT8 repl_1[] = { 0xFF, 0x0F, 0x85, 0xD3 };
+
+        STATIC UINT8 find_1[] = { 0xFF, 0x0F, 0x84, 0xD3 };
+        STATIC UINT8 repl_1[] = { 0xFF, 0x0F, 0x85, 0xD3 };
         if (SearchAndReplace(Driver, DriverSize, find_1, sizeof(find_1), repl_1, 0)) {
             DBG("SNBE_AICPUPatch (4/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (4/7) not apply\n");
         }
-        
-        UINT8 find_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x84 };
-        UINT8 repl_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x85 };
+
+        STATIC UINT8 find_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x84 };
+        STATIC UINT8 repl_2[] = { 0x01, 0x00, 0x01, 0x0F, 0x85 };
         if (SearchAndReplace(Driver, DriverSize, find_2, sizeof(find_2), repl_2, 0)) {
             DBG("SNBE_AICPUPatch (5/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (5/7) not apply\n");
         }
-        
-        UINT8 find_3[] = { 0xC9, 0x74, 0x14, 0x0F, 0x32, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x6B };
-        UINT8 repl_3[] = { 0xC9, 0xEB, 0x14, 0x0F, 0x32, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x6B};
+
+        STATIC UINT8 find_3[] = { 0xC9, 0x74, 0x14, 0x0F, 0x32, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x6B };
+        STATIC UINT8 repl_3[] = { 0xC9, 0xEB, 0x14, 0x0F, 0x32, 0x25, 0xFF, 0x0F, 0x00, 0x00, 0x6B};
         if (SearchAndReplace(Driver, DriverSize, find_3, sizeof(find_3), repl_3, 0)) {
             DBG("SNBE_AICPUPatch (6/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (6/7) not apply\n");
         }
-        
-        UINT8 find_4[] = { 0xC9, 0x74, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
-        UINT8 repl_4[] = { 0xC9, 0xEB, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
+
+        STATIC UINT8 find_4[] = { 0xC9, 0x74, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
+        STATIC UINT8 repl_4[] = { 0xC9, 0xEB, 0x0C, 0x0F, 0x32, 0x83, 0xE0, 0x1F, 0x42, 0x89, 0x44, 0x3B };
         if (SearchAndReplace(Driver, DriverSize, find_4, sizeof(find_4), repl_4, 0)) {
             DBG("SNBE_AICPUPatch (7/7) applied\n");
         } else {
             DBG("SNBE_AICPUPatch (7/7) not apply\n");
         }
     }
-    
+
     if (Entry->KernelAndKextPatches->KPDebug) {
         gBS->Stall(5000000);
     }
@@ -828,31 +828,31 @@ VOID SNBE_AICPUPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32
 // find: 0x48, 0x81, 0xFB, 0x00, 0x00, 0x00, 0x40
 // repl: 0x48, 0x81, 0xFB, 0x00, 0x00, 0x00, 0x80
 //
-UINT8 BroadwellE_IOPCI_Find[] = { 0x48, 0x81, 0xFB, 0x00, 0x00, 0x00, 0x40 };
-UINT8 BroadwellE_IOPCI_Repl[] = { 0x48, 0x81, 0xFB, 0x00, 0x00, 0x00, 0x80 };
+STATIC UINT8 BroadwellE_IOPCI_Find[] = { 0x48, 0x81, 0xFB, 0x00, 0x00, 0x00, 0x40 };
+STATIC UINT8 BroadwellE_IOPCI_Repl[] = { 0x48, 0x81, 0xFB, 0x00, 0x00, 0x00, 0x80 };
 
 VOID BDWE_IOPCIPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 InfoPlistSize, LOADER_ENTRY *Entry)
 {
     UINTN count = 0;
-    
+
     DBG_RT(Entry, "\nBDWE_IOPCIPatch: driverAddr = %x, driverSize = %x\n", Driver, DriverSize);
     if (Entry->KernelAndKextPatches->KPDebug) {
         ExtractKextBundleIdentifier(InfoPlist);
     }
-    
+
     DBG_RT(Entry, "Kext: %a\n", gKextBundleIdentifier);
     //
     // now, let's patch it!
     //
     count = SearchAndReplace(Driver, DriverSize, BroadwellE_IOPCI_Find, sizeof(BroadwellE_IOPCI_Find), BroadwellE_IOPCI_Repl, 0);
-    
+
     if (count) {
         DBG_RT(Entry, "==> IOPCIFamily: %d replaces done.\n", count);
     }
     else {
         DBG_RT(Entry, "==> Patterns not found - patching NOT done.\n");
     }
-    
+
     if (Entry->KernelAndKextPatches->KPDebug) {
         gBS->Stall(5000000);
     }
@@ -878,7 +878,7 @@ VOID AnyKextPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 Inf
 {
   UINTN   Num = 0;
   INTN    Ind;
-  
+
   DBG_RT(Entry, "\nAnyKextPatch %d: driverAddr = %x, driverSize = %x\nAnyKext = %a\n",
          N, Driver, DriverSize, Entry->KernelAndKextPatches->KextPatches[N].Label);
 
@@ -914,7 +914,7 @@ VOID AnyKextPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 Inf
       DBG_RT(Entry, "%c", Entry->KernelAndKextPatches->KextPatches[N].Patch[Ind]);
     }
     DBG_RT(Entry, "' \n");
-    
+
     Num = SearchAndReplaceTxt((UINT8*)InfoPlist,
                            InfoPlistSize,
                            Entry->KernelAndKextPatches->KextPatches[N].Data,
@@ -922,7 +922,7 @@ VOID AnyKextPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 Inf
                            Entry->KernelAndKextPatches->KextPatches[N].Patch,
                            -1);
   }
-  
+
   if (Entry->KernelAndKextPatches->KPDebug) {
     if (Num > 0) {
       DBG_RT(Entry, "==> patched %d times!\n", Num);
@@ -940,17 +940,17 @@ VOID AnyKextPatch(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 Inf
 VOID KextPatcherRegisterKexts(FSINJECTION_PROTOCOL *FSInject, FSI_STRING_LIST *ForceLoadKexts, LOADER_ENTRY *Entry)
 {
   INTN i;
-  
+
   if (Entry->KernelAndKextPatches->KPATIConnectorsController != NULL) {
     ATIConnectorsPatchRegisterKexts(FSInject, ForceLoadKexts, Entry);
   }
-  
+
   for (i = 0; i < Entry->KernelAndKextPatches->NrKexts; i++) {
     FSInject->AddStringToList(ForceLoadKexts,
                               PoolPrint(L"\\%a.kext\\Contents\\Info.plist",
                                         Entry->KernelAndKextPatches->KextPatches[i].Name) );
   }
-  
+
 }
 
 //
@@ -960,7 +960,7 @@ VOID KextPatcherRegisterKexts(FSINJECTION_PROTOCOL *FSInject, FSI_STRING_LIST *F
 VOID PatchKext(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 InfoPlistSize, LOADER_ENTRY *Entry)
 {
   INT32 i;
-  
+
   if (Entry->KernelAndKextPatches->KPATIConnectorsController != NULL) {
     //
     // ATIConnectors
@@ -977,9 +977,9 @@ VOID PatchKext(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 InfoPl
       return;
     }
   }
-  
+
   ExtractKextBundleIdentifier(InfoPlist);
-  
+
   if (Entry->KernelAndKextPatches->KPAppleIntelCPUPM &&
       (AsciiStrStr(InfoPlist,
                    "<string>com.apple.driver.AppleIntelCPUPowerManagement</string>") != NULL)) {
@@ -1034,7 +1034,7 @@ VOID PatchKext(UINT8 *Driver, UINT32 DriverSize, CHAR8 *InfoPlist, UINT32 InfoPl
       }
     }
 //  }
-  
+
   //
   // Check for FakeSMC (InjectKexts if no FakeSMC)
   //
@@ -1071,43 +1071,43 @@ UINT64 GetPlistHexValue(CHAR8 *Plist, CHAR8 *Key, CHAR8 *WholePlist)
   UINTN     IDLen;
   CHAR8     Buffer[48];
   //static INTN   DbgCount = 0;
-  
+
   // search for Key
   Value = AsciiStrStr(Plist, Key);
   if (Value == NULL) {
     //DBG(L"\nNo key: %a\n", Key);
     return 0;
   }
-  
+
   // search for <integer
   IntTag = AsciiStrStr(Value, "<integer");
   if (IntTag == NULL) {
     DBG(L"\nNo integer\n");
     return 0;
   }
-  
+
   // find <integer end
   Value = AsciiStrStr(IntTag, ">");
   if (Value == NULL) {
     DBG(L"\nNo <integer end\n");
     return 0;
   }
-  
+
   if (Value[-1] != '/') {
-    
+
     // normal case: value is here
     NumValue = AsciiStrHexToUint64(Value + 1);
     return NumValue;
-    
+
   }
-  
+
   // it might be a reference: IDREF="173"/>
   Value = AsciiStrStr(IntTag, "<integer IDREF=\"");
   if (Value != IntTag) {
     DBG(L"\nNo <integer IDREF=\"\n");
     return 0;
   }
-  
+
   // compose <integer ID="xxx" in the Buffer
   IDStart = AsciiStrStr(IntTag, "\"") + 1;
   IDEnd = AsciiStrStr(IDStart, "\"");
@@ -1130,14 +1130,14 @@ UINT64 GetPlistHexValue(CHAR8 *Plist, CHAR8 *Key, CHAR8 *WholePlist)
    DBG(L"Searching: '%a'\n", Buffer);
    }
    */
-  
+
   // and search whole plist for ID
   IntTag = AsciiStrStr(WholePlist, Buffer);
   if (IntTag == NULL) {
     DBG(L"\nNo %a\n", Buffer);
     return 0;
   }
-  
+
   // got it. find closing >
   /*
    if (DbgCount < 3) {
@@ -1154,10 +1154,10 @@ UINT64 GetPlistHexValue(CHAR8 *Plist, CHAR8 *Key, CHAR8 *WholePlist)
     DBG(L"\nInvalid <integer IDREF end\n");
     return 0;
   }
-  
+
   // we should have value now
   NumValue = AsciiStrHexToUint64(Value + 1);
-  
+
   /*
    if (DbgCount < 3) {
    AsciiStrnCpy(Buffer, IntTag, sizeof(Buffer) - 1);
@@ -1166,7 +1166,7 @@ UINT64 GetPlistHexValue(CHAR8 *Plist, CHAR8 *Key, CHAR8 *WholePlist)
    }
    DbgCount++;
    */
-  
+
   return NumValue;
 }
 
@@ -1208,10 +1208,10 @@ VOID PatchPrelinkedKexts(LOADER_ENTRY *Entry)
   //INTN      DbgCount = 0;
   UINT32    KextAddr;
   UINT32    KextSize;
-  
-  
+
+
   WholePlist = (CHAR8*)(UINTN)PrelinkInfoAddr;
-  
+
   //
   // Detect FakeSMC and if present then
   // disable kext injection InjectKexts().
@@ -1222,12 +1222,12 @@ VOID PatchPrelinkedKexts(LOADER_ENTRY *Entry)
   // But searching through the whole prelink info
   // works and that's the reason why it is here.
   //
-  
+
   //Slice
   // I see no reason to disable kext injection if FakeSMC found in cache
   //since rev4240 we have manual kext inject disable
   CheckForFakeSMC(WholePlist, Entry);
-  
+
   DictPtr = WholePlist;
   while ((DictPtr = AsciiStrStr(DictPtr, "dict>")) != NULL) {
     if (DictPtr[-1] == '<') {
@@ -1238,16 +1238,16 @@ VOID PatchPrelinkedKexts(LOADER_ENTRY *Entry)
         InfoPlistStart = DictPtr - 1;
       }
     } else if (DictPtr[-2] == '<' && DictPtr[-1] == '/') {
-      
+
       // closing dict
       if (DictLevel == 2 && InfoPlistStart != NULL) {
         // kext end
         InfoPlistEnd = DictPtr + 5 /* "dict>" */;
-        
+
         // terminate Info.plist with 0
         SavedValue = *InfoPlistEnd;
         *InfoPlistEnd = '\0';
-        
+
         // get kext address from _PrelinkExecutableSourceAddr
         // truncate to 32 bit to get physical addr
         KextAddr = (UINT32)GetPlistHexValue(InfoPlistStart, kPrelinkExecutableSourceKey, WholePlist);
@@ -1256,9 +1256,9 @@ VOID PatchPrelinkedKexts(LOADER_ENTRY *Entry)
         KextAddr += KernelSlide;
         // and adjust for AptioFixDrv's KernelRelocBase
         KextAddr += (UINT32)KernelRelocBase;
-        
+
         KextSize = (UINT32)GetPlistHexValue(InfoPlistStart, kPrelinkExecutableSizeKey, WholePlist);
-        
+
         /*if (DbgCount < 3
          || DbgCount == 100 || DbgCount == 101 || DbgCount == 102
          ) {
@@ -1267,7 +1267,7 @@ VOID PatchPrelinkedKexts(LOADER_ENTRY *Entry)
          gBS->Stall(20000000);
          }
          */
-        
+
         // patch it
         PatchKext(
                   (UINT8*)(UINTN)KextAddr,
@@ -1276,7 +1276,7 @@ VOID PatchPrelinkedKexts(LOADER_ENTRY *Entry)
                   (UINT32)(InfoPlistEnd - InfoPlistStart),
                   Entry
                   );
-        
+
         // return saved char
         *InfoPlistEnd = SavedValue;
         //DbgCount++;
@@ -1302,16 +1302,16 @@ VOID PatchLoadedKexts(LOADER_ENTRY *Entry)
 	struct OpaqueDTPropertyIterator OPropIter;
 	DTPropertyIterator	PropIter = &OPropIter;
 	//UINTN               DbgCount = 0;
-  
-  
+
+
   DBG(L"\nPatchLoadedKexts ... dtRoot = %p\n", dtRoot);
-  
+
   if (!dtRoot) {
     return;
   }
-  
+
   DTInit(dtRoot);
-  
+
   if (DTLookupEntry(NULL,"/chosen/memory-map", &MMEntry) == kSuccess) {
     if (DTCreatePropertyIteratorNoAlloc(MMEntry, PropIter) == kSuccess) {
       while (DTIterateProperties(PropIter, &PropName) == kSuccess) {
@@ -1320,15 +1320,15 @@ VOID PatchLoadedKexts(LOADER_ENTRY *Entry)
           // PropEntry _DeviceTreeBuffer is the value of Driver-XXXXXX property
           PropEntry = (_DeviceTreeBuffer*)(((UINT8*)PropIter->currentProperty) + sizeof(DeviceTreeNodeProperty));
           //if (DbgCount < 3) DBG(L"%a: paddr = %x, length = %x\n", PropName, PropEntry->paddr, PropEntry->length);
-          
+
           // PropEntry->paddr points to _BooterKextFileInfo
           KextFileInfo = (_BooterKextFileInfo *)(UINTN)PropEntry->paddr;
-          
+
           // Info.plist should be terminated with 0, but will also do it just in case
           InfoPlist = (CHAR8*)(UINTN)KextFileInfo->infoDictPhysAddr;
           SavedValue = InfoPlist[KextFileInfo->infoDictLength];
           InfoPlist[KextFileInfo->infoDictLength] = '\0';
-          
+
           PatchKext(
                     (UINT8*)(UINTN)KextFileInfo->executablePhysAddr,
                     KextFileInfo->executableLength,

 

 

Edited by TheRacerMaster

Share this post


Link to post
Share on other sites
Posted (edited)

Clover 4482 has broken kext injection of my ApplePS2SmartTouchPad.kext so i have no touchpad. External mouse works fine but trackpad is no longer detected. Was working fine with 4480 not sure about 4481 as i don't have it.

Edited by SavageAUS

Share this post


Link to post
Share on other sites
Posted (edited)

32-bit builds appear to be broken with GCC 8:

Clover/rEFIt_UEFI/Platform/AcpiPatcher.c:222:22: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
       gBS->FreePages((EFI_PHYSICAL_ADDRESS)XsdtEntryFromIndex(Index), XsdtReplaceSizes[Index]);
                      ^
#define XsdtEntryFromIndex(index) (EFI_ACPI_DESCRIPTION_HEADER*)(UINTN)ReadUnaligned64(XsdtEntryPtrFromIndex(index))

EFI_PHYSICAL_ADDRESS is 64-bit, so this is casting from a 32-bit pointer to a 64-bit integer.

 

Also, r4482's plist.c changes (specifically, the "end of cache" freeing) appear to cause memory corruption. Removing this fixes kext injection issues (plist.c memory corruption causes some kext versions to display <null string> in bdmesg).

Edited by TheRacerMaster

Share this post


Link to post
Share on other sites
1 hour ago, TheRacerMaster said:

32-bit builds appear to be broken with GCC 8:


Clover/rEFIt_UEFI/Platform/AcpiPatcher.c:222:22: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
       gBS->FreePages((EFI_PHYSICAL_ADDRESS)XsdtEntryFromIndex(Index), XsdtReplaceSizes[Index]);
                      ^

#define XsdtEntryFromIndex(index) (EFI_ACPI_DESCRIPTION_HEADER*)(UINTN)ReadUnaligned64(XsdtEntryPtrFromIndex(index))

EFI_PHYSICAL_ADDRESS is 64-bit, so this is casting from a 32-bit pointer to a 64-bit integer.

 

Also, r4482's plist.c changes (specifically, the "end of cache" freeing) appear to cause memory corruption. Removing this fixes kext injection issues (plist.c memory corruption causes some kext versions to display <null string> in bdmesg).

Thanks,

STATIC arrays accepted in 4484,

plist.c fixed in 4483.

EFI_PHYSICAL_ADDRESS will be fixed.  EDITED: 4485

Share this post


Link to post
Share on other sites

Hi,

it appears that 

        <key>FakeID</key>
        <dict>
            <key>LAN</key>
            <string>0x435411ab</string>
        </dict>

is broken since rev 4497

OK with 4495.

Is it a bug in new injection method ?

 

Share this post


Link to post
Share on other sites

Zenith432, why did you change architecture 32+64 to 64 in clover utilities? This breaks 32-bit compilation I still use. 10.14 has nothing to do to fat binaries, please revert the change back.

Share this post


Link to post
Share on other sites
Posted (edited)
9 hours ago, vit9696 said:

Zenith432, why did you change architecture 32+64 to 64 in clover utilities? This breaks 32-bit compilation I still use. 10.14 has nothing to do to fat binaries, please revert the change back.

Explained here

Which compilation did it break?

 

FWIW: I know why 32-bit build of clover-genconfig defines MDE_CPU_X64.  It's because in project.pbxproj, HEADER_SEARCH_PATHS is always MdePkg/Include/X64, so ProcessorBind.h is taken from there and code always uses 64 EDK2 defs.  In particular, the lines

Quote
#if defined(MDE_CPU_IA32)
printf("32 bit generator\n");
#elif defined(MDE_CPU_X64)
printf("64 bit generator\n");

in clover-genconfig.c are a joke.

 

PS: So it seems even 32-bit build of clover-genconfig wants to parse binary format of SETTINGS_DATA used by 64-bit Clover.  Is this right?  Are we looking for version to parse SETTINGS_DATA for 32-bit Clover?  Should 32-bit support be fully discontinued?  I need to know what the intention was to decide on resolution.

 

PPS: Including X64 version of ProcessorBind.h is 32-bit build of clover-genconfig cannot work anyway.  The struct SETTINGS_DATA has pointers in it, which are a different size, so 32-bit build will not end up with correct structure for 64-bit Clover.

 

@Slice: did you bother to test new code in r4501?  I see in main() in clover-genconfig.c call to GetOFVariable("device-properties", ...) which uses global gPlatform before it's been initialized.

Edited by Zenith432

Share this post


Link to post
Share on other sites

@Zenith432, the obvious issue here is that you enforced clover-genconfig being 64-bit, and thus it does not run on a 32-bit only CPU (and yes, that is my case, which I still rarely use for testing some really old legacy projects). So it is very clear how and why this is broken :).

 

Sure, nobody did request you to support a 32-bit only binary (which I agree is inadequate), yet a fat binary should successfully be able to generate a 32-bit config on a 32-bit only system, and a 64-bit config on a 64-bit system. For hybrid ones there have always been an arch util (man arch).

 

To fix the actual header paths bug you need to change the Xcode project header inclusion paths. If you click on + in Xcode project prefs it would let you define different header paths depending on the architecture. This should have been done right previously, yet some crazy attempts to make it "64-bit only" must have borked it.

 

Thanks~

Share this post


Link to post
Share on other sites

The 32-bit build of clover-genconfig didn't work before.  It was built, but it didn't do anything. It used arch i386 and X64/ProcessorBind.h which gives a different sizeof(SETTINGS_DATA) than compiling with arch x86_64.  In clover-genconfig.c there is a sanity check for sizeof(SETTINGS_DATA) being the same as the size of the data being parsed and it exited with an error message.

The reason for removal of 32-bit build was that after reversion of MdePke/Include/Base.h, it needs MDE_CPU_IA32 for arch i386 or it generates a compile error.  Right now, both xcodeproj and Makefile for clover-genconfig do not result in any errors, but do not build 32-bitnary either.

I'll only have access to macos on Monday, but when I do I'll change xcodeproj to use IA32/ProcessorBind.h for arch i386, return 32-bit into fat binary.  It is the only workable solution, because hybrid option does not yield a usable program.

Share this post


Link to post
Share on other sites
On 5/26/2018 at 8:19 AM, Zenith432 said:

 

@Slice: did you bother to test new code in r4501?  I see in main() in clover-genconfig.c call to GetOFVariable("device-properties", ...) which uses global gPlatform before it's been initialized.

4501 is not working version. I commit it to have an ability get my draft from other place.

I want to seriously advance clover-genconfig.

Share this post


Link to post
Share on other sites
On 5/26/2018 at 2:28 AM, Mr MagOO said:

Hi,

it appears that 

        <key>FakeID</key>
        <dict>
            <key>LAN</key>
            <string>0x435411ab</string>
        </dict>

is broken since rev 4497

OK with 4495.

Is it a bug in new injection method ?

 

@Slice : is there a chance the FakeID injection is broken or do I need to change syntax or something to make it work post rev 4496 ?

Share this post


Link to post
Share on other sites
6 hours ago, Mr MagOO said:

@Slice : is there a chance the FakeID injection is broken or do I need to change syntax or something to make it work post rev 4496 ?

Yes, you have to add

Quote

    <key>Devices</key>
    <dict>

        <key>LANInject</key>
        <true/>

 

Sorry for the back incompatibility.

I have to disable automatic injection to not mix with new method of Properties injection.

Share this post


Link to post
Share on other sites

@Slice

The latest config-sample.plist you committed has embedded nulls in it.  For example, after the string "Apple WiFi card".  There are others.

Also, the file was previously sorted.  It makes it hard to merge changes when each commit is randomly sorted from previous one.

Share this post


Link to post
Share on other sites
Posted (edited)
15 hours ago, Slice said:

Yes, you have to add

Sorry for the back incompatibility.

I have to disable automatic injection to not mix with new method of Properties injection.

 

Well, something is really happening with LANInjection=true ...

but I don't know what because I lost my video with a black screen boot :)

I've got this in Devices and Graphics :

	<key>Devices</key>
	<dict>
		<key>Audio</key>
		<dict>
			<key>Inject</key>
			<string>no</string>
		</dict>
        <key>LANInjection</key>
		<true/>
		<key>FakeID</key>
		<dict>
			<key>LAN</key>
			<string>0x435411ab</string>
		</dict>
		<key>USB</key>
		<dict>
			<key>AddClockID</key>
			<true/>
			<key>FixOwnership</key>
			<true/>
			<key>HighCurrent</key>
			<true/>
			<key>Inject</key>
			<true/>
		</dict>
	</dict>

	<key>Graphics</key>
	<dict>
		<key>Inject</key>
		<dict>
			<key>ATI</key>
			<false/>
			<key>Intel</key>
			<false/>
			<key>NVidia</key>
			<true/>
		</dict>
		<key>NvidiaGeneric</key>
		<true/>
		<key>VideoPorts</key>
		<integer>3</integer>
	</dict>

Is there any change for video injection ?

edit : {censored}, my fault, all is OK now with rev 4507.

Thank you Slice!

 

Edited by Mr MagOO

Share this post


Link to post
Share on other sites
3 hours ago, Zenith432 said:

@Slice

The latest config-sample.plist you committed has embedded nulls in it.  For example, after the string "Apple WiFi card".  There are others.

Also, the file was previously sorted.  It makes it hard to merge changes when each commit is randomly sorted from previous one.

It is PlistEditPro mischief. I corrected this in 4507. I will no more use this strange application.

Share this post


Link to post
Share on other sites
5 hours ago, Zenith432 said:

@Slice

The latest config-sample.plist you committed has embedded nulls in it.  For example, after the string "Apple WiFi card".  There are others.

 

It looks like nulls are known problem

Quote

  CopyMem(configBuffer, buffer, bufferSize);
  for (i=0; i<bufferSize; i++) {
    if (configBuffer == 0) {
      configBuffer = 0x20;  //replace random zero bytes to spaces
    }
  }

 

But I am not sure if this is good solution. Anyway we live with this workaround some years.

Share this post


Link to post
Share on other sites
13 hours ago, Zenith432 said:

@Slice

The latest config-sample.plist you committed has embedded nulls in it.  For example, after the string "Apple WiFi card".  There are others.

 

clover-genconfig corrected to not produce nulls. rev 4508.

 

Sorry about 32 bits, Xcode 9.3.1 don't like it.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By gengik84
      Ciro82==>>Thanks
      Uno dei tre Requisiti:
      Hack funzionante Mac vero Macchina virtuale Impostazioni Bios per il boot:
      Cercate una voce  del tipo “Sata Mode”e settatela  in AHCI
      Secure Boot: disabilitare o altri sistemi operativi
      CSM: UEFI o LEGACY, oppure a secondo del tipo di installazione
      VT-x / VT-d disable
      *Nota: Secure boot e csm valido solo per bios UEFI
      Materiale Occorrente 
      "OS X (Versione App.Store)”
      USB 8GB  *nota: nel caso di usb superiori dovrà essere partizionata, in modo da avere una partizione su cui "lavoreremo,di questa dimensione
      ShowAllfiles 
      kext Wizard 
      Bootloader Clover_2.3k_r xxx:                   http: //sourceforge.n.../cloverefiboot/
      Clover Configurator:                                    http: //mackie100proj...a.org/download/
      FakeSmc.kext:                                            https://github.com/kozlek/HWSensors/releases
      In allegato,a fondo pagina troverete un "pacchetto" contenente : ShowAllfiles, Kext Wizard, FakeSmc.kext: 
      App alternative:
      ESP Mounter Pro: per montare la partizione EFI
      Vi illustrerò tre metodi per creare la usb, ma sono ben distinti… quindi usatene soltanto uno
      Metodo 1: “Install Mac_OS_X.command” Metodo 2: “Create Install Media di Apple” Metodo 3:  Metodo Manuale Alla fine delle preparazione dell’installer, tutti i metodi necessitano l’installazione del Bootloader Clover sulla a vostra USB.
      “CONDIZIONI OBBLIGATORIE”
      PUNTO 1: che la vostra usb sia stata preventivamente nominata USB (caratteri maiuscoli) Tabella di partizione GUID e la formattazione in  Mac esteso Journaled.
      PUNTO 2: che l’installer di OSX si trovi in Applicazioni
      Utility Disco 
      Selezionate la pendrive, andate su “partizione”, selezionate “1 partizione”, impostate Mac OS esteso journaled e date il nome USB, poi in basso cliccate su opzioni e scegliete Tabella partizione (GUID), poi “applica”.
      Immagine 
      Riporto nuovamente l’operazione sopra citata adoperando dal nuovo Utility Disco introdotto su El Capitan.
      Rimane ovviamente invariato nome della usb in ==>> USB (maiuscolo), la formattazione in Mac esteso Journaled e sia la mappa partizione in GUID
      Da utility disco selezionate la usb, cliccate su inizializza.
      dal menù a tendina scegliete la relative impostazioni
      Immagine  
      Procedura effettua da High Sierra è la stessa della precedente, l'unica attenzione e operazione da aggiungere in primis  è cliccare nel menù a tendina in alto sulla sinistra di utility disco e selezionare "mostra tutti i dispositivi"
      Immagine 
       
      =====================
        METODO 1: "Install_Mac_OS_X.Command" Lo script che trovate allegato in fondo alla guida permette la creazione dell’installer in maniera automatica
      Include la possibilità di scelta di tre versioni di osx
      Yosemite El Capitan Sierra Il risultato finale è come quello del metodo "manuale" descritto nella guida, per cui l'installazione avverrà in un solo passaggio, non in due come con il metodo createinstallmedia. 
      Offre inoltre la possibilità di inserire un kernel patchato, utile, per esempio, per chi usa AMD.
      Rimane invariato il nome dato alla usb in USB, mappa partizione e tipo di formattazione
      Se la vostra usb non sarà rinominata nel modo corretto, verrete avvisati dal terminale, quindi non dovrete far altro che apportare la relativa modifica e rilanciare nuovamente lo script
      Esempio
      ===========================
      Metodo 2 
      L'intento è quello di usare la procedura fornitaci direttamente da Apple, "createinstallmedia", introdotta  con Mavericks. 
      Tale metodo prevede l’uso del terminale che via via se ne sta perdendo il “valore e l’uso”
      Inizialmente per i neofiti potrà sembrare problematico ma alla fine non è così.
      Durante il post installazione alcune operazioni ne richiedono l’ uso.
      Perciò mi sono chiesto perchè, qualora uno volesse, non far conoscere da subito un po’ questo “strumento”???
      Per favorirvi vi ho allegato i comandi già  “pronti”, i quali li potrete copiare ed incollare sul terminale.
      A questo punto aprite il terminale, copiate ed incollate il comando sottostante e premete invio, digitate la vostra password e premete nuovamente invio.
      Comando per creare USB con Yosemite:
      sudo /Applications/Install\ OS\ X\ Yosemite.app/Contents/Resources/createinstallmedia --volume /Volumes/USB --applicationpath /Applications/Install\ OS\ X\ Yosemite.app --nointeraction  
      Comando per creare USB con El Capitan
      sudo /Applications/Install\ OS\ X\ El\ Capitan.app/Contents/Resources/createinstallmedia --volume /Volumes/USB --applicationpath /Applications/Install\ OS\ X\ El\ Capitan.app --nointeraction Comando per creare USB con Sierra 
      sudo /Applications/Install\ macOS\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/USB --applicationpath /Applications/Install\ macOS\ Sierra.app/ --nointeraction Per creare USB con Hight Sierra o Mojave usate --> C_I_M (aggiornato per 10.14)
       
      Funziona con il drag & drop sul terminale, in questo caso non vi è necessità che la usb sia nominata in un determinato modo ed essendo basato su create install media ovviamente funziona da 10.9 a 10.14.... 
      BENE…IL PROCESSO DI CREAZIONE E’ INIZIATO…
      AVREMO CIRCA 20/30 MINUTI DI TEMPO LIBERO A CUI DEDICARSI A CIO’ CHE VOGLIAMO………………………………………..  
      COLGO L’OCCASIONE PER FARVI NOTARE LA VELOCITA’ E LA SICUREZZA DI QUESTO METODO
      CONFRONTATE QUESTO CON IL TERZO METODO E NOTERETE CHE CON UN SOLO PASSAGGIO, OSSIA IL COMANDO DATO AL TERMINALE, FACCIAMO IN UNA SINGOLA OPERAZIONE TUTTI I VARI STEP DESCRITTI SULL’ ALTRO METODO.
      DETTO QUESTO, MOLTO IMPORTANTE E’ SOTTOLINEARE CHE COSI’ FACENDO EVITEREMO ERRORI  DI DISTRAZIONE RIGUARDO AI PASSAGGI O FRAINTENDIMENTI.
      Immagine 
      Potete adesso passare ad installare il bootloader Clover sulla vostra usb.
      *NOTA*:
      Avendo usato questo metodo l'installazione si dividerà in due fasi, perciò dopo il primo riavvio e necessario far partire nuovamente l'installer, selezionare lo stesso disco senza formattarlo.
      Finita questa ulteriore fase , l'installazione sarà terminata
      =========================
      METODO "MANUALE"....  (lascio per futura memoria-Compatibile fino a 10.12)
      ==========================
      Bootloader
      **Nota:** Installazione in UEFI  dipenderà dalla scheda madre in vostro possesso, quindi se non supporta tale opzione , il bootloader dovrà essere installato in  modalità Legacy.
       Vi invito, qualora non sapeste questa informazione, a recarvi nel sito ufficiale del produttore e controllare le informazioni a riguardo
      Fatto questo dobbiamo installare  Clover sulla usb.
      A seconda del tipo di Bios o al tipo di installazione che vogliamo fare UEFI o Legacy avremo ovviamente configurazioni diverse in questa fase.
      Lanciate il pkg.
      Immagine 

       
      Cambiate la destinazione di installazione ad USB oppure Install Mac_OS_X (a secondo del tipo di creazione eseguita)
      Successivamente clicchiamo su "Ad Hoc"
      Per Installazione UEFI
      Mettete i flag   : Installazione solo per avvio UEFI
                               : installare Clover nella ESP
                               : Driver64UEFI  selezionate OsxAptioFixDrv-64
                             *  :Se nel vostro sistema è presente una scheda grafica (discreta) della serie 9xx nVidia selezionate OsxAptioFix2Drv-64 al posto di  OsxAptioFixDrv-64 *
      ** OsxAptioFix2Drv :E' necessario per poter impostare CsrActiveConfig= 0x3 **
      ***OsxAptioFix3Drv oppure AptioMemory --> (consigliato) devono essere usati su hardware Skylake o successivi perché permettono alla nvram di lavorare correttamente
           (mi raccomando o uno o l'altro)
      Proseguite con l’installazione.
      Immagine 
      ** Ricordate che avrete accesso a questa cartella dopo aver montato la partizione EFI**
      ===========================
      Per installazione Legacy
      Immagine 
      ===========================
      Impostazione per config.plist:
      Con clover configurator “montate” la partizione EFI della usb.
      1) Per fare questo nel menù di sinistra, cliccate su “Mount EFI”
      2) individuate la partizione relativa alla vostra usb, a questo punto montiamo la relativa partizione EFI  selezionando l’apposito pulsante “Mount Partition”
      Immagine 
      3) Successivamente cliccate su “Open Partition”.. recatevi in EFI/Clover ed aprite il config.plist
      4) Sezione ACPI: Disabilitate tutti i fix sia del menù 1 che del menù 2
      Immagine 
      5) Sezione BOOT: Sole se si sta installando Yosemite mettete il flag su kext-dev-mode=1
      Immagine 
      6) Sezione RT Variables: Se si sta installando El Capitan oppure Sierra, aggiungere i valori: BooterConfig= 0x28, CsrActiveConfig= 0x67
      Immagine 
      7) Sezione System Parameters: Su inject kext mettete YES
      Immagine 
      ===========================
      Nota: Su El Capitan, è stato introdotto SIP (System Integrity Protection)
      Info:
      ===========================
      Recatevi in EFI/Clover/kext/10.x 
      X= alla versione di osx che state installando. Per esempio se installerete Yosemite dovrete recarvi nella cartella 10.10, con El Capitan in 10.11….ecc
      Se non ci fosse tale cartella, createla e nominatela voi a “modo”.
      Copiatevi all’interno FakeSmc.kext
      *Nota se venite già da altre vostre configurazioni, oltre kext sopra citato ,potete mettere gli altri necessari per il vostro hardware
      Stessa cosa se avete DSDT e/o SSDT potete copiarli in EFI/Clover/Acpi/Patched
      Immagine 
      
      Per High Sierra:
      Scaricare il driver apfs.efi a fine guida, collocarlo:
          --> EFI/clover/Driver64UEFI se stiamo usando UEFI
      --> EFI/Clover/Driver64 se stiamo usando Legacy
       
      Per chi volesse continuare ad usare HFS vi rimando a questo post:
        Come installare High Sierra in HFS direttamente dalla usb  
      Utenti Laptop:  Nel 99% è obbligatorio disattivare la grafica discreta Nvidia/Amd per installare questo nuovo osx
                                     Quindi aggiungete --> SSDT-Disable_DGPU.aml.zip
                                     in EFI/Clover/acpi/Patched della usb
      --------------------------------------------------------------------
      Per Mojave:
      Scaricare il driver apfs.efi per 10.14 a fine guida, collocarlo:
          --> EFI/clover/Driver64UEFI se stiamo usando UEFI
      --> EFI/Clover/Driver64 se stiamo usando Legacy
      Versione di clover non antecedente a V_4015
      Volete usare HFS?
      E' possibile fare un installazione diretta su altro disco o partizione
      nel caso guardate...
       Mojave in HFS 
       
       
       
      Fatto questo avrete la vostra USB bootable per installare OSX.
      ………Non scordatevi Fakesmc.kext da mettere nella relativa cartella…. senza il quale non farete mai il Boot......
      *NOTA: se usato il terminale per la creazione della usb, l'installazione si dividerà in due fasi, perciò dopo il primo riavvio e necessario far partire nuovamente l'installer, selezionare lo stesso disco senza formattarlo.
      Finita questa ulteriore fase , l'installazione sarà terminata
      **NOTA** Se avete processori Broadwell,Skylake o Kabylake...usate FakeSmc.kext e relativi sensors che trovate all'interno del secondo pacchetto.. (potete usarlo anche sui precedenti senza problemi, essendo una versione più aggiornata ha ulteriore supporto per le cpu più recenti)
      Update: Fakesmc e sensors versione 6.26
      Post installazione... post #2           
       Buon Hack….. 
      Aggiornamento:Install_Mac_OS_X.command.zip (compatibile da 10.10 a 10.12)
      le info le trovate a questo post
      Ringrazio @Ciro82 che mi ha aiutato nel preparare questa guida.
      Pacchetto.zip
      Pacchetto-2.zip
      apfs.efi-10.13-NoLog.zip
      Pacchetto-Fake+Sensors 6.26.1440.zip
      apfs.efi-10.13.1-No_LOG.zip
      apfs.efi-10.13.2_No_Log.zip
      apfs.efi-10.13.3-No_Log.zip
      apfs.efi-10.13.4-No_Log.zip
      apfs.efi-10.13.5_No_Log.zip
      C_I_M.zip
       
      apfs.efi-10.14-beta1_No_Log.zip
    • By fusion71au
      Run Vanilla OS X El Capitan, Sierra, High Sierra or Mojave in VirtualBox 5.x.x on a Windows Host
      Following on from my previous guide on how to create a VMware virtual machine running Vanilla OS X El Capitan in Windows, I’ve decided to write a similar guide for creating a VirtualBox El Capitan VM. 
       
      The virtual machine should be useful for testing El Capitan and also for creating installers for use on a real machine/hackintosh.
       
      There are other tutorials and videos on the net about running OS X on Windows machines using pre-made VMDK disk images but you can never guarantee what else is in there….
       
      I’ve gathered info for this guide from several threads in the Multibooting and Virtualisation section of this forum and also the wider internet eg
       
      @colt2 HOW TO: Create a bootable El Capitan ISO for VMware
      @dsmccombs comment on faking Ivybridge Processor
      @E:V:A http://forum.xda-developers.com/showpost.php?p=55572430&postcount=6
      @Tech Reviews video tutorial https://www.youtube.com/watch?v=t7X07U63lwg.
      VirtualBox Forum: Status of OSX on OSX
       
      Requirements
         Intel PC with four or more CPU cores running Windows 7 X64 or later OS (2 or more cores needed for OS X)    4GB or more RAM (2GB or more will be needed for OS X)    Hard Disk with at least 40GB free for Virtual Machine    Oracle VM VirtualBox v 5.0.34    Install OS X El Capitan app and Mac or Hack to prepare installation iso <-- Now, no longer necessary to have previous access to a Mac or Hack by building the Installer.app from scratch - see post#75    16GB or larger exFAT formatted USB stick to transfer El Capitan iso from Mac/Hack to Host PC  
      Prepare Installation ISO on your Mac or Hack
      1.  On your Mac or Hack, download "Install OS X El Capitan.app" from the App Store into your Applications folder.
      2.  Download and unzip the CECI.tool (attached to this post) into your ~/Downloads folder. The commands in this executable script are shown below for informational purposes.  Note: you will need approx 16GB of free space on your hard disk for the script to complete.
       
       
       
      3.  Open OS X terminal, then run the following commands to execute the script:
      cd downloads chmod +x CECI.tool ./CECI.tool 4.  At the end of the process, you will have an El Capitan iso on your desktop - copy this onto an exFAT formatted USB for use on the PC Host later.
       
       
      Create an El Capitan Virtual Machine in VirtualBox
      1.  Open the VirtualBox program and click the "New" button to create a new VM.
       

       
      2.  Select Mac OS X and Mac OS X 10.11 El Capitan (64 -bit) for Operating System type and version.  I named my Virtual Machine "El_Capitan", then clicked next...
       

       
      3.  Leave the Memory size at the recommended 2048 MB, then click next.
       

       
      4.  Choose to "Create a virtual hard disk now", then click the create button.
       

       
      5.  For the hard disk file type, the default is VDI (VirtualBox Disk Image) but I have selected VMDK for inter-operability with VMWare.  Click next...
       

       
      6.  For Storage on physical hard disk, I have chosen the default Dynamically allocated (grows larger to a set limit as you need more disk space).
       

       
      7.  On the File location and size screen, you can set the location of the new virtual hard disk and its size - I recommend changing disk size to 40GB or larger.  When you click the create button, you will now see your new VM in the VirtualBox main GUI.
       

       
      8.  Click the settings button on the Main Menu to tweak a few settings....
         a.  On the System/Motherboard tab in Boot Order, you can uncheck the Floppy Drive (who has these now?)
       

       
         b.  On the System/Processor tab, you can increase the allocated CPU cores to 2
       

       
         c.  On the Display tab, you can increase the allocated Video Memory to 128MB
       

       
         d.  On the Storage tab, click on the icon of the Optical Drive and select "Choose Virtual Optical Disk File". 
       

       
      Navigate and select the El Capitan ISO we created earlier...
       

       
         e.  Click the OK button to finalise the VM settings.
       
       
      Patch El Capitan vbox configuration file with DMI Settings from a Mac
      1.  From the start menu, type cmd and click run as administrator to open an administrative command prompt. 
       

       
      2.  Choose a Mac Model similar to your host system, then type the following lines, followed by <enter>  after each line.  Make sure you first close all VirtualBox Windows and the VirtualBox program, otherwise any changes you make won't stick...
       
      Eg iMac11,3
      cd "C:\Program Files\Oracle\VirtualBox\" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "iMac11,3" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/efi/0/Config/DmiSystemVersion" "1.0" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "Mac-F2238BAE" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/smc/0/Config/DeviceKey" "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" 1 MacBookPro11,3
      cd "C:\Program Files\Oracle\VirtualBox\" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "MacBookPro11,3" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/efi/0/Config/DmiSystemVersion" "1.0" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "Mac-2BD1B31983FE1663" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/smc/0/Config/DeviceKey" "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" 1 Macmini6,2
      cd "C:\Program Files\Oracle\VirtualBox\" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/efi/0/Config/DmiSystemProduct" "Macmini6,2" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/efi/0/Config/DmiSystemVersion" "1.0" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/efi/0/Config/DmiBoardProduct" "Mac-F65AE981FFA204ED" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/smc/0/Config/DeviceKey" "ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC" 1 3.  Optional- For some host systems eg those with Haswell and newer CPUs, you might have to spoof an older CPU to avoid VirtualBox errors.  You can try from one of the following if this happens:

      To spoof Lynnfield i5 750 CPU
      VBoxManage.exe modifyvm "El_Capitan" --cpuidset 00000001 000106e5 06100800 0098e3fd bfebfbff To spoof IvyBridge CPU
      VBoxManage.exe modifyvm "El_Capitan" --cpuidset 00000001 000306a9 04100800 7fbae3ff bfebfbff or
      VBoxManage.exe modifyvm "El_Capitan" --cpuidset 00000001 000306a9 00020800 80000201 178bfbff 4.  Close the command prompt window.
       
       
      Installation of El Capitan
      We are now ready to start the El_Capitan Virtual Machine....
       



       
      Installation should be relatively straight forward, just following the prompts of the OS X installer:
      1.  Select language, agree to legal terms
       

       
      2.  Use Disk Utility from the Utilities Menu to erase and format the virtual hard drive as a single partition GUID Mac OS X Extended.  I named my drive "Macintosh HD" but you can enter whatever you like eg El_Capitan.
       

       
      3.  Quit DU and choose Macintosh HD to install El Capitan on.
      4.  After 20-30 min (depending on how fast your system is), the installation will complete.  At this point, unmount the El Capitan ISO by clicking the Devices menu from the VM window, click Optical Drives, then choose Remove disk from virtual drive.  The VM is now ready to reboot into OS X from the virtual hard drive.
      5.  At the welcome screen, choose your country and keyboard layout.  You can skip transfer information, location services and logging in with your Apple ID if you wish…
      6.  Create a User Account and select your Time Zone.  You can skip sending diagnostics and usage data to Apple….
      7.  Finally, you will arrive at the El Capitan Desktop.
       

       
      8.  Network/internet and audio should work OOB but on my system, the sounds were distorted.  Unfortunately, there is no QE/CI and the VM resolution will be fixed without the ability to dynamically resize the VM window (no VirtualBox additions for OS X guests atm). 
       
       
      Customization with VBoxManage
      1.  You can change the default resolution of 1024*768 (after shutting down the VM) with the VBoxManage command from the Windows Administrative Command Prompt:
      cd "C:\Program Files\Oracle\VirtualBox\" VBoxManage setextradata "El_Capitan" VBoxInternal2/EfiGopMode N (Where N can be one of 0,1,2,3,4,5) referring to the 640x480, 800x600, 1024x768, 1280x1024, 1440x900, 1920x1200 screen resolution respectively.
       
      Update:  For VirtualBox 5.2.x, the command for changing screen resolution has changed...
       
      VBoxManage setextradata "<MyVM>" VBoxInternal2/EfiGraphicsResolution XxY (where X=Horizontal screen resolution, Y=Vertical screen resolution)
      eg
      VBoxManage setextradata "<MyVM>" VBoxInternal2/EfiGraphicsResolution 1280x1024 2.  Adding serials and other SMBIOS details for the System Information Screen
      VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/efi/0/Config/DmiSystemSerial" "W8#######B6" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/efi/0/Config/DmiBoardSerial" "W8#########1A" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/efi/0/Config/DmiSystemVendor" "Apple Inc." VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/efi/0/Config/DmiSystemFamily" "iMac" VBoxManage setextradata "El_Capitan" "VBoxInternal/Devices/efi/0/Config/DmiBIOSVersion" "IM112.0057.03B" A listing of known issues with Mac OS X guests can be found in the VirtualBox Manual - link https://www.virtualbox.org/manual/ch14.html.
       
      Vanilla Mavericks and Yosemite, Snow Leopard from Retail DVD
      The same VM settings for El Capitan will also boot and run vanilla installations of OS X Mavericks and Yosemite .  Attached to this post are installer scripts to create bootable Mavericks (CMI.tool) and Yosemite (CYI.tool) ISOs for VirtualBox and VMware.
       
      With the respective OS X installer apps in the Applications folder, download and run the installer tools using terminal ie
       
      To create a Mavericks ISO on your desktop
      cd downloads chmod +x CMI.tool ./CMI.tool To create a Yosemite ISO on your desktop
      cd downloads chmod +x CYI.tool ./CYI.tool Here is a screenshot of the VM running Mavericks 10.9.5...
       

       
      Finally, those without a Mac/Hack to prepare the install media can purchase a retail Snow Leopard DVD directly from Apple and install OSX 10.6.3 on their virtual machines (Snow Leopard, Lion and Mountain Lion run quite happily in VirtualBox with 1 CPU, 1-2 GB of RAM and the rest of the settings unchanged from above).  Once you update by combo update to SL 10.6.8, you can directly download El Capitan from the App Store for free .
       

       
      UPDATE macOS Sierra 10.12 to 10.12.6: For macOS Sierra, use CSI.tool in post#51.
      UPDATE macOS High Sierra 17A365:  For macOS High Sierra, use CHSI.tool in post#73.
      UPDATE macOS Mojave Beta:  For macOS Mojave Beta, use CMJI.tool on page 4 of thread.
       
      Good luck and enjoy
      CECI.tool.zip
      CYI.tool.zip
      CMI.tool.zip
    • By fantomas1
      -----------------------------
      Mise à jour 12/07/2018
      -----------------------------
       
      La sortie de macOS 10.14 Beta m'oblige à mettre ce topic à jour. Plus de détails dans ce post.
       

       

       
      -----------------------------
      Mise à jour 09/06/2017
       
      -----------------------------
       
      La sortie de macOS 10.13 Beta m'oblige à mettre ce topic à jour. Plus de détails dans ce post.
       

       
       
       
      -----------------------------
      Mise à jour 15/06/2016
      -----------------------------
       
      Une petite mise à jour du topic pour confirmer le bon fonctionnement du patch à la volé de Clover (r3561) avec macOS Sierra.
       

       
       
       
      -----------------------------
      Mise à jour 24/08/2015
      -----------------------------
       
      ok, très bien,
       
      comme pour la HD6770, la nouvelle méthode du patch à la volé est de nouveau fonctionnel et avec les dernières versions de Clover.
       
      pour ma part, je suis sur El Capitan DB7 et Clover r3259
       

       
       
      par contre, je suis toujours obligé de m’aider de l’astuce avec FakeSMC pour que mes kexts soient toujours chargés, mais au moins cela marche.   
       
       
       
       
      et pour config.plist, cela donne ça :
       

       
       
      ceci est juste un exemple avec ma HD4830, il va de soi que vous devez mettre Device-ID de votre carte graphique !!!
       
       
       
       
       
      Salut à tou(te)s
       
      Comme certain(e)s le savent, les cartes graphiques dites "Exotiques" ne sont pas supportés par le système d'exploitation d'Apple.
      En sus d'ajouter l'identifient de la carte graphique (Device ID) dans l'Info.plist du ou des kexts concernés, il faut aussi interagir sur la partie "binaire" du kext par le biais du "patching".
       
      Dans notre cas, les cartes graphiques exotiques sont les cartes AMD (anciennement ATI) de la série HD 48xx, et plus précisément les HD 4830, HD4850, HD4870x2 et HD4890.*
       
      Donc le but est de faire fonctionner ces cartes graphiques de manière stable et fluide en activant QE_CI, chose nécessaire pour en profiter pleinement du système d'exploitation.
       
      * Juste avant de commencer, vous l'avez peut-être remarqué, la HD4870 n'est pas sur la liste suscitée et pour cause c'est que cette carte graphique est nativement supportée par le système d'exploitation d'Apple. Son Device ID est 0x94401002 que vous pouvez trouvé dans l'Info.plist des kexts concernés et c'est celui-ci que nous allons utiliser afin de le remplacer par le Device ID de notre carte graphique.
       
      ** Ce tuto est fait pour fonctionner sous OS X Mavericks, mais il doit fonctionner aussi avec les autres. La seule chose différente c'est l'adresse binaire à patcher.    
       
       
      Très bien, comme le titre le suggère, nous allons voir comment faire reconnaître ces cartes graphiques sous Clover et obtenir par la même un QE_CI activé et parfaitement fonctionnelle.
       
      Je vais utiliser ma Sapphire HD4830 512 MB GDDR3 PCI-E (comme cobaye    ) pour ce test et qui a pour Device ID 0x944c1002.
       
      Pour que ce test réussisse, nous allons donc utiliser ces 2 kexts, à savoir AMD4800Controller.kext (pour la partie QE) et ATIRadeonX2000.kext (pour la partie CI) et allons ajouter notre Device ID dans l'Info.plist. via le tweak "KernelAndKextPatches"
       
      Donc les valeurs à entrer dans notre config.plist sont celle-ci :
      <key>KernelAndKextPatches</key>     <array>         <dict>             <key>Name</key>             <string>AMD4800Controller</string>             <key>InfoPlistPatch</key>             <string>Yes</string>             <key>Find</key>             <string>0x94401002</string>             <key>Replace</key>             <string>0x944C1002</string>         </dict>         <dict>             <key>Name</key>             <string>ATIRadeonX2000</string>             <key>InfoPlistPatch</key>             <string>Yes</string>             <key>Find</key>             <string>0x94401002</string>             <key>Replace</key>             <string>0x944C1002</string>         </dict>     </array> Comme vous pouvez le voir, la clé "InfoPlistPatch" sert à injecter notre Device ID "uniquement" dans Info.plist, sans y toucher à la partie "binaire" de nos kexts. La clé "Find" a pour fonction de trouver le Device ID que l'on veut remplacer par le notre en utilisant la clé "Replace".
       
      Très bien, maintenant comme nous l'avons dit au début de ce tutoriel, ajouter notre Device ID n'est pas suffisant pour faire fonctionner pleinement notre carte graphique, il faut encore interagir sur la partie "binaire" de nos kexts. Dans notre cas, il va falloir agir uniquement sur un kext, çàd sur ATIRadeonX2000.kext et plus particulièrement sur ATIRadeonX2000.kext/Contents/MacOS/ATIRadeonX2000
       
      Et pour cela, nous allons faire comme ceci :
      <key>KextsToPatch</key> <array> <dict>     <key>Name</key>     <string>ATIRadeonX2000</string>     <key>Find</key>     <data>0F8394010000</data>     <key>Replace</key>     <data>909090909090</data> </dict> </array> Là nous pouvons voir que la clé "InfoPlistPatch" n'est pas utilisée et donc ces valeurs n'auront aucun effet sur l'Info.plist mais agiront uniquement au niveau de la partie "binaire". 
       
      Et voici les valeurs en leur forme complète que vous devrez ajouter dans votre config.plist
      <key>KernelAndKextPatches</key>     <array>         <dict>             <key>Name</key>             <string>AMD4800Controller</string>             <key>InfoPlistPatch</key>             <string>Yes</string>             <key>Find</key>             <string>0x94401002</string>             <key>Replace</key>             <string>0x944C1002</string>         </dict>         <dict>             <key>Name</key>             <string>ATIRadeonX2000</string>             <key>InfoPlistPatch</key>             <string>Yes</string>             <key>Find</key>             <string>0x94401002</string>             <key>Replace</key>             <string>0x944C1002</string>         </dict>         <dict>             <key>Name</key>             <string>ATIRadeonX2000</string>             <key>Find</key>             <data>0F8394010000</data>             <key>Replace</key>             <data>909090909090</data>        </dict>     </array> Très bien, maintenant il ne nous reste plus qu'à autoriser l'injection des kexts, sans quoi le patch ne fonctionnera pas. Et nous allons le faire via le tweak "InjectKexts" comme ceci :
      <key>SystemParameters</key> --> clé principale <dict>       <key>InjectSystemID</key>       <true/>       <key>InjectKexts</key> --> sous clé       <string>Yes</string> </dict>  
       
      Si certain(e)s d'entre vous préfèrent utiliser le logiciel "Clover Configurator" pour plus de facilité, voici comment entrer ces valeurs :
       
      Allez sur l'onglet "Kernel And Kext Patches" et faites comme ceci :
       
       
       
      *Ne faites pas attention sur le majuscule/minuscule, cela ne fait aucune différence
       
       
      Et pour injecter les kexts, aller sur l'onglet "System Parameters" et mettez l'option Inject Kexts sur Yes comme ceci :
       

       
       
      Voilà, vous n'avez plus qu'à enregistrer les ajustements, redémarrer votre pc et apprécier le résultat.
       
       
      MAIS ... seulement voilà ... il y a un problème ... 
       
      Quoi ? 
       
      Initialement, les kexts ne sont pas présents dans le kernelcache à cause de "OSBundleRequired=Safe Boot" (ils ne sont pas chargés en local par défaut mais en mode sans échec) et donc le patchage "à la volé" (on the fly) ne fonctionnera pas.
       
      Donc quoi, tout ça pour rien ?
       
      Non, bien-sûr, voici l'astuce pour remédier à cela :
       
      Dans un premier temps, il vous faut booter l'OS sans kernelcache. Si vous utiliser Clover Configurator, il vous suffit juste de cocher l'option "No Caches" dans l'onglet "System and Parameters" ou bien vous le faites directement dans votre config.plist :
      <key>SystemParameters</key> <dict>       <key>InjectSystemID</key>       <true/>       <key>InjectKexts</key>       <string>Yes</string>       <key>NoCaches</key>       <true/> </dict> Ceci aura donc pour effet de bloquer kernelcache et obliger boot.efi de charger le kernel et les kexts séparément. Clover et FSInject vont ensuite intercepter tous les chargements des kexts par boot.efi et changer "OSBundleRequired=Safe Boot" en "OSBundleRequired=Root" à la volé (on the fly) et forceront boot .efi à charger les kexts. Et ensuite dans un second temps, Clover va patcher l'Info.plist de ces deux kexts et la partie binaire de ATIRadeonX2000, kernel va les charger et ils seront rattachés à votre carte graphique.
       
      Une fois ceci fait (donc les kexts utilisés), il vous suffit de faire sudo touch /System/Library/Extensions. Ceci créera un nouveau kernelcache qui cette fois-ci contiendra vos kexts utilisés. Ensuite il ne vous reste plus qu'à redémarrer normalement (en décochant l'option No Caches dans Clover Configurator) et le patch fonctionnera à merveille.
       
       
      Oui, mais ... là aussi ...
       
      Quoi encore ?
       
      Seulement voilà, pour une raison ou une autre, il peut arriver que kernelcache se reconstruit tout seul et le patch "à la volé" ne fonctionne plus.
       
      Alors je fais quoi moi en attendant ?
       
      L'astuce la plus efficace pour le moment est d'injecter les infos de vos kexts à l'intérieur de l'Info.plist de FakeSMC.kext comme des IOKitPersonalities additionnels.
       
      ????Kézako????
       
      Ces infos vous les trouverez dans l'Info.plist de ces 2 kexts, sous IOKitPersonalities. Les voici :
       
      Pour AMD4800Controller.kext
      <key>Controller</key> <dict>         <key>ATY,Cardinal</key>         <dict>                 <key>aty_config</key>                 <dict>                         <key>CFG_NO_PP</key>                         <true/>                 </dict>          </dict>          <key>CFBundleIdentifier</key>          <string>com.apple.kext.AMD4800Controller</string>          <key>IOClass</key>          <string>AMD4800Controller</string>          <key>IOMatchCategory</key>          <string>IOFramebuffer</string>          <key>IOName</key>          <string>AMD4800Controller</string>          <key>IOPCIMatch</key>          <string>0x94401002 0x944a1002</string>          <key>IOProbeScore</key>          <integer>65050</integer>          <key>IOProviderClass</key>          <string>IOPCIDevice</string>         <key>aty_config</key>          <dict>                 <key>CFG_NO_PP</key>                  <false/>                  <key>CFG_PAA</key>                  <integer>0</integer>                  <key>CFG_USE_USCN</key>                  <false/>          </dict>          <key>aty_properties</key>          <dict>                  <key>PP_GFXClockGatingEnabled</key>                  <integer>1</integer>          </dict> </dict> Et pour ATIRadeonX2000.kext
      <key>ATIRadeonX2000</key> <dict>         <key>ATIEnableWideBlitSupport</key>         <true/> <key>ATIUseTearingWideBlit</key> <false/> <key>CFBundleIdentifier</key> <string>com.apple.ATIRadeonX2000</string> <key>GpuDebugPolicy</key> <integer>0</integer> <key>IOCFPlugInTypes</key> <dict> <key>ACCF0000-0000-0000-0000-000a2789904e</key> <string>ATIRadeonX2000GA.plugin</string> </dict> <key>IOClass</key> <string>ATIRadeonX2000</string> <key>IODVDBundleName</key> <string>ATIRadeonX2000VADriver</string> <key>IOKitDebug</key> <integer>0</integer> <key>IOMatchCategory</key> <string>IOAccelerator</string> <key>IOPCIMatch</key> <string>0x94001002 0x94011002 0x94021002 0x94031002 0x95811002 0x95831002 0x95881002 0x94c81002 0x94c91002 0x95001002 0x95011002 0x95051002 0x95071002 0x95041002 0x95061002 0x95981002 0x94881002 0x95991002 0x95911002 0x95931002 0x94401002 0x94421002 0x944A1002 0x945A1002 0x94901002 0x949E1002 0x94801002 0x95401002 0x95411002 0x954E1002 0x954F1002 0x95521002 0x95531002 0x94a01002</string> <key>IOProviderClass</key> <string>IOPCIDevice</string> <key>IOSourceVersion</key> <string>8.24.11</string> <key>IOVARendererID</key> <integer>16908288</integer> <key>sensor-properties</key> <array> <dict> <key>device_type</key> <data> Z3B1LXNlbnNvcg== </data> <key>location</key> <string>GPU</string> <key>name</key> <string>gpu-sensor</string> <key>polling-period</key> <data> AAAAAQAAAAA= </data> <key>reg</key> <data> AAAAAg== </data> <key>sample-period</key> <data> AAAAAACYmAA= </data> <key>sensor-id</key> <data> AAAABg== </data> <key>version</key> <data> AAAAAg== </data> <key>zone</key> <data> AAAAAg== </data> </dict> </array </dict>  
      Et voici donc l'Info.plist de FakeSMC.kext dans son intégrité, vous pouvez jeter un oeil, histoire de voir à quoi cela ressemble :
       
      FakeSMC_Info.plist.zip
       
      Et pour les moins casse-têtes, voici FakeSMC.kext modifié que j'utilise pour charger les 2 kexts :
       
      FakeSMC.kext.zip
       
       
      Voilà, avec ceci, vous n'aurez plus besoin de savoir si oui ou non les kexts sont dans le kernelcache.
       
       
      Crédits attribués à :
       
      netkas  pour son incontournable QE_CI Exotic patch (même s'il n'importe plus son support)
       
      Slice  & co. pour leur bébé nommé Clover
       
      dmazar  pour son astuce avec FakeSMC.kext   (pour plus d'info, voir ici)
       
      duffs (rarement ici, plus sur le site de netkas) pour son astuce de comment patcher la partie binaire avec Clover, ce fût lors de la sortie de OS X Mavericks DP1
       
      nyolc8  pour le support de QE_CI Exotic patch pour Mavericks
       
      fantomas1  pour ......... pour ... quoi déjà ? Ah ben non ... non ... pour rien ...
    • By Slice
      Now I want to add vector graphics support in Clover. See rev 4560 and later.
      It is not working yet but designers may begin to create Vector Themes.
      It supposed to consist of SVG elements and has design size. It will be rendered to any screen size scaled from design size.
       
      What application in macOS can create SVG graphics?
      Inkscape is not working in macOS 10.11+. Pity.
      LibreOffice Draw works with SVG but buggy.
      Boxy SVG cost 10$ but looks good enough. It creates the best in simplicity files and have more then enough features.
      Illustrator is good but expensive.
       
      How to improve SVG file?
      Clover has restricted support for SVG. It is your job to make compatible file and as small as possible to speedup rendering.
      Some helps:
      Help:Inkscape – From invalid to valid SVG Inkscape files
      From invalid to valid SVG Adobe Illustrator files
      From invalid to valid SVG files of other editors: BKchem, ChemDraw and CorelDRAW
      Help:Illustrator – Assistance with creating and saving SVG images in Adobe Illustrator that will pass W3C validation
      User:Quibik/Cleaning up SVG files manually
      Later I will write own instructions specific to Clover abilities.
       
      How to create SVG fonts?
      You can google to find ready-to-use SVG fonts.  I found some problems with too beaty fonts: slow rendering and overflow crash. Be careful.
      You can get ttf or otf fonts and convert them into svg by using online WEB services. Not a problem to google.
      But then I want to find a way to simplify the font to reduce a size and speedup rendering.
      You can create own font by FontForge It is opensource and available for Windows, Mac and GNU+Linux. It creates otf font which you can convert to svg font.
       
       
×