Jump to content

How to boost the OS X boot process...


  • Please log in to reply
1109 replies to this topic

#61
Master Chief

Master Chief

    Just Chief

  • Members
  • PipPipPipPipPipPipPipPip
  • 1,176 posts
  • Gender:Male
Time for another experiment – proof of concept

It was time for another experiment (make sure to read post #60 first). This time I was trying to:

1) Boot from a 4GB Kingston DataTraveler with all drives disabled in the BIOS (last paragraph).
2) Speed up the boot process of my 4GB Kingston DataTraveler.
3) Understand why boot-132 includes unused code, which could be used to speed up the boot process.

Let's jump right in. Here's what I did. I copied all kexts from /System/Library/Extensions/ to ~/Extensions/ (my local user folder) and started to remove one kext after the other. Well not really. Sometimes I removed 5 or 10 files at a time. Anyway. The next step was to create a fresh copy of Extensions.mkext for which I used the following terminal command:
sudo kextcache -v 1 -t -l -mkext2 /Volumes/USBBOOT/S*/L*/C*/c*/S*/Extensions.mkext ~/Extensions/

And after a few times... this is what I have. Here's my list of essential kexts (required to boot):
AppleACPIPlatform.kext    [AppleACPIEC.kext removed]AppleAHCIPort.kextAppleAPIC.kextAppleFileSystemDriver.kextAppleFSCompressionTypeZlib.kextAppleHIDKeyboard.kext    [Required for Apple keyboard / AppleBluetoothHIDKeyboard.kext removed]AppleHPET.kextAppleIntelCPUPowerManagement.kextAppleLPC.kextAppleMatch.kext    [Removal = stuck at blue screen]ApplePlatformEnabler.kextAppleProfileFamily.kextAppleRTC.kextAppleSMBIOS.kext    [Removal = slow boot]fakesmc.kext        [Removal = stuck before blue screen]IOACPIFamily.kextIOAHCIFamily.kextIOHIDFamily.kextIOPCIFamily.kextIOPlatformPluginFamily.kextIOSCSIArchitectureModelFamily.kextIOSCSIParallelFamily.kextIOStorageFamily.kextOSvKernDSPLib.kextQuarantine.kextSandbox.kextSystem.kext    [Removal = KP]
Now. Before you start counting... there are now only 27 essentials kexts left in Extensions.mkext [2.133.806 bytes]. And yes audio, LAN and everything else is still fully functional. But please note that I boot in 32-bit mode and haven't had the time to check 64-bit mode yet (which may fail so you are warned).

And this ladies and gentlemen tells me that the kernel doesn't really need Extensions.mkext (notably in the boot loader) nor that it needs all kexts in it... simply because it will load all required kexts anyway. Let me add that it loads Extensions.mkext right before the Apple logo is shown, and thus the larger the file... the longer it takes before the logo appears. No wonder of course because loading ~6MB extra data hurts. Even on a fast boot drive.

And while this experiment took off 10 revs i.e. booting from USBBOOT is now just as fast as booting from my hard drive, shedding new light on the matter, we still have to find a good balance between size and speed. But one thing is sure; limiting the number of kexts in Extensions.mkext does help. A lot even.

Conclusions

First. This was a fun experiment. And no regrets here, because now I can boot without any drive enabled in my BIOS. Which is cool for people who are still stuck with USBBOOT methods – hello RAID users? My initial thought (more a hope really) however was wrong. No. Extensions.mkext is not loaded twice! Which is too bad for us because now there isn't that much to gain for everyone. Anyway. It was not a complete waste of time. No sir. I think to have a much better understanding now, about how and why things are done in boot-132.

Also. It might still be a good idea to have a reduced copy of Extensions.mkext for normal boots. One with all unused kexts removed. That however is for you to find out since I already did this, and even before I started to work on this.

Notes

