Jump to content

OS X El Capitan DP's builds!


924 posts in this topic

Recommended Posts

There are 3 methods to create an Installer:

 

1) resore the basesystem.dmg to a USB drive and copying Pakages folder, kernel, etc. (Hack way)

2) using terminal (Vanilla way):

sudo /Applications/Install\ OS\ X\ El\ Capitan\ GM\ Candidate.app/Contents/Resources/createinstallmedia --volume /Volumes/YourUSB --applicationpath /Applications/Install\ OS\ X\ El\ Capitan\ GM\ Candidate.app --nointeraction

(the example require that your app is inside the /Applications folder)

 

 

3) Open and run  /Applications/Install OS X El Capitan GM Candidate.app and point the installation to a selected Volume! (Vanilla way)

 

 

Method 1 is not automated, 2 and 3 yes. But method 3 do things in a way the bootloader can't know which version you are installing (problem for Clover, Enoch etc.) because no SystemVersion.plist exist in this way (btw I'm making a workaround here:            #3409            ).

Method 2 instead create some folders containing the SystemVersion.plist on your USB stick... Well now the bootloader know the Os version inside the Installer, then can apply patches to the kernelcache to boot correctly your Installer... try method 2!

 

 

EDIT

Method 3 also create problem if the app is not inside the /Applications folder, because the app write some file on the Volume where the app reside (can be another Volume too if you have it somewere)

I always use the 1 Method  after all are hackers right?

  • Like 2
Link to comment
Share on other sites

All three methods are good to install in my opinion (restore an image to a disk or run it in memory does not make mutch differents...), but the bootloader need or the kernel path+SLE+FakeSMC (minimum), or the com.apple.Boot.plist path+kernelcache path+FakeSMC+patch the kernelcache to link FakeSMC (but bootloader need the OS version to know how do that)

That's all :)

  • Like 1
Link to comment
Share on other sites

OK. Managed to install GM. Everything works except for 1 USB3 port that doesn't read external USB3 drive, but does read all other USB3 thumb drives. It's weird  :rolleyes:

 

I am also having the same problem the USB ports.

Only USB 3.0 ports work, but the strange thing is. My USB keyboard and mouse work, but if plugging a flash drive or USB HDD do not ride.
In System Properties says electrical current, "Electric Current Available (mA): 1000", and the right to USB 2.0's is 500 mA.
Does anyone have any solution for this?
Link to comment
Share on other sites

Looks good for USB 3.0 have extra current, so you can charge you iPhone/iPad if any. It's ok!

To use your hard drive look at Reahabman github repositories, or for a DummyKexts by pokenguyen here on Insanelymac..

Link to comment
Share on other sites

What do you mean automatically? It did not give you chance to do a clean install?

Before push the Installation button....you can use Disk Utility (top bar menu) and erase your destination disk..if you want that...

Link to comment
Share on other sites

Before push the Installation button....you can use Disk Utility (top bar menu) and erase your destination disk..if you want that...

Thanks for the info! I supposed it would be like with other full installers. When he mentioned "automatically" got me thinking if it would be somehow different :) Not that it really matters, I'm going to do upgrade anyway, some apps are not probably going to work if I will do a clean installation(Native Instruments).

  • Like 1
Link to comment
Share on other sites

Method 2/3) require your bootloader to link extensions to the kernelcache.... more difficult :P

...because you have not the kernel nor /System/Library/Extensions

I use https://github.com/Piker-Alpha/LZVN when I need the kernel, and I always use the installer app. It's pretty simple for updates. Just let it use the current prelinkedkernel :-)
  • Like 3
Link to comment
Share on other sites

What do you mean automatically? It did not give you chance to do a clean install?

Because I had selected the option to upgrade, but I was unable to do. Then when I created the installer stick and went to install, the system started the update process automatically. :P

Link to comment
Share on other sites

I use https://github.com/Piker-Alpha/LZVN when I need the kernel, and I always use the installer app. It's pretty simple for updates. Just let it use the current prelinkedkernel :-)

Hi Pike,

 

Your LZVN is fantastic :), is cool!

Any chance that you use xml.c/h instead of Core Fundation?  ...you can image why ^_^

Link to comment
Share on other sites

Because you need  some NOPs in bootstrap.cpp in the compiled prelinked kernel to load kexts outside of /S/L/E and link it from elsewere allowing booter extensions or to read it to use, otherwise you can't.  

That happened also to Clover some days ego (there was a need for a new patch location to discover in 10.10.5 and 10.11 dp5/6 ..then he worked again injecting kexts)

 

