Jump to content

Clover General discussion


ErmaC
29,866 posts in this topic

Recommended Posts

Just doing that now, do I have to run CGP once before editing the conf file?

 

I tried adding the line on first run but the build failed.

Install Command line tools

Start Grower thats it  choose SVN 

Link to comment
Share on other sites

My compilation looks otherwise

attachicon.gifScreen Shot 2015-10-10 at 8.50.16.png

 

I am not using CGP. My way

#!/bin/bash

./ebuild.sh --ia32
./ebuild.sh -mc -D DISABLE_USB_SUPPORT
./ebuild.sh 
cd CloverPackage
./makepkg
./makeiso
cd ..
echo "done!"

What is the reason to update EDK2? You want to obtain new bugs?

 

 

Disable USB support question.  So CGP compiled without any switches has USB support?  Would you be willing to share that copy of Clover.  I wanted to test it on my system to see if it helps with a USB panic I am getting on boot.  Thanks

Link to comment
Share on other sites

Is really need to do this eachtime after clover svn update?

cd "${dEdk2}" && source ./edksetup.sh "BaseTools" &>/dev/null

This is what i did to let clover auto select bootable device & hide others:

<key>GUI</key>
<dict>
  ...
  <key>Scan</key>
  <dict>
    <key>Entries</key>
    <true/>
    <key>Legacy</key>
    <false/>
    <key>Tool</key>
    <false/>
  </dict>
  ...
</dict>
Link to comment
Share on other sites

that's why I said it's the same issue. That was the issue. :P

I dont have big problems with CloverGrowerPro inside El Capitan

The only thing I find is Clover Updater as  not create

I do this manually and everything is ok

 

One thing is certain is that El Capo contains several bug

 

 

I am return to Yosemite to create all Package and stuff, I not using El Capo for now

I am not satisfy 

  • Like 2
Link to comment
Share on other sites

I can't get it to work at all using the method you provided Chris, arsradu has the same problem as me.

 

It doesn't seem to like the spaces in the SVN target path.

This is wath I have

 

129.png

  • Like 1
Link to comment
Share on other sites

Try installing NTFS.efi into /EFI/CLOVER/drivers64 or /EFI/CLOVER/drivers64UEFI.

 

This will enable Clover to read the actual NTFS volume name eg "Windows10" instead of ""Legacy HD1".  You can then hide entries as explained in the Clover wiki:

 

Eg you can use the following in GUI/config.plist to hide all legacy entries except the custom Windows 10 legacy menu entry for the volume "WIN10"...

 

 

	<key>GUI</key>
	<dict>
		<key>Scan</key>
		<dict>
			<key>Entries</key>
			<true/>
			<key>Legacy</key>
			<false/>
			<key>Tool</key>
			<false/>
		</dict>
		<key>Custom</key>
		<dict>
			<key>Entries</key>
			<array>
				<dict>
					<key>Disabled</key>
					<false/>
					<key>FullTitle</key>
					<string>UEFI Internal</string>
					<key>Hidden</key>
					<true/>
					<key>Ignore</key>
					<false/>
					<key>InjectKexts</key>
					<false/>
					<key>NoCaches</key>
					<false/>
					<key>Type</key>
					<string>Other</string>
				</dict>
			</array>
			<key>Legacy</key>
			<array>
				<dict>
					<key>Disabled</key>
					<false/>
					<key>Hidden</key>
					<false/>
					<key>Ignore</key>
					<false/>
					<key>Title</key>
					<string>Windows 10</string>
					<key>Type</key>
					<string>Windows</string>
					<key>Volume</key>
					<string>WIN10</string>
				</dict>
			</array>
		</dict>
	<dict>

 

 

 

You are the man. I put NTFS.efi into /EFI/CLOVER/drivers64.  Now, it shows Mac OSx, Win10, and Win7.

  • Like 1
Link to comment
Share on other sites

I think I've gotten kext injection to work the way I want it to. With some (very hacky and rushed) edits, Clover now loads kexts from the Other folder first (in OEM if present) and then afterwards, the OS-specific version (e.g. 10.11, also in OEM if present). Again, this is very hacky and probably buggy, check before using it. It seems to work from the (very limited) tests I've done.

 

Oops, there were some errors in the diff, here's the fixed one:

diff --git a/rEFIt_UEFI/Platform/Platform.h b/rEFIt_UEFI/Platform/Platform.h
index a031f93..a03fb8a 100644
--- a/rEFIt_UEFI/Platform/Platform.h
+++ b/rEFIt_UEFI/Platform/Platform.h
@@ -1646,11 +1646,20 @@ SetFSInjection (
   );
 
 CHAR16*
-GetExtraKextsDir (
+GetOtherKextsDir ();
+
+CHAR16*
+GetOSVersionKextsDir (
   CHAR8 *OSVersion
   );
 
 EFI_STATUS
+InjectKextsFromDir (
+  EFI_STATUS Status,
+  CHAR16 *SrcDir
+  );
+
+EFI_STATUS
 LoadKexts (
   IN  LOADER_ENTRY *Entry
   );
diff --git a/rEFIt_UEFI/Platform/Settings.c b/rEFIt_UEFI/Platform/Settings.c
index c95f472..c56bdda 100644
--- a/rEFIt_UEFI/Platform/Settings.c
+++ b/rEFIt_UEFI/Platform/Settings.c
@@ -5486,14 +5486,32 @@ SaveSettings ()
   return EFI_SUCCESS;
 }
 
+CHAR16
+*GetOtherKextsDir ()
+{
+  CHAR16 *SrcDir         = NULL;
+
+  SrcDir     = PoolPrint (L"%s\\kexts\\Other", OEMPath);
+  if (!FileExists (SelfVolume->RootDir, SrcDir)) {
+    FreePool (SrcDir);
+    SrcDir = PoolPrint (L"\\EFI\\CLOVER\\kexts\\Other");
+    if (!FileExists (SelfVolume->RootDir, SrcDir)) {
+      FreePool (SrcDir);
+      SrcDir = NULL;
+    }
+  }
+
+  return SrcDir;
+}
+
 //dmazar
 CHAR16
