Jump to content

How to boost the OS X boot process...


1,027 posts in this topic

Recommended Posts

p.s. You have a good camera, as your debug photos are crystal clear. :)

 

Thanks, some are bit blured, depends how late it was when I took the pic :) - It's just a small Canon IXUS but it's got a great lens and nice macro setting.

Link to comment
Share on other sites

Hi FKA,

 

I'll start writing a short document with tips. Starting with drivers. Should help people to understanding what should happen in terms of DEBUG_DRIVERS output.

 

BTW: Signed a movie contract earlier today. Seriously! Should come out in 2012. Filmed this summer in San Fransisco. Can't tell anything more. New territory for me. Fun stuff. Anyway. Let's get some work done now :rolleyes:

 

Oh sorry you want Debug Drivers output?!

Just you did say : "BTW. Revolution loads /Extra/Extensions.mkext and with DEBUG_BOOT set to 1 it dumps:"

 

??

 

A doco' would be great of you find the time :)

 

D

Link to comment
Share on other sites

BTW: Signed a movie contract earlier today. Seriously! Should come out in 2012. Filmed this summer in San Fransisco. Can't tell anything more. New territory for me. Fun stuff. Anyway. Let's get some work done now :)

 

 

Congrats, although all of us here already know you are a super :rolleyes:

Link to comment
Share on other sites

Hi DHP.... now movie star I read?.. is there no end to your talent?

 

I added a couple of printf's to the GetDirEntry function in /libsaio/sys.c to try to find out why the code doesn't load kexts from Lion's /S/L/E on my system. It might not be much but hopefully it gives you something to go on..

 

The function with the added printf's:

// GetDirEntry - LOW-LEVEL FILESYSTEM FUNCTION.
//               Fetch the next directory entry for the given directory.

long GetDirEntry(const char * dirSpec, long * dirIndex, const char ** dirEntry, long * flags, long * time)
{
const char * dirPath;
BVRef        bvr;

// Resolve the boot volume from the dir spec.

printf("blackosx: In GetDirEntry() in sys.c \n");

   if ((bvr = getBootVolumeRef(dirSpec, &dirPath)) == NULL)
{
	printf("blackosx: Entered - if ((bvr = getBootVolumeRef… \n");
	return -1;
}

// Return 0 on success, or -1 if there are no additional entries.

printf("blackosx: Left - if ((bvr = getBootVolumeRef… \n");

return bvr->fs_getdirentry(bvr, (char *)dirPath, dirIndex, (char **)dirEntry, flags, time, 0, 0);
}

 

And the debug result:

post-331032-1299364868_thumb.jpg

 

So the code doesn't enter the if statement...

Link to comment
Share on other sites

@FKA: Attached is what I have so far. Needs more work, but like I said (friends arrived already). Feel free to correct me (anyone).

 

Hi Dutch

 

Firstly I've compared S/L/C/c/Extensions.mkext from my working install and from revolution install (as one is still generated despite an incomplete boot.) and they are identical!

 

mkextcam.txt

mkextrev.txt

 

Secondly 'dedug drivers':

 

I do see "gKextLoadStatus != 3" but I'm unclear if that is in referance to my Extra/Extensions.mkext or system mkext.

 

Please note there is no prelinked kernel as caches have just been cleared.

 

post-275122-1299368275_thumb.jpg

post-275122-1299368301_thumb.jpg

 

I hope you can make some more sense out of it than me?!

 

EDIT - Sorry missed a bit:

 

post-275122-1299370007_thumb.jpg

 

Oh and I look forward to seeing the movie :)

 

D

Link to comment
Share on other sites

Oh great.

An error occurred (-10810) while trying to launch System Profiler