I was talking thinking as it is harder for a developper ... not for a user :)

 

Me always use App Store to update, more simple, but the GM does not show up, so you have to use the app or createinstallmedia. The createinstallmedia method is better in a hackintosh.

 

EDIT

basically the bootloader need to know wicth patch apply based on os version, using the app can be buggie

Link to comment
Share on other sites

Upgraded from 15A279b → 15A282a via GM installer app. No issues encountered during upgrade process. (FWIW, currently using CsrActiveConfig = 0x01)

 

I've some weird USB behavior as well—USB3 devices wouldn't register in USB3 ports, though USB2 devices could. Tried editing my DSDT, setting device XHC as XHC1 (AppleUSBXHCIPCI.kext appears to expect this value for iMac14,2 in the accompanying Info.plist/IOKitPersonalities). Now USB3 devices work in USB3 ports, but USB2 devices don't except when plugged into USB2 ports. I know there's a thread or two around here on El Capitan USB issues, so I'll try reading through those and report back.

Link to comment
Share on other sites

Ya I don't know why he keeps saying don't use the app, it works fine.

because if a thing does not happen to you, this does not mean that is not true. Just read the previous pages to show you the opposite.

BTW that comes from Clover:

////////////////////////////////////
//
// KernelBooterExtensionsPatch to load extra kexts besides kernelcache
//
//
UINT8   KBESnowSearch_i386[]   = { 0xE8, 0xED, 0xF9, 0xFF, 0xFF, 0xEB, 0x08, 0x89, 0x1C, 0x24 };
UINT8   KBESnowReplace_i386[]  = { 0xE8, 0xED, 0xF9, 0xFF, 0xFF, 0x90, 0x90, 0x89, 0x1C, 0x24 };
//E8 5A FB FF FF EB 08 48 89 DF
UINT8   KBESnowSearch_X64[]    = { 0xE8, 0x5A, 0xFB, 0xFF, 0xFF, 0xEB, 0x08, 0x48, 0x89, 0xDF };
UINT8   KBESnowReplace_X64[]   = { 0xE8, 0x5A, 0xFB, 0xFF, 0xFF, 0x90, 0x90, 0x48, 0x89, 0xDF };


UINT8   KBELionSearch_i386[]   = { 0xE8, 0xAA, 0xFB, 0xFF, 0xFF, 0xEB, 0x08, 0x89, 0x34, 0x24 };
UINT8   KBELionReplace_i386[]  = { 0xE8, 0xAA, 0xFB, 0xFF, 0xFF, 0x90, 0x90, 0x89, 0x34, 0x24 };

UINT8   KBELionSearch_X64[]    = { 0xE8, 0x0C, 0xFD, 0xFF, 0xFF, 0xEB, 0x08, 0x48, 0x89, 0xDF };
UINT8   KBELionReplace_X64[]   = { 0xE8, 0x0C, 0xFD, 0xFF, 0xFF, 0x90, 0x90, 0x48, 0x89, 0xDF };

UINT8   KBEMLSearch[]  = { 0xC6, 0xE8, 0x30, 0x00, 0x00, 0x00, 0xEB, 0x08, 0x48, 0x89, 0xDF };
UINT8   KBEMLReplace[] = { 0xC6, 0xE8, 0x30, 0x00, 0x00, 0x00, 0x90, 0x90, 0x48, 0x89, 0xDF };

//0xE8, 0x27, 0x00, 0x00, 0x00, 0xEB, 0x08, 0x48, 0x89, 0xDF }; @1ecfa4
//UINT8   KBEYosSearch[]  = {0xE8, 0x27, 0x00, 0x00, 0x00, 0xEB, 0x08, 0x48, 0x89, 0xDF };
//UINT8   KBEYosReplace[]  = {0xE8, 0x27, 0x00, 0x00, 0x00, 0x90, 0x90, 0x48, 0x89, 0xDF };

UINT8 KBEYosSearch[]  = { 0xE8, 0x25, 0x00, 0x00, 0x00, 0xEB, 0x05, 0xE8, 0xCE, 0x02, 0x00, 0x00 };
UINT8 KBEYosReplace[] = { 0xE8, 0x25, 0x00, 0x00, 0x00, 0x90, 0x90, 0xE8, 0xCE, 0x02, 0x00, 0x00 };