The SATA configuration in my BIOS is set to AHCI [other options are IDE and RAID] and all drives under BIOS menu: Main > AHCI Settings are set to "Not Installed". And booting is normally not possible due to the simple fact that the drives are undetected, but the setup I have here [on my USBBOOT] may enable me to boot with an unmodified copy of Chameleon. In fact it should work [why wouldn't it?] but I haven't verified it myself.

Oh and I spotted a few errors in kernel.log and had to restore IOCDStorageFamily.kext and IODVDStorageFamily.kext to fix them.

Revolution 0.6.18

Oh bugger. I just noticed something! The following change wasn't made:
-orig_address = (struct SMBEntryPoint *)0xfc430; // getAddressOfSmbiosTable();
+orig_address = (struct SMBEntryPoint *) getAddressOfSmbiosTable();
Which basically means that you have to fix this yourself. Well either that or wait for Revolution 0.6.19 to come out.

#62
Master Chief

Master Chief

    Just Chief

  • Members
  • PipPipPipPipPipPipPipPip
  • 1,176 posts
  • Gender:Male
Time for another experiment – proof of concept

Time for another experiment. Today I like to show you how I replaced Chameleon's SMBIOS patcher with a stripped down version of my own. The basic idea is to incorporates a patched SMBIOS table in the boot loader. Let's jump right in and have a look at the new smbios_patcher.c:
maxStructureSize   = 0xc0; // taken from my dump!
modSMBIOS->entryPointRevision = 0;

modSMBIOS->formattedArea[0] = 0;
modSMBIOS->formattedArea[1] = 0;
modSMBIOS->formattedArea[2] = 0;
modSMBIOS->formattedArea[3] = 0;
modSMBIOS->formattedArea[4] = 0;

modSMBIOS->dmi.anchor[0] = 0x5f; // _
modSMBIOS->dmi.anchor[1] = 0x44; // D
modSMBIOS->dmi.anchor[2] = 0x4d; // M
modSMBIOS->dmi.anchor[3] = 0x49; // I
modSMBIOS->dmi.anchor[4] = 0x5f; // _
modSMBIOS->dmi.checksum = 0;
modSMBIOS->dmi.tableLength = tableLength;
modSMBIOS->dmi.tableAddress = (uint32_t) customSMBIOS;
modSMBIOS->dmi.structureCount = 0x47; // taken from my dump!
modSMBIOS->dmi.bcdRevision = 0x21;

// Fix checksum
modSMBIOS->dmi.checksum = 256 - checksum8(&modSMBIOS->dmi, sizeof(modSMBIOS->dmi));
modSMBIOS->checksum = 256 - checksum8(modSMBIOS, sizeof(*modSMBIOS));

return modSMBIOS;
} _linenums:0'>#include "smbios_patcher.h"inline struct SMBEntryPoint *getSmbios(){ int tableLength = sizeof(SMBIOS_Table); void *customSMBIOS = (void *)AllocateKernelMemory(tableLength); memcpy(customSMBIOS, SMBIOS_Table, tableLength); struct SMBEntryPoint *modSMBIOS = (struct SMBEntryPoint *)AllocateKernelMemory(sizeof(struct SMBEntryPoint)); modSMBIOS->anchor[0] = 0x5f; // _ modSMBIOS->anchor[1] = 0x53; // S modSMBIOS->anchor[2] = 0x4d; // M modSMBIOS->anchor[3] = 0x5f; // _ modSMBIOS->checksum = 0; modSMBIOS->entryPointLength = 0x1f; modSMBIOS->majorVersion = 2; modSMBIOS->minorVersion = 1; modSMBIOS->maxStructureSize = 0xc0; // taken from my dump! modSMBIOS->entryPointRevision = 0; modSMBIOS->formattedArea[0] = 0; modSMBIOS->formattedArea[1] = 0; modSMBIOS->formattedArea[2] = 0; modSMBIOS->formattedArea[3] = 0; modSMBIOS->formattedArea[4] = 0; modSMBIOS->dmi.anchor[0] = 0x5f; // _ modSMBIOS->dmi.anchor[1] = 0x44; // D modSMBIOS->dmi.anchor[2] = 0x4d; // M modSMBIOS->dmi.anchor[3] = 0x49; // I modSMBIOS->dmi.anchor[4] = 0x5f; // _ modSMBIOS->dmi.checksum = 0; modSMBIOS->dmi.tableLength = tableLength; modSMBIOS->dmi.tableAddress = (uint32_t) customSMBIOS; modSMBIOS->dmi.structureCount = 0x47; // taken from my dump! modSMBIOS->dmi.bcdRevision = 0x21; // Fix checksum modSMBIOS->dmi.checksum = 256 - checksum8(&modSMBIOS->dmi, sizeof(modSMBIOS->dmi)); modSMBIOS->checksum = 256 - checksum8(modSMBIOS, sizeof(*modSMBIOS)); return modSMBIOS;}
Which is a lot smaller and simpler, and thus easier to read, but there is a catch; The red values have to be taken from a dump. And while there are better ways to solve this, I have yet to decided what to do. How to implement it. Anyway. Here's my version of smbios_patcher.h:
#ifndef __LIBSAIO_SMBIOS_PATCHER_H#define __LIBSAIO_SMBIOS_PATCHER_H#include "libsaio.h"typedef UInt8  SMBString;typedef UInt8  SMBByte;typedef UInt16 SMBWord;typedef UInt32 SMBDWord;typedef UInt64 SMBQWord;struct DMIEntryPoint {    SMBByte    anchor[5];    SMBByte    checksum;    SMBWord    tableLength;    SMBDWord   tableAddress;    SMBWord    structureCount;    SMBByte    bcdRevision;} __attribute__((packed));struct SMBEntryPoint {    SMBByte    anchor[4];    SMBByte    checksum;    SMBByte    entryPointLength;    SMBByte    majorVersion;    SMBByte    minorVersion;    SMBWord    maxStructureSize;    SMBByte    entryPointRevision;    SMBByte    formattedArea[5];    struct DMIEntryPoint dmi;} __attribute__((packed));// Patched SMBIOS table in little endian formattedstatic uint32_t SMBIOS_Table[] ={     0x00001800, 0xF0000504, 0xDE900F06, 0x00017F8B, 0x05330000, 0xFFFF0C08, 0x72656D41, 0x6E616369,     0x67654D20, 0x65727461, 0x2073646E, 0x2E636E49, 0x30333100, 0x20202033, 0x2F323100, 0x322F3631, ...     0x00000008, 0x00000000, 0x00000000, 0x01000000, 0x39333156, 0x49554734, 0x7F000044, 0x00004704,     0x48068300, 0x00050100, 0x00000000, 0x00000000};#endif /* !__LIBSAIO_SMBIOS_PATCHER_H */
And before you start wondering... I took out the middle section [of smbios_patcher.h] because you get the picture without the extra data – you can find a complete example [of this data] in Revolution v0.6.13 and up. Please note that this example isn't loading a file from disk, but we could easily do that. Piece of a cake.

Getting the SMBIOS data

Creating the data for smbios_patcher.h was pretty easy. Here is how I did it:

1) I opened IORegistryExplore
2) Went to: Root -> MacPro3,1 -> bios -> AppleSMBIOS -> SMBIOS
3) Double clicked on the SMBIOS data and copied it [cmd+c].
4) Paste [cmd+v] it into HexEdit and save [cmd+s] it as smbios.dat.
5) Ran: sudo perl swap-5.pl smbios.dat > ~/Desktop/smbios-le.txt
6) Dumped the data in smbios_patcher.h

This however is not enough. It won't work without two values from your running version of Revolution / Chameleon. I used Revolution 0.6.19 and here's the lines I added to function getSmbios [in smbios_patcher.c]:
setVideoMode(0); // VGA_TEXT_MODE
printf("\n%04x", new_address->maxStructureSize);
printf("\n%04x", new_address->dmi.structureCount);
getc(); // press a key to pass gray background

return new_address;
} _linenums:0'>... new_address = smbiosDryRun(orig_address); smbiosRealRun(orig_address, new_address); setVideoMode(0); // VGA_TEXT_MODE printf("\n%04x", new_address->maxStructureSize); printf("\n%04x", new_address->dmi.structureCount); getc(); // press a key to pass gray background return new_address;}
Oh and one extra line at the top of smbios_patcher.h: extern void setVideoMode(int mode); Well. That's it. Bit of a hack. I know, but it works.

What's next

While this works, it is far too complicated. Period. Thus what we need is a simple tool to dump and convert our SMBIOS data. I would opt for an OS X specific tool. A tool that let's us work with the SMBIOS data [add/change/remove] would be a plus to me. That would be cool. Any takers?

Chameleon's new pref panel would be an excellent candidate as SMBIOS data collector/converter, but I don't know if Rekursor and/or Diebuche is willing to do add this feature (waiting for a reply).


Conclusions

My preliminary conclusions are as follow:

1) It works.
2) The boot file is 1785 bytes smaller (now 61.670 bytes).
- this despite the fact that I included the SMBIOS data (2770 bytes).
3) It is faster.
4) We want need some script or tool to rip out unused stuff like: COM1, FLOPPY, PRI_EIDE, PS/2 Mouse, PS/2 Keyboard and to rename slot names.

Attached Files



#63
scrax

scrax

    InsanelyMac Deity

  • Members
  • PipPipPipPipPipPipPipPipPipPip
  • 1,704 posts
  • Gender:Male
Hi, i've tried the last revolution (bug corrected) also with only one drive active in bios but it still hang on gey screen, using my ssdt...

#64
Master Chief

Master Chief

    Just Chief

  • Members
  • PipPipPipPipPipPipPipPip
  • 1,176 posts
  • Gender:Male

Hi, i've tried the last revolution (bug corrected) also with only one drive active in bios but it still hang on gey screen, using my ssdt...

I don't know what you have changed, but here are a few tips:

When it hangs at the gray background (before the Apple logo is shown) then this usually means that it can't find: /System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext
Copy this file to your USB stick and it should load.

When it hangs at the Apple logo, without a spinner, then it can't find the kernel [mach_kernel].

When it hangs at the spinner [below the Apple logo] then either a driver (kext) is missing or something else is wrong.

And when you disable all drives in the BIOS then you must have a copy of mach_kernel on your USB stick so that boot2 can find / load it. The kernel (and Extensions.mkext) will enable the hard drives, and boot from the drive you have specified in /Library/Preferences/SystemConfiguration/com.apple.Boot.plist (on your USB stick).

What is the: "Ignore ownership on this volume" setting for your USB stick i.e. keep an eye on group / ownership and file permissions.

#65
Master Chief

Master Chief

    Just Chief

  • Members
  • PipPipPipPipPipPipPipPip
  • 1,176 posts
  • Gender:Male
This is my current kernel.log (hack @2.5GHz stock speed):
Feb 27 03:16:36 localhost kernel[0]: npvhash=4095Feb 27 03:16:36 localhost kernel[0]: PAE enabledFeb 27 03:16:36 localhost kernel[0]: 64 bit mode enabledFeb 27 03:16:36 localhost kernel[0]: Darwin Kernel Version 10.2.0: Tue Nov  3 10:37:10 PST 2009; root:xnu-1486.2.11~1/RELEASE_I386Feb 27 03:16:36 localhost kernel[0]: vm_page_bootstrap: 973636 free pages and 74940 wired pagesFeb 27 03:16:36 localhost kernel[0]: standard timeslicing quantum is 10000 usFeb 27 03:16:36 localhost kernel[0]: mig_table_max_displ = 73Feb 27 03:16:36 localhost kernel[0]: AppleACPICPU: ProcessorId=1 LocalApicId=0 EnabledFeb 27 03:16:36 localhost kernel[0]: AppleACPICPU: ProcessorId=2 LocalApicId=1 EnabledFeb 27 03:16:36 localhost kernel[0]: AppleACPICPU: ProcessorId=3 LocalApicId=2 EnabledFeb 27 03:16:36 localhost kernel[0]: AppleACPICPU: ProcessorId=4 LocalApicId=3 EnabledFeb 27 03:16:36 localhost kernel[0]: calling mpo_policy_init for QuarantineFeb 27 03:16:36 localhost kernel[0]: Security policy loaded: Quarantine policy (Quarantine)Feb 27 03:16:36 localhost kernel[0]: calling mpo_policy_init for SandboxFeb 27 03:16:36 localhost kernel[0]: Security policy loaded: Seatbelt sandbox policy (Sandbox)Feb 27 03:16:36 localhost kernel[0]: calling mpo_policy_init for TMSafetyNetFeb 27 03:16:36 localhost kernel[0]: Security policy loaded: Safety net for Time Machine (TMSafetyNet)Feb 27 03:16:36 localhost kernel[0]: Copyright © 1982, 1986, 1989, 1991, 1993Feb 27 03:16:36 localhost kernel[0]: The Regents of the University of California. All rights reserved.Feb 27 03:16:36 localhost kernel[0]: MAC Framework successfully initializedFeb 27 03:16:36 localhost kernel[0]: using 16384 buffer headers and 4096 cluster IO buffer headersFeb 27 03:16:36 localhost kernel[0]: IOAPIC: Version 0x20 Vectors 64:87Feb 27 03:16:36 localhost kernel[0]: ACPI: System State [S0 S3 S4 S5] (S3)Feb 27 03:16:36 localhost kernel[0]: RTC: Only single RAM bank (128 bytes)Feb 27 03:16:36 localhost kernel[0]: mbinit: done (64 MB memory set for mbuf pool)Feb 27 03:16:36 localhost kernel[0]: netkas presents fakesmc, a kext which emulates smc deviceFeb 27 03:16:36 localhost kernel[0]: From path: "uuid", Feb 27 03:16:36 localhost kernel[0]: Waiting for boot volume with UUID ...Feb 27 03:16:36 localhost kernel[0]: Waiting on ...Feb 27 03:16:36 localhost kernel[0]: com.apple.AppleFSCompressionTypeZlib load succeededFeb 27 03:16:36 localhost kernel[0]: AppleIntelCPUPowerManagementClient: readyFeb 27 03:16:36 localhost kernel[0]: Got boot device = ...Feb 27 03:16:36 localhost kernel[0]: BSD root: disk2s2, major 14, minor 8Feb 27 03:16:36 localhost kernel[0]: FireWire (OHCI) VendorID 1106 ID 3044 built-in now active, GUID ...; max speed s400.Feb 27 03:16:36 localhost kernel[0]: systemShutdown falseFeb 27 03:16:38 Chief kernel[0]: NVDANV50HAL loaded and registered.Feb 27 03:16:38 Chief kernel[0]: Previous Shutdown Cause: 0Feb 27 03:16:38 Chief kernel[0]: DSMOS has arrivedFeb 27 03:16:38 Chief kernel[0]: AppleIntelCPUPowerManagement: initialization complete
Please note that I disabled AUDIO and LAN for this run, and that I replaced the ID's with "..." but this is it. And while AUDIO and LAN adds another 5 seconds to my kernel.log... I do not see a change in the actual boot time. They are both the same. Time for drastic measures. Time for me to figure out what it is that makes the spinner [below the Apple logo] spin. Well. It is mach_kernel but I mean why it is taking so long, and if we can speed it up somehow.

