Last point: question on your drivers.c layout.
(boot_partition)/Extra/10.X
is the X there a coded variable or did you just shorten it for clarity's sake?
Sorry, for the delay (vacation).
The 10.X is shorthand, but it isn't too far off. drivers.c has
sprintf(dirSpecExtra, "bt(0,0)/Extra/%s/", &gMacOSVersion);
which says to look at (boot partition)/Extra/SOMETHING/ where gMacOSVersion is the SOMETHING that gets inserted. Even if you didn't know where to start, you could grep for "Extra" and see what that got you. You can grep for the gMacOSVersion variable in the source code folder:
grep -e "gMacOSVersion" -r /path/to/chameleon/source
which gets:
~/Desktop/Chameleon-2.0-RC3-r658-src/i386/boot2/boot.c: strncpy(gMacOSVersion, val, MIN(len, 4));
~/Desktop/Chameleon-2.0-RC3-r658-src/i386/boot2/boot.c: gMacOSVersion[MIN(len, 4)] = '\0';
~/Desktop/Chameleon-2.0-RC3-r658-src/i386/boot2/boot.c: verbose("Loading Darwin %s\n", gMacOSVersion);
~/Desktop/Chameleon-2.0-RC3-r658-src/i386/boot2/drivers.c:extern char gMacOSVersion;
~/Desktop/Chameleon-2.0-RC3-r658-src/i386/boot2/drivers.c: sprintf(dirSpecExtra, "bt(0,0)/Extra/%s/", &gMacOSVersion);
so hunting for gMacOSVersion in boot.c, you get:
// Find out which version mac os we're booting.
if (!loadConfigFile("System/Library/CoreServices/SystemVersion.plist", &systemVersion) )
if (getValueForKey("ProductVersion", &val, &len, &systemVersion))
{
// getValueForKey uses const char for val
// so copy it and trim
strncpy(gMacOSVersion, val, MIN(len, 4));
gMacOSVersion[MIN(len, 4)] = '\0';
}
which happens very early in the boot process. It loads /System/Library/CoreServices/SystemVersion.plist. You can see it for yourself:
open -a TextEdit /System/Library/CoreServices/SystemVersion.plist
and find the ProductVersion (say 10.5.
. The strncpy copies at most 4 characters ('1', '0', '.' & '5'). So here, gMacOSVersion = 10.5 - which is the how & why Chameleon searches for a 10.X folder.