-*GetExtraKextsDir (
+*GetOSVersionKextsDir (
   CHAR8 *OSVersion
   )
 {
   CHAR16 *SrcDir         = NULL;
-  CHAR8  FixedVersion[6] = "Other";
+  CHAR8  FixedVersion[6];
   CHAR8  *DotPtr;
 
   if (OSVersion != NULL) {
@@ -5516,25 +5534,10 @@ CHAR16
   SrcDir     = PoolPrint (L"%s\\kexts\\%a", OEMPath, FixedVersion);
   if (!FileExists (SelfVolume->RootDir, SrcDir)) {
     FreePool (SrcDir);
-    SrcDir   = PoolPrint (L"%s\\kexts\\Other", OEMPath);
-
-    if (!FileExists (SelfVolume->RootDir, SrcDir)) {
-      FreePool (SrcDir);
-      SrcDir = NULL;
-    }
-  }
-
-  if (SrcDir == NULL) {
-    // if not found, check EFI\CLOVER\kexts\...
     SrcDir = PoolPrint (L"\\EFI\\CLOVER\\kexts\\%a", FixedVersion);
     if (!FileExists (SelfVolume->RootDir, SrcDir)) {
       FreePool (SrcDir);
- //     SrcDir = PoolPrint (L"\\EFI\\CLOVER\\kexts\\Other", gSettings.OEMProduct);
-      SrcDir   = PoolPrint (L"\\EFI\\CLOVER\\kexts\\Other");
-      if (!FileExists (SelfVolume->RootDir, SrcDir)) {
-        FreePool (SrcDir);
-        SrcDir = NULL;
-      }
+      SrcDir = NULL;
     }
   }
   
@@ -5542,6 +5545,21 @@ CHAR16
 }
 
 EFI_STATUS
+InjectKextsFromDir (
+  EFI_STATUS Status,
+  CHAR16 *SrcDir
+  )
+{
+
+  if (EFI_ERROR (Status)) {
+    MsgLog (" - ERROR: Kext injection failed!\n");
+    return EFI_NOT_STARTED;
+  }
+
+  return Status;
+}
+
+EFI_STATUS
 SetFSInjection (
   IN LOADER_ENTRY *Entry
   )
@@ -5555,7 +5573,7 @@ SetFSInjection (
   FSI_STRING_LIST      *Blacklist      = 0;
   FSI_STRING_LIST      *ForceLoadKexts;
 
-  MsgLog ("FSInjection: ");
+  MsgLog ("Beginning FSInjection\n");
     
   Volume = Entry->Volume;
     
@@ -5574,18 +5592,18 @@ SetFSInjection (
   Status = gBS->LocateProtocol(&gFSInjectProtocolGuid, NULL, (void **)&FSInject);
   if (EFI_ERROR (Status)) {
     //Print (L"- No FSINJECTION_PROTOCOL, Status = %r\n", Status);
-    MsgLog ("not started - gFSInjectProtocolGuid not found\n");
+    MsgLog (" - ERROR: gFSInjectProtocolGuid not found!\n");
     return EFI_NOT_STARTED;
   }
 
   // check if blocking of caches is needed
   if (OSFLAG_ISSET(Entry->Flags, OSFLAG_NOCACHES)) {
-    MsgLog ("blocking caches");
+    MsgLog ("Blocking kext caches\n");
 //  BlockCaches = TRUE;
     // add caches to blacklist
     Blacklist = FSInject->CreateStringList ();
     if (Blacklist == NULL) {
-      MsgLog (": Error not enough memory!\n");
+      MsgLog (" - ERROR: Not enough memory!\n");
       return EFI_NOT_STARTED;
     }
 
@@ -5599,55 +5617,45 @@ SetFSInjection (
     if (gSettings.BlockKexts[0] != L'\0') {
       FSInject->AddStringToList(Blacklist, PoolPrint (L"\\System\\Library\\Extensions\\%s", gSettings.BlockKexts));
     }
-
-    MsgLog (", ");
   }
     
   // check if kext injection is needed
   // (will be done only if caches are blocked or if boot.efi refuses to load kernelcache)
   SrcDir = NULL;
   if (OSFLAG_ISSET(Entry->Flags, OSFLAG_WITHKEXTS)) {
-    SrcDir = GetExtraKextsDir(Entry->OSVersion);
-    if (SrcDir != NULL) {
-      // we have found it - injection will be done
-      MsgLog ("using kexts path: '%s'", SrcDir);
-//    InjectionNeeded = TRUE;
-    } else {
-      MsgLog ("skipping kext injection (kexts folder not found)");
-    }
-  } else {
-    MsgLog ("skipping kext injection (not requested)");
-  }
-    
-  // prepare list of kext that will be forced to load
-  ForceLoadKexts = FSInject->CreateStringList ();
-  if (ForceLoadKexts == NULL) {
-    MsgLog (" - Error: not enough memory!\n");
-    return EFI_NOT_STARTED;
-  }
-
-  KextPatcherRegisterKexts (FSInject, ForceLoadKexts, Entry);
+    Status = FSInject->Install (
+                       Volume->DeviceHandle,
+                       L"\\System\\Library\\Extensions",
+                       SelfVolume->DeviceHandle,
+                       GetOtherKextsDir (),
+                       Blacklist,
+                       ForceLoadKexts
+                       );
+    InjectKextsFromDir(Status, GetOtherKextsDir());
 
-  Status = FSInject->Install (
+    Status = FSInject->Install (
                        Volume->DeviceHandle,
                        L"\\System\\Library\\Extensions",
                        SelfVolume->DeviceHandle,
-                       SrcDir,
+                       GetOSVersionKextsDir (Entry->OSVersion),
                        Blacklist,
                        ForceLoadKexts
                        );
-    
-  if (SrcDir != NULL) {
-    FreePool (SrcDir);
+    InjectKextsFromDir(Status, GetOSVersionKextsDir(Entry->OSVersion));
+  } else {
+    MsgLog ("skipping kext injection (not requested)\n");
   }
     
-  if (EFI_ERROR (Status)) {
-    MsgLog (" - Error: could not install injection!\n");
+  // prepare list of kext that will be forced to load
+  ForceLoadKexts = FSInject->CreateStringList ();
+  if (ForceLoadKexts == NULL) {
+    MsgLog (" - Error: not enough memory!\n");
     return EFI_NOT_STARTED;
   }
-    
+
+  KextPatcherRegisterKexts (FSInject, ForceLoadKexts, Entry);
+   
   // reinit Volume->RootDir? it seems it's not needed.
     
-  MsgLog ("\n");
   return Status;
 }
diff --git a/rEFIt_UEFI/Platform/kext_inject.c b/rEFIt_UEFI/Platform/kext_inject.c
index 53b71b9..d73e73d 100644
--- a/rEFIt_UEFI/Platform/kext_inject.c
+++ b/rEFIt_UEFI/Platform/kext_inject.c
@@ -303,7 +303,26 @@ EFI_STATUS LoadKexts(IN LOADER_ENTRY *Entry)
    }
 
   //	Volume = Entry->Volume;
-	SrcDir = GetExtraKextsDir(Entry->OSVersion);
+	SrcDir = GetOtherKextsDir();
+	if (SrcDir != NULL) {
+		MsgLog("Preparing kexts injection for arch=%s from %s\n", (archCpuType==CPU_TYPE_X86_64)?L"x86_64":(archCpuType==CPU_TYPE_I386)?L"i386":L"", SrcDir);
+		// look through contents of the directory
+		DirIterOpen(SelfVolume->RootDir, SrcDir, &KextIter);
+		while (DirIterNext(&KextIter, 1, L"*.kext", &KextFile)) {
+			if (KextFile->FileName[0] == '.' || StrStr(KextFile->FileName, L".kext") == NULL)
+				continue;   // skip this
+			
+			UnicodeSPrint(FileName, 512, L"%s\\%s", SrcDir, KextFile->FileName);
+			MsgLog("  Extra kext: %s\n", FileName);
+			AddKext(Entry, SelfVolume->RootDir, FileName, archCpuType);
+      
+			UnicodeSPrint(PlugIns, 512, L"%s\\%s", FileName, L"Contents\\PlugIns");
+         LoadPlugInKexts(Entry, SelfVolume->RootDir, PlugIns, archCpuType, FALSE);
+		}
+		DirIterClose(&KextIter);
+	}
+
+	SrcDir = GetOSVersionKextsDir(Entry->OSVersion);
 	if (SrcDir != NULL) {
 		MsgLog("Preparing kexts injection for arch=%s from %s\n", (archCpuType==CPU_TYPE_X86_64)?L"x86_64":(archCpuType==CPU_TYPE_I386)?L"i386":L"", SrcDir);
 		// look through contents of the directory

Also, here's a new package of r3280 built with ./ebuild.sh --only-sata0 -x64 with this patch.

 

 

  • Like 3
Link to comment
Share on other sites

I have problem with efi partiton, i don't have efi partition. I have folder efi in hdd, and i don't use toleda audio script, because i can't moun efi partition. What's wrong?

Did you try using Clover Configurator or EFI Mounter to mount your EFI partition? By default it's hidden. So yes, you won't be able to see it in Finder.

Link to comment
Share on other sites

Did you try using Clover Configurator or EFI Mounter to mount your EFI partition? By default it's hidden. So yes, you won't be able to see it in Finder.

I know that. I try configurator and efi mounter, but no efi partition, just folder on hdd. I don't know how? I try debug in disk utility, but no efi partition..

This is how i install clover bootloader:

108010d1413735007t-how-install-os-x-yose

Link to comment
Share on other sites

I know that. I try configurator and efi mounter, but no efi partition, just folder on hdd. I don't know how? I try debug in disk utility, but no efi partition..

This is how i install clover bootloader:

108010d1413735007t-how-install-os-x-yose

 

Legacy or UEFI booting? What are you trying to achieve?

 

Also, please, open up a terminal and post the output of this command:

diskutil list

Or take a screenshot of that.

Link to comment
Share on other sites

Legacy or UEFI booting? What are you trying to achieve?

 

Also, please, open up a terminal and post the output of this command:

diskutil list

Or take a screenshot of that.

When i put this command in terminal, no efi partition. Legacy booting. I try to work sound, toleda audio script, but i can't because efi partition, not mount.

Link to comment
Share on other sites

When i put this command in terminal, no efi partition. Legacy booting. I try to work sound, toleda audio script, but i can't because efi partition, not mount.

There is nothing to mount. You don't have an EFI partition to mount!

 

Is your drive formatted as GUID?

Link to comment
Share on other sites

Also formatted partition as Mac OS Extended (journaled)? This is odd.

Yes.. Of course.. I really don't know, what's wrong..

And everything works, kext for ethernet,fakesmc,null, except the sound, even thought i had realtekALC.kext for sound, that worked in yosemite.

Link to comment
Share on other sites

Yes.. Of course.. I really don't know, what's wrong..

And everything works, kext for ethernet,fakesmc,null, except the sound, even thought i had realtekALC.kext for sound, that worked in yosemite.

Could you please, post a screenshot or output of diskutil list command?

 

Also, a boot.log or preboot.log might help.

What's wrong is that it didn't create an EFI partition upon formatting your hard drive. Or....you removed it accidentally afterwards. Either way, with no EFI partition, there is nothing to mount, so you can't fix your sound (at least not using Clover patching).

Link to comment
Share on other sites

×
×
  • Create New...