Let's have another look at the following list:
AppleACPIPlatform.kext [not cached and thus required]
AppleAHCIPort.kext
AppleAPIC.kext
AppleFileSystemDriver.kext
AppleFSCompressionTypeZlib.kext
AppleHIDKeyboard.kex
t [Required for Apple keyboard / AppleBluetoothHIDKeyboard.kext removed]
AppleHPET.kext
AppleIntelCPUPowerManagement.kext
AppleLPC.kext
AppleMatch.kext

ApplePlatformEnabler.kext
AppleProfileFamily.kext
AppleRTC.kext
AppleSMBIOS.kext
fakesmc.kext

IOACPIFamily.kext
IOAHCIFamily.kext
IOHIDFamily.kext [required for Apple keyboard]
IOPCIFamily.kext
IOPlatformPluginFamily.kext
IOSCSIArchitectureModelFamily.kext
IOSCSIParallelFamily.kext
IOStorageFamily.kext

OSvKernDSPLib.kext
Quarantine.kext
Sandbox.kext

System.kext _linenums:0'>AppleACPIPlatform.kext [not cached and thus required]AppleAHCIPort.kextAppleAPIC.kextAppleFileSystemDriver.kextAppleFSCompressionTypeZlib.kextAppleHIDKeyboard.kext [Required for Apple keyboard / AppleBluetoothHIDKeyboard.kext removed]AppleHPET.kextAppleIntelCPUPowerManagement.kextAppleLPC.kextAppleMatch.kext ApplePlatformEnabler.kextAppleProfileFamily.kextAppleRTC.kextAppleSMBIOS.kextfakesmc.kextIOACPIFamily.kextIOAHCIFamily.kextIOHIDFamily.kext [required for Apple keyboard]IOPCIFamily.kextIOPlatformPluginFamily.kextIOSCSIArchitectureModelFamily.kextIOSCSIParallelFamily.kextIOStorageFamily.kextOSvKernDSPLib.kextQuarantine.kextSandbox.kextSystem.kext
The same list from one of my previous posts. And I can remove all kexts that are marked green on this list – because I have them cached in Extensions.mkext on my USBBOOT already – but the others cannot be removed. But why? Time to check the kernel sources. The first file that I looked at was: bootstrap.cpp where I found the following lines:
static const char * sKernelComponentNames[] = {   // The kexts for these IDs must have a version matching 'osrelease'.   "com.apple.kernel",   "com.apple.kpi.bsd",   "com.apple.kpi.dsep",   "com.apple.kpi.iokit",   "com.apple.kpi.libkern",   "com.apple.kpi.mach",   "com.apple.kpi.private",   "com.apple.kpi.unsupported",   "com.apple.iokit.IONVRAMFamily",   "com.apple.driver.AppleNMI",   "com.apple.iokit.IOSystemManagementFamily",   "com.apple.iokit.ApplePlatformFamily",   #if defined(__ppc__) || defined(__i386__) || defined(__arm__)   /* These ones are not supported on x86_64 or any newer platforms.    * They must be version 7.9.9; check by "com.apple.kernel.", with    * the trailing period; "com.apple.kernel" always represents the    * current kernel version.    */    "com.apple.kernel.6.0",    "com.apple.kernel.bsd",    "com.apple.kernel.iokit",    "com.apple.kernel.libkern",    "com.apple.kernel.mach",#endif   NULL};
Which explains why it needs System.kext in /System/Library/Extensions/ – the kernel loads this file, despite the fact that it is already available from Extensions.mkext [on USBBOOT]. I don't know why it isn't using the one from Extensions.mkext but at least now we know that the kernel needs it.

Ok. I am done with this. This isn't really going to help us. Next :thumbsup_anim:

#66
scrax

scrax

    InsanelyMac Deity

  • Members
  • PipPipPipPipPipPipPipPipPipPip
  • 1,704 posts
  • Gender:Male

I don't know what you have changed, but here are a few tips:


I've merged the file you provided (0.6.18) in a copy of the chameleon2RC4 source folder, and then i added my ssdt (from the ssdt working with revolution 0.4) data instead of yours, dsdt data is the same.
then i've made this correction:
-orig_address = (struct SMBEntryPoint *)0xfc430; // getAddressOfSmbiosTable();
+orig_address = (struct SMBEntryPoint *) getAddressOfSmbiosTable();
compiling it gives me only a boot file so I used it on a Chameleon RC4 installation on usb stick but it hangs at the grey screen.

I've tried with your tips but nothing:
/Library/Preferences/SystemConfiguration/com.apple.Boot.plist and /System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext plus mach_kernel copied on usb stick, only one drive in bios active, and UUID in c.a.B.p but nothing change.
Mi last working revolution is the 0.4 posted in the P5K Pro topic with the PlatformUUID code you optimized.

#67
Master Chief

Master Chief

    Just Chief

  • Members
  • PipPipPipPipPipPipPipPip
  • 1,176 posts
  • Gender:Male

...
compiling it gives me only a boot file so I used it on a Chameleon RC4 installation on usb stick but it hangs at the grey screen.

Try this; disable all drives in the BIOS.

Edit: I am still trying to figure out why other people can't boot with the latest versions of Revolution, and I thought to have found something, but that wasn't it. I even switched back to the original 1303 BIOS [with only the logo data removed] to be sure that the in-BIOS version of Revolution isn't loading Extensions.mkext and/or mach_kernel

1) Did you check the file ownership and permissions?
- I used the same as the files on my hard drive.
2) What is the content of /Library/Preferences/SystemConfiguration/com.apple.Boot.plist?
- You do have something like: boot-id=uuid boot-uuid=... pointing to the boot drive ?
3) Are you booting in 32-bit mode?
- If not give it a try.
4) Do you have a RAID setup?
- I wonder about USB RAID setups... if that works. Going to give it a try.

#68
scrax

scrax

    InsanelyMac Deity

  • Members
  • PipPipPipPipPipPipPipPipPipPip
  • 1,704 posts
  • Gender:Male

Try this; disable all drives in the BIOS.

Edit: I am still trying to figure out why other people can't boot with the latest versions of Revolution, and I thought to have found something, but that wasn't it. I even switched back to the original 1303 BIOS [with only the logo data removed] to be sure that the in-BIOS version of Revolution isn't loading Extensions.mkext and/or mach_kernel