What have I done :(

 

p.s. Works when I start the app (System Profiler) but fails from the 'About This Mac' dialog. Great. I did start the Lion version yesterday so that might explain it. Fixed permissions. Still no go.

 

You tried trashing ~/Library/Preferences/com.apple.loginwindow.plist

 

http://discussions.apple.com/thread.jspa?threadID=1044586

 

D

Link to comment
Share on other sites

Cool. This is exactly what blackosx should see when he boots with -x or when Revolution failed to locate the (system) Extensions.mkext

Yes, I expect to see that but I haven't yet.. I'll try again this morning

 

Let me introduce the next generation of Revstart

 

Does a heap load of stuff, is LION ready (i think) just need DHP to spread her wings and weave her magic.

Check it out

Thanks STLVNUB - I'll take a look.

I was in the middle of completely re-structuing revstart by splitting it down in to sub-scripts etc.. then yesterday I was thinking why did I start doing this?... anyhow if I continue with it, then i'll include your changes.

Link to comment
Share on other sites

I've been trying to add more debug in to the code to discover why I can't load from /S/L/E..

However, I'm not too good with this C code.

 

In drivers.c I added the following printf's:

while (1)
{
	_DRIVERS_DEBUG_DUMP("O");

	printf("blackosx: In drivers.c, loadKexts() - About to call GetDirEntry \n");
	printf("blackosx: with target folder /System/Library/Extensions \n");
	printf("blackosx: passed by function loadDrivers() \n");
	printf("blackosx: &dirEntryIndexs= %d \n",dirEntryIndex);
	printf("blackosx: &dirEntryName = %d \n",dirEntryName);
	printf("blackosx: &dirEntryFlags = %d \n",dirEntryFlags);
	printf("blackosx: &dirEntryTime = %d \n",dirEntryTime);

	result = GetDirEntry(targetFolder, &dirEntryIndex, &dirEntryName, &dirEntryFlags, &dirEntryTime);

	if (result == -1)
	{
		_DRIVERS_DEBUG_DUMP("b");

 

In sys.c I added the following printf's:

	}

// Return 0 on success, or -1 if there are no additional entries.

printf("blackosx: In sys, GetDirEntry() - About to return bvr->fs_getdirentry \n");
printf("blackosx: dirPath = %c \n", dirPath);
printf("blackosx: dirIndex = %ld \n", dirIndex);
printf("blackosx: dirEntry = %c \n", dirEntry);
printf("blackosx: flags = %c \n", flags);
printf("blackosx: time = %c \n", time);

return bvr->fs_getdirentry(bvr, (char *)dirPath, dirIndex, (char **)dirEntry, flags, time, 0, 0);
}

Which gives me this in debug when booting from either HDD or USB:

post-331032-1299402117_thumb.jpg

 

However, I don't think this is much help as I don't as yet know what those reported values represent to my system and how I could used them to help me....

 

You do have your extensions in place on your USB-stick with GPT?

I have Extensions.mkext in USB/Extra if that's what you're asking, but nothing else.

And yes, using GPT.

Link to comment
Share on other sites

Hi DHP.

Ver 647 working nice here (SL), both dynamic and static.

 

Back in history a bit, the CPU speed issue. Still shows 800MHz on dynamic, but shows 1.6GHz with static. Took a look at the cpu/intel/dynamic_data. Don't understand it all yet, but I guess is something going on in there around line 395 onwards. Anyway, may dig at it more and I'll let you know if I figure it out!

Link to comment
Share on other sites

Hi FKA,

 

Thank you for looking that up for me. I did of course check (Google) but when it found something and clicked on the link... I kept on getting a "We will back soon". You know. Planned maintenance bull horns.

 

A small effort on my part :D

 

I'm still at a total loss as to why my Extra/Extensions aren't loading.

In debug under "LoadMultiKext /Extra" I see "LOadMultiKext (Success : 0) Is that a smilie face or does it mean 0 kexts where loaded?

 

D

Link to comment
Share on other sites

First. Booting with -x won't work this way. And what about /System/Library/Extensions? Do you have any extensions there?

I'm not using -x at the moment.

Yes, the 10.7 partition has /System/Library/Extensions or are you saying I need a /System/Library/Extensions folder on my USB?

Link to comment
Share on other sites

NOTE: I've also moved fakesmc from /S*/L*/E*/ to /E*/E*/

 

So it looks like, in our case, FakeSMC isn't being loaded whether it's in /S/L/E or /E/E !

Your verbose output show AppleACPIExpert isn't loaded prior to KP

 

Out of interest is you FakeSMC stock? have you made any edits to the info plist other than change the revision key?

 

D

Link to comment
Share on other sites

Is OSBundleRequired in the Info.plist set to Root or something else?

 

Root - but I do have a couple of Legacy kexts incorporated into the info plist. Namely the orange icon fix and a legacy for my bluetooth dongle. I actually don't even need the orange icon fix it's a leftover from another build!

 

This works fine with chameleon but maybe Revolution wont like this. Will have to test with a stock FakeSMC.kext this evening. Just wondered if scrax had a similar edit to the info.plist?

 

D

Link to comment
Share on other sites

So it looks like, in our case, FakeSMC isn't being loaded whether it's in /S/L/E or /E/E !

Your verbose output show AppleACPIExpert isn't loaded prior to KP

 

Out of interest is you FakeSMC stock? have you made any edits to the info plist other than change the revision key?

 

D

I've tried 2.5 and 2.7.1 only difference is that some plugin get loaded before kp with 2.7.1

 

only edit I made is the false debug in 2.5

 

Note. Why i don't have ocus pocus???

Link to comment
Share on other sites

I've tried 2.5 and 2.7.1 only difference is that some plugin get loaded before kp with 2.7.1

 

only edit I made is the false debug in 2.5

 

Thnaks for the reply

 

Note. Why i don't have ocus pocus???

 

 

Link to comment
Share on other sites

Lol.. yeah I got there in the end :)