// as of El Capitan DP6
UINT8 KBEECSearch[]  = { 0xC3, 0x48, 0x85, 0xDB, 0x74, 0x70, 0x48, 0x8B, 0x03, 0x48, 0x89, 0xDF, 0xFF, 0x50, 0x28, 0x48 };
UINT8 KBEECReplace[] = { 0xC3, 0x48, 0x85, 0xDB, 0xEB, 0x12, 0x48, 0x8B, 0x03, 0x48, 0x89, 0xDF, 0xFF, 0x50, 0x28, 0x48 };

Read this:

//
// We can not rely on OSVersion global variable for OS version detection,
// since in some cases it is not correct (install of ML from Lion, for example).
// So, we'll use "brute-force" method - just try to patch.
// Actually, we'll at least check that if we can find only one instance of code that
// we are planning to patch.
//

then read this:

if (is64BitKernel) {
    NumLion_X64 = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBELionSearch_X64, sizeof(KBELionSearch_X64));
    NumSnow_X64 = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBESnowSearch_X64, sizeof(KBESnowSearch_X64));
    NumML  = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEMLSearch, sizeof(KBEMLSearch));
    NumYos = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBEYosSearch, sizeof(KBEYosSearch));
  } else {
    NumLion_i386 = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBELionSearch_i386, sizeof(KBELionSearch_i386));
    NumSnow_i386 = SearchAndCount(Kernel, KERNEL_MAX_SIZE, KBESnowSearch_i386, sizeof(KBESnowSearch_i386));
  }
  
  if (NumSnow_X64 + NumSnow_i386 + NumLion_X64 + NumLion_i386 + NumML + NumYos > 1) {
    // more then one pattern found - we do not know what to do with it
    // and we'll skipp it
	  AsciiPrint("\nERROR patching kernel for injected kexts:\nmultiple patterns found (LionX64: %d, Lioni386: %d, ML: %d) - skipping patching!\n",
               NumLion_X64, NumLion_i386, NumML);
	  gBS->Stall(10000000);
	  return;
  }
  
  if (NumML == 1) {
    Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEMLSearch, sizeof(KBEMLSearch), KBEMLReplace, 1);
    DBG_RT(Entry, "==> kernel OS X64: %d replaces done.\n", Num);
  }
  else if (NumYos == 1) {
	  Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEYosSearch, sizeof(KBEYosSearch), KBEYosReplace, 1) +
		SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBEECSearch, sizeof(KBEECSearch), KBEECReplace, 1);
    DBG_RT(Entry, "==> kernel Yosemite/El Capitan: %d replaces done.\n", Num);
  }
  else if (NumLion_i386 == 1) {
	  Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBELionSearch_i386, sizeof(KBELionSearch_i386), KBELionReplace_i386, 1);
    DBG_RT(Entry, "==> Lion i386: %d replaces done.\n", Num);
  }
  else if (NumLion_X64 == 1) {
	  Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBELionSearch_X64, sizeof(KBELionSearch_X64), KBELionReplace_X64, 1);
    DBG_RT(Entry, "==> Lion X64: %d replaces done.\n", Num);
  }
  else if (NumSnow_X64 == 1) {
	  Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBESnowSearch_X64, sizeof(KBESnowSearch_X64), KBESnowReplace_X64, 1);
	  DBG_RT(Entry, "==> Snow X64: %d replaces done.\n", Num);
  }
  else if (NumSnow_i386 == 1) {
	  Num = SearchAndReplace(Kernel, KERNEL_MAX_SIZE, KBESnowSearch_i386, sizeof(KBESnowSearch_i386), KBESnowReplace_i386, 1);
    DBG_RT(Entry, "==> Snow i386: %d replaces done.\n", Num);
  }
  else {
    DBG_RT(Entry, "==> ERROR: NOT patched - unknown kernel.\n");
  }

Last part of code seem to me like to guess what will be the right OS to boot (and patch)

 

so if you read again this:

//

// We can not rely on OSVersion global variable for OS version detection,

// since in some cases it is not correct (install of ML from Lion, for example).

// So, we'll use "brute-force" method - just try to patch.

// Actually, we'll at least check that if we can find only one instance of code that

// we are planning to patch.

 

//

 

// more then one pattern found - we do not know what to do with it

// and we'll skipp it

oops  El Capitan kernel...have two occurences that the above code can find...

 

Than tell me if you can find any plist inside the temporary folders created by the app where clover can find the os version..

 

"createinstallmedia installer" instead declare the right version in:

 

/Volumes/Install OS X El Capitan GM Candidate/.IABootFilesSystemVersion.plist

and in

/Volumes/Install OS X El Capitan GM Candidate/System/Library/CoreServices/SystemVersion.plist

  • Like 1
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...