1) Did you check the file ownership and permissions?
- I used the same as the files on my hard drive.
2) What is the content of /Library/Preferences/SystemConfiguration/com.apple.Boot.plist?
- You do have something like: boot-id=uuid boot-uuid=... pointing to the boot drive ?
3) Are you booting in 32-bit mode?
- If not give it a try.
4) Do you have a RAID setup?
- I wonder about USB RAID setups... if that works. Going to give it a try.


disable ALL drives? included the one there are the SL install? i'll try...

1) I've set permissions 775 on all the system folder copied on the usb (owner root:admin)
2) yes i've copied it from yours but it's in /Volumes/USB4Revolution/Library/Preferences/SystemConfiguration/com.apple.Boot.plist
3) yes always
4) No raid a simple usb booter

just to be sure is it all right that i have only boot compiled from the last Revolution source?

#69
Master Chief

Master Chief

    Just Chief

  • Members
  • PipPipPipPipPipPipPipPip
  • 1,176 posts
  • Gender:Male

disable ALL drives? included the one there are the SL install? i'll try...

Yes. I had similar problems. Stuck at the grey screen. The problem is that I can't remember what it was. It might be as simple as pressing a key – since I had debug stuff in it – or something else. Can't remember. Sorry.

1) I've set permissions 775 on all the system folder copied on the usb (owner root:admin)
2) yes i've copied it from yours but it's in /Volumes/USB4Revolution/Library/Preferences/SystemConfiguration/com.apple.Boot.plist
3) yes always
4) No raid a simple usb booter

The name doesn't matter, but the number of partitions might. How many do you have? And GUID or not?

just to be sure is it all right that i have only boot compiled from the last Revolution source?

I used Dr Hurts installer [as a test] and only replaced /boot which works fine here.

I still think that it can't find Extensions.mkext on your USBBOOT. This might be due to group ownership and/or permission problems, but you can easily verify this, and add something like:
setVideoMode(0);
printf("\nWAIT");
getc();
so see where it stops doing anything.

#70
scrax

scrax

    InsanelyMac Deity

  • Members
  • PipPipPipPipPipPipPipPipPipPip
  • 1,704 posts
  • Gender:Male
I'm using Chameleon2RC4 v3 installer by Dr.Hurt on my USB stick

On the USB I have:
/Volumes/Revolution/System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext
/Volumes/Revolution/Library/Preferences/SystemConfiguration/com.apple.Boot.plist
/Volumes/Revolution/mach_kernel
/Volumes/Revolution/boot


-First SATA port:
2 partition in GUID one for SL and one for Time Machine Backups (of another Snow on another HD)

I can/will also make some test with a 8GB USB with all in it SL and Revolution if you think this could help.
Or i can use another old SATA HD just to have only one partition on it.

I still think that it can't find Extensions.mkext on your USBBOOT. This might be due to group ownership and/or permission problems, but you can easily verify this, and add something like:

setVideoMode(0);
printf("\nWAIT");
getc();
so see where it stops doing anything.


I can't figure where to put this code, I tried boot.c but I get errors in compilation.
Is there a way to have default 32bit boot ?


EDIT: Finally I can boot with 2 HD connected to SATA1 and SATA2 the second one is my SL install described above
It start's with the grey apple not in center like for a wrong resolution setting, but it's just a cosmetic issue.
It looks fast but after login looks like there is some problem with the SSDT code because device-id are the original one not the one injected by SSDT, graphic card also isn't recognized, and USB are not internal.
Another thing not good is that the PlatformUUID has changed, but also this need further test...

Now i'll try to understand why the SSDT is not working...

#71
Master Chief

Master Chief

    Just Chief

  • Members
  • PipPipPipPipPipPipPipPip
  • 1,176 posts
  • Gender:Male

...
EDIT: Finally I can boot with 2 HD connected to SATA1 and SATA2 the second one is my SL install described above

Can you still boot after disconnecting SATA2?

It start's with the grey apple not in center like for a wrong resolution setting, but it's just a cosmetic issue.

What do you have in com.apple.Boot.plist (on the USB stick)?

It's looks fast but after login it looks like there is some problem with the SSDT code because it looks like the device-id are the original one not the one injected by SSDT, graphic card also isn't recognized, and USB are not internal. Another thing not good is that the PlatformUUID has changed, but also this need further test...

Now i'll try to understand why the SSDT is not working...

It should be faster yes. And I didn't change the SSDT code – not for a while – and thus it should work. Working here.

#72
scrax

scrax

    InsanelyMac Deity

  • Members
  • PipPipPipPipPipPipPipPipPipPip
  • 1,704 posts
  • Gender:Male

Can you still boot after disconnecting SATA2?

I'll tryIt still boots, but disconnecting SATA1 because SATA2 is the HD I need to use, the one on SATA1 has another UUID

What do you have in com.apple.Boot.plist (on the USB stick)?

nothing more than "arch=i386 boot-id=uuid boot-uuid=8B09DAB6-B2F0-3C1F-9D74-0C133A62F158"

It should be faster yes. And I didn't change the SSDT code – not for a while – and thus it should work. Working here.