Great. Hopefully I can get up and running with your EFI patch quicker than I did with the post-boot loading.

 

EDIT:

 

p.s. Currently working on the EFI patch that I didn't finish (some time ago already) and the keyword here is... device-path's. Now run: grep -re "boot-device-path" mach_kernel on both Snow Leopard and the Lion kernel. Nobody thought about that? Why? Because that's new? LOL I guess they want A Inc. to come bring the news personally. To Russia / China with no love? I don't think so :unsure:

whoa.. nicely examined...

Lion mach_kernel returns me this:

Binary file /mach_kernel matches

 

Then have a look at this (merlin):

02 01 0C 00 D0 41 08 0A 00 00 00 00 01 01 06 00
02 1F 03 12 0A 00 02 00 00 00 00 00 04 01 2A 00
02 00 00 00 28 40 06 00 00 00 00 00 90 0B 63 34
00 00 00 00 49 B1 3A 5A 16 11 72 4C 8F 5C 04 45
E9 4C DF 68 02 02 7F FF 04 00 

UUID: 5A3AB149-1116-4C72-8F5C-0445E94CDF68

So the first part of the UUID (5A3AB149-1116-4C72) is byte flipped and the remainder (8F 5C 04 45

E9 4C DF 68) isn't?

 

What does this mean you ask. Well. What about this: "can't perform kext scan"? The xnu/mach_kernel wants something new maybe?

Yes, I ask as I'm not a clever as you with this.. :)

but I think it does want something new....

Link to comment
Share on other sites

Great link.. Love it.

 

:unsure:

 

post-331032-1299433292_thumb.jpg

 

Hay balckosx

 

I see you are specifying arch=x86_64. Is this nessesary for LP64?

I've not specified anything as I presumed it will default to LP64.

 

D

 

P.S just trying to find something I maybe doing wrong .. .

Link to comment
Share on other sites

Something new it is. And I know why it isn't working for you, because I am using Lion's kernel cache. You can't because you don't have the new/changed boot.c (had to do some checking first). Hope to release it soon, but I'm out for the rest of the evening (hanging out with friends).

Wow...!.

Can i ask you don't go out and share your boot.c this evening?

(I'm joking of course.. enjoy your evening and I'll keep my eye out for your next post.... tick tock tick ....) :)

Link to comment
Share on other sites

 Share

×
×
  • Create New...