I've changed it because it's a little different for my mobo, I used your script to make it littke endian checking it's divisible by 4
this is what I'll use now (changed a little than the first boot to see if it works now EDIT: it works!):
0x54445353, 0x000005A4, 0x434D0C01, 0x00000000, 0x45574F50, 0x00004D52, 0x00000001, 0x4C544E49, 	0x20091112, 0x4E574608, 0x24100054, 0x5F52505F, 0x50434E08, 0x08020A55, 0x31545350, 0x08082A0B, 	0x32545350, 0x0807240B, 0x33545350, 0x10061D0B, 0x5F032F21, 0x505F4253, 0x45304943, 0x14494348, 	0x53445F11, 0x4DA4044D, 0x6A444943, 0x3A80860C, 0x054D103A, 0x535F032F, 0x43505F42, 0x44483049, 	0x4C144645, 0x53445F04, 0x1270044D, 0x620D0639, 0x746C6975, 0x006E692D, 0x00010311, 0x79616C0D, 	0x2D74756F, 0x11006469, 0x73040A07, 0x0D000003, 0x436E6950, 0x69666E6F, 0x61727567, 0x6E6F6974, 	0x02110073, 0x434D6000, 0x716A5044, 0x1060A460, 0x5F032F21, 0x505F4253, 0x4C304943, 0x14424350, 	0x53445F11, 0x4DA4044D, 0x6A444943, 0x1680860C, 0x1B4A1029, 0x535F032F, 0x43505F42, 0x30503049, 	0x825B3250, 0x46471A48, 0x5F083058, 0x00524441, 0x55535F08, 0x4514014E, 0x53445F19, 0x1270044D, 	0x0D181842, 0x632C3040, 0x61706D6F, 0x6C626974, 0x0E110065, 0x564E0B0A, 0x4E2C4144, 0x63614D56, 	0x30400D00, 0x7665642C, 0x5F656369, 0x65707974, 0x0A0B1100, 0x73696408, 0x79616C70, 0x30400D00, 	0x6D616E2C, 0x12110065, 0x564E0F0A, 0x442C4144, 0x6C707369, 0x412D7961, 0x31400D00, 0x6D6F632C, 	0x69746170, 0x00656C62, 0x0B0A0E11, 0x4144564E, 0x4D564E2C, 0x0D006361, 0x642C3140, 0x63697665, 	0x79745F65, 0x11006570, 0x64080A0B, 0x6C707369, 0x0D007961, 0x6E2C3140, 0x00656D61, 0x0F0A1211, 	0x4144564E, 0x7369442C, 0x79616C70, 0x0D00422D, 0x4143564E, 0x17110050, 0x0004180A, 0x00000000, 	0x000C0003, 0x00000000, 0x00000700, 0x4E0D0000, 0x004D5056, 0x1C0A1F11, 0x00000001, 0x00000000, 	0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x4152560D, 0x6F742C4D, 0x736C6174, 	0x00657A69, 0x040A0711, 0x10000000, 0x7665640D, 0x5F656369, 0x65707974, 0x0A0F1100, 0x44564E0C, 	0x61502C41, 0x746E6572, 0x6F6D0D00, 0x006C6564, 0x170A1A11, 0x6469566E, 0x47206169, 0x726F4665, 	0x38206563, 0x20303036, 0x0D005447, 0x2D6D6F72, 0x69766572, 0x6E6F6973, 0x0A281100, 0x69566E25, 	0x20616964, 0x6F466547, 0x20656372, 0x30303638, 0x20544720, 0x6E65704F, 0x45204C47, 0x6E69676E, 	0x4D600065, 0x6A504443, 0x60A46071, 0x2F074010, 0x42535F03, 0x4943505F, 0x50305030, 0x25825B38, 	0x5F304D4A, 0x44415F08, 0x825B0052, 0x4952500B, 0x415F0844, 0x5B005244, 0x45530B82, 0x5F084443, 	0x01524441, 0x5037825B, 0x08415441, 0x5244415F, 0x0B825B01, 0x44495250, 0x44415F08, 0x825B0052, 	0x4345530B, 0x415F0844, 0x14015244, 0x53445F11, 0x4DA4044D, 0x6A444943, 0x9E80860C, 0x04471026, 	0x535F042F, 0x43505F42, 0x30503049, 0x414C3950, 0x3214304E, 0x4D53445F, 0x20127004, 0x75620D04, 	0x2D746C69, 0x11006E69, 0x0D010103, 0x61636F6C, 0x6E6F6974, 0x0A051100, 0x60003102, 0x5044434D, 	0xA460716A, 0x07411060, 0x535F032F, 0x43505F42, 0x43503049, 0x825B4249, 0x5246054F, 0x5F085257, 	0x0C524441, 0x00030000, 0x50475F08, 0x140B0A45, 0x445F0447, 0x70044D53, 0x0D063412, 0x6C697562, 	0x6E692D74, 0x01031100, 0x77660D00, 0x74726F70, 0x07110073, 0x0002040A, 0x640D0000, 0x63697665, 	0x64692D65, 0x0A071100, 0x00304404, 0x434D6000, 0x716A5044, 0x1060A460, 0x5F032F21, 0x505F4253, 	0x53304943, 0x14415441, 0x53445F11, 0x4DA4044D, 0x6A444943, 0x8180860C, 0x2F211026, 0x42535F03, 	0x4943505F, 0x43485530, 0x5F111431, 0x044D5344, 0x49434DA4, 0x860C6A44, 0x103A3480, 0x5F032F21, 	0x505F4253, 0x55304943, 0x14324348, 0x53445F11, 0x4DA4044D, 0x6A444943, 0x3580860C, 0x2F21103A, 	0x42535F03, 0x4943505F, 0x43485530, 0x5F111433, 0x044D5344, 0x49434DA4, 0x860C6A44, 0x103A3680, 	0x5F032F21, 0x505F4253, 0x55304943, 0x14344348, 0x53445F11, 0x4DA4044D, 0x6A444943, 0x3780860C, 	0x2F21103A, 0x42535F03, 0x4943505F, 0x43485530, 0x5F111435, 0x044D5344, 0x49434DA4, 0x860C6A44, 	0x103A3880, 0x5F032F21, 0x505F4253, 0x55304943, 0x14364348, 0x53445F11, 0x4DA4044D, 0x6A444943, 	0x3980860C, 0x2F21103A, 0x42535F03, 0x4943505F, 0x43485530, 0x5F111449, 0x044D5344, 0x49434DA4, 	0x860C6A44, 0x083A3C80, 0x30424449, 0x040A0711, 0x00000000, 0x42444908, 0x0A071131, 0x00000004, 	0x094F1400, 0x4449434D, 0x0945A002, 0x697B7069, 0x8800FF0A, 0x30424449, 0x7A700000, 0x000B697B, 	0x080A00FF, 0x44498800, 0x00013042, 0x7B931FA0, 0x00000C69, 0x0000FFFF, 0x02111270, 0x7665640D, 	0x2D656369, 0x49006469, 0x60304244, 0x7A0449A1, 0x69100A69, 0x0A697B70, 0x498800FF, 0x00314244, 	0x7B7A7000, 0xFF000B69, 0x00080A00, 0x42444988, 0x70000131, 0x0D042012, 0x646E6576, 0x692D726F, 	0x44490064, 0x640D3042, 0x63697665, 0x64692D65, 0x42444900, 0x434D6031, 0x71685044, 0xA460A460, 	0xA3A3A300


EDIT: Ok after changing the first SSDT code i used with this it works, now i have all the device correctly recognized and working as expected but the boot time is longer now i counted 58 spin...

EDIT2: The 58 spin was something wrong with jMicron, It was enabled but not recognized, now I've disabled it in bios and it boots in 12 spin 5 less than Chameleon2RC5 r118 on HD (on the SATA1 install). I think that maybe there is no code in SSDT i need to check...
Now I'm finally again able to continue testing Revolution.

EDIT3: I've modded again the SSDT to match the DSDT I use with Chameleon and now JMicron works good, just a spin more at boot. I'm now trying to reduce the Extensions.mkext to a minimal one starting from yours suggestions, i'll post the results.

EDIT4: With the kest you listed and com.apple.iokit.IOBDStorageFamily i can boot without errors in kernel.log, but the boot time is now 28 rev instead of 14...
With this list (I don't have an apple keyboard) i get still more revs than with the full mkext:
AppleACPIPlatform.kext		AppleAHCIPort.kext		AppleAPIC.kext			AppleFSCompressionTypeZlib.kext	AppleFileSystemDriver.kext	AppleHPET.kext			AppleIntelCPUPowerManagement.kextAppleLPC.kext			AppleMatch.kext			ApplePlatformEnabler.kext	AppleProfileFamily.kext		AppleRTC.kext			AppleSMBIOS.kext fakesmc.kext		IOACPIFamily.kext		IOAHCIFamily.kextIOBDStorageFamily.kextIOCDStorageFamily.kextIODVDStorageFamily.kextIOHIDFamily.kext IOPCIFamily.kext IOPlatformPluginFamily.kext IOSCSIArchitectureModelFamily.kextIOSCSIParallelFamily.kextOSvKernDSPLib.kext Quarantine.kext Sandbox.kext System.kext

EDIT5: I'm writing from a fresh install on a 8GB USBstick with SL installed with my working Revolution,first start was more than 90 spins but after setting up user and a first permissions repair, it starts in 32 spins and that is not bad.
The strange thing is that there are none of the SATA device they are all disabled in BIOS like before but in SL i can see only the USB one.
Do you think this is normal?
Now i'll try to enable them in bios and see what happen...
Nothing, still SATA unrecognized from a USB install...

#73
Master Chief

Master Chief

    Just Chief

  • Members
  • PipPipPipPipPipPipPipPip
  • 1,176 posts
  • Gender:Male

...
nothing more than "arch=i386 boot-id=uuid boot-uuid=8B09DAB6-B2F0-3C1F-9D74-0C133A62F158"

You need to add something like:
<key>Graphics Mode</key>
		<string>1600x1200x32</string>
You are on your way, but it should boot in under 10 revs with all drives disabled in the BIOS. And please note that you need to check kernel.log because you should not see this: "Waiting for DMOS..." because that basically means that it can boot even faster – will take off 5 seconds from your kernel.log boot time.

Also. You need to boot at least a few times before everything is setup properly, but I have yet to figure out why it (some OS X process) works this way.

And yes. You should see all attached hard drives and USB drives on your desktop – that is when you have changed the finder preferences for it – otherwise it means that a required kext is missing.

Notes: I have five hard drives in my Hack of which one HD with three Snow Leopard partitions on it (Boot/Data and User) and another HD as secondary (backup) Snow Leopard boot drive, and I have never had any troubles booting with the latest versions of Revolution.

And Revolution v0.6.20 (Revolution v0.6.19 with patches from post #62 and some minor cleanups) on my main HD takes 6.10 revs to boot. Which is great because on another HD (same brand/type) it takes much longer to boot. Like 19-22 revs.

The only thing left to do is to try a (USB) RAID setup and/or to install SSD drives to speed up my boot process. Which won't happen soon due to my involvements in other projects.

#74
scrax

scrax

    InsanelyMac Deity

  • Members
  • PipPipPipPipPipPipPipPipPipPip
  • 1,704 posts
  • Gender:Male

You need to add something like: ...


Waiting for DMOS don't show up from a long time now, also in chameleon with the dsdt I'm using, same in Revolution since v0.4.3.

I can see all the drives and USB if I start with Revolution on USBBOOT, the problem comes when I boot with Revolution on a USB installation, in that case I can boot but no SATA drives are connected. Extensions.mkext and com.apple.Boot.plist are the default one 'cause it's all on the USB stick...
I'll try to use the Chameleon's boot to see if the drive are recognized.

I've also tried to make a RAID with 4x2GB usb key to have a 8GB Drive stripped with another 8GB USB key but I can't install boot0, so I can't go on...

My next step is to try Revolution v0.6.19 on HD instead of USB to see how fast it is, for now from USB it's faster than Chameleon2RC5 r118 booting from HD

#75
Master Chief

Master Chief

    Just Chief

  • Members
  • PipPipPipPipPipPipPipPip
  • 1,176 posts
  • Gender:Male

Waiting for DMOS don't show up from a long time now, also in chameleon with the dsdt I'm using, same in Revolution since v0.4.3.

Perfect then.

I can see all the drives and USB if I start with Revolution on USBBOOT, the problem comes when I boot with Revolution on a USB installation, in that case I can boot but no SATA drives are connected. Extensions.mkext and com.apple.Boot.plist are the default one 'cause it's all on the USB stick...
I'll try to use the Chameleon's boot to see if the drive are recognized.

First. I mainly boot without USBBOOT from my hard disk with Revolution v0.6.20 on it, and it doesn't matter if I enable or disable hard drives in the BIOS. I say this because it should work, without a hassle, if only it finds the kext for your SATA controller. Do you have all required kexts for it in /System/Library/Extensions and removed everything in: /System/Library/Caches/com.apple.kext.caches/Startup so that OS X can re-create it for you?

I've also tried to make a RAID with 4x2GB usb key to have a 8GB Drive stripped with another 8GB USB key but I can't install boot0, so I can't go on...

I can't test this myself right now – reviewing the new Intel i7 980 eXtreme – but hope to give it a try next week or so.

My next step is to try Revolution v0.6.19 on HD instead of USB to see how fast it is, for now from USB it's faster than Chameleon2RC5 r118 booting from HD

Sounds good.

p.s. Do you plan to including your SMBIOS data like I did here?

#76
scrax

scrax

    InsanelyMac Deity

  • Members
  • PipPipPipPipPipPipPipPipPipPip
  • 1,704 posts
  • Gender:Male

p.s. Do you plan to including your SMBIOS data like I did here?

I've tried from HD and the spin count is nearly the same as from USB in BIOS I have 2 HD active, so with F8 i can choose to load Revolution (on SATA2) or Chameleon (BIOS default on SATA1), and so from chameleon menu I can chose to start my SL install on SATA2
For the smbios data i'll try in next days and report the results.
I'm trying it right now, v0.6.20 working with my smbios data.
Nice, now i'll check the spins after some reboot...
I'm at 14-15 spin now, but i've parallels so it's a bit slower, need to try without it.

You need to add something like:

<key>Graphics Mode</key>
		<string>1600x1200x32</string>


Done with my resolution value but still not working, it's not a problem just a cosmetic issue...

#77
Master Chief

Master Chief

    Just Chief

  • Members
  • PipPipPipPipPipPipPipPip
  • 1,176 posts
  • Gender:Male

...
I'm trying it right now, v0.6.20 working with my smbios data. Nice, now i'll check the spins after some reboot...
I'm at 14-15 spin now, but i've parallels so it's a bit slower, need to try without it.

I still have Parallels installed, but not on my main boot drive anymore. The reason for this is that Parallels took too long to initialize – at boot time – and thus I moved it to a secondary boot drive. Let me know what it does with your boot time (after you moved the kexts).

Done with my resolution value but still not working, it's not a problem just a cosmetic issue...

I guess that it doesn't work with Chameleon either. Presumably because this has to match a supported VESA mode. No. This is not your desktop resolution, but merely the screen resolution at boot time.

#78
scrax

scrax

    InsanelyMac Deity

  • Members
  • PipPipPipPipPipPipPipPipPipPip
  • 1,704 posts
  • Gender:Male
I have 12 spin now without parallels

#79
Master Chief

Master Chief

    Just Chief

  • Members
  • PipPipPipPipPipPipPipPip
  • 1,176 posts
  • Gender:Male

I have 12 spin now without parallels

That's still twice as much (6.10 here) but maybe this is due to my stripped: /System/Library/Extensions/ folder
ALF.kext					IOAHCIFamily.kextAppleACPIPlatform.kext				IOATAFamily.kextAppleAHCIPort.kext				IOAudioFamily.kextAppleAPIC.kext					IOBDStorageFamily.kextAppleBMC.kext					IOBluetoothFamily.kextAppleEFIRuntime.kext				IOBluetoothHIDDriver.kextAppleFSCompressionTypeZlib.kext			IOCDStorageFamily.kextAppleFileSystemDriver.kext			IODVDStorageFamily.kextAppleGraphicsControl.kext			IOFireWireAVC.kextAppleGraphicsPowerManagement.kext		IOFireWireFamily.kextAppleHDA.kext					IOFireWireIP.kextAppleHIDKeyboard.kext				IOFireWireSBP2.kextAppleHPET.kext					IOFireWireSerialBusProtocolTransport.kextAppleHWSensor.kext				IOGraphicsFamily.kextAppleIntelCPUPowerManagement.kext		IOHDIXController.kextAppleIntelCPUPowerManagementClient.kext		IOHIDFamily.kextAppleKeyswitch.kext				IONDRVSupport.kextAppleLPC.kext					IONetworkingFamily.kextAppleLSIFusionMPT.kext				IOPCIFamily.kextAppleMCEDriver.kext				IOPlatformPluginFamily.kextAppleMIDIFWDriver.plugin			IOSCSIArchitectureModelFamily.kextAppleMIDIIACDriver.plugin			IOSCSIParallelFamily.kextAppleMIDIRTPDriver.plugin			IOSMBusFamily.kextAppleMIDIUSBDriver.plugin			IOSerialFamily.kextAppleMatch.kext					IOStorageFamily.kextAppleMobileDevice.kext				IOStreamFamily.kextApplePlatformEnabler.kext			IOSurface.kextAppleProfileFamily.kext				IOUSBFamily.kextAppleRTC.kext					IOUSBMassStorageClass.kextAppleSEP.kext					IOVideoFamily.kextAppleSMBIOS.kext				LegacyHDAPlatformDriver.kextAppleSMC.kext					LegacyYukon2.kextAppleSMCLMU.kext				NVDANV50Hal.kextAppleStorageDrivers.kext			NVDAResman.kextAppleUSBEthernetHost.kext			NVSMU.kextAppleUpstreamUserClient.kext			OSvKernDSPLib.kextAppleVADriver.bundle				Quarantine.kextAppleXsanFilter.kext				SMARTLib.pluginArcMSR.kext					Sandbox.kextAudioAUUC.kext					System.kextAudioIPCDriver.kext				TMSafetyNet.kextBootCache.kext					autofs.kextCellPhoneHelper.kext				cd9660.kextDSACL.ppp					cddafs.kextDSAuth.ppp					fakesmc.kextDVFamily.bundle					iPodDriver.kextDont Steal Mac OS X.kext			iTunesPhoneDriver.kextEAP-KRB.ppp					lspcidrv.kextEAP-RSA.ppp					mcxalr.kextEAP-TLS.ppp					msdosfs.kextGeForce.kext					ntfs.kextGeForce8xxxGLDriver.bundle			smbfs.kextGeForceGA.plugin				udf.kextGeForceVADriver.bundle				ufs.kextIO80211Family.kext				webcontentfilter.kextIOACPIFamily.kext				webdav_fs.kext


#80
scrax

scrax

    InsanelyMac Deity

  • Members
  • PipPipPipPipPipPipPipPipPipPip
  • 1,704 posts
  • Gender:Male

That's still twice as much (6.10 here) but maybe this is due to my stripped: /System/Library/Extensions/ folder

Can be also the quad core CPU instead of mine dualcore, maybe in part, or not?

I'll try to reduce mine /S/L/E folder...

I guess that it doesn't work with Chameleon either. Presumably because this has to match a supported VESA mode. No. This is not your desktop resolution, but merely the screen resolution at boot time.

Yes it's the screen resolution at boot but with Chameleon adding the right resolution worked, with Revolution v0.6.20 at boot it's the apple that is not in center but the resolution looks right, desktop resolution is ok.





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

© 2014 InsanelyMac  |   News  |   Forum  |   Downloads  |   OSx86 Wiki  |   Mac Netbook  |   PHP hosting by CatN  |   Designed by Ed Gain  |   Logo by irfan  |   Privacy Policy