overdue-scratch

Author Topic: CFGetHostUUIDString: unable to determine UUID for host. Error: 35  (Read 63289 times)

0 Members and 1 Guest are viewing this topic.

Kabyl

  • VoodooLabs
  • Posts: 158
Re: CFGetHostUUIDString: unable to determine UUID for host. Error: 35
« Reply #15 on: May 26, 2009, 10:10:03 AM »
Again;
Quote
... OS X uses the MAC of the built-in NIC to generate it and it doesn't get it from SMBIOS

SM in SMUUID stands for SMBIOS. IOPlatformUUID is generated from the MAC address not from the UUID present in the SMBIOS (SMUUID key in Chameleon/smbios.plist).

Don't get confused/misled by modified AppleSMBIOS kexts (or SMBIOSResolver for that matter) setting the IOPlatformUUID.

eyvind

  • Member
  • Posts: 50
Re: CFGetHostUUIDString: unable to determine UUID for host. Error: 35
« Reply #16 on: May 26, 2009, 12:50:42 PM »
So both uuid.kext and the SMUUID value in smbios.plist do the same function? :-\

 thanx for the help kabyl and all the other programmers/repliers!
My new notebook:
MSI X-340, Slim as an Air
2 GB Ram, Intel 723 ULV processor (SSE3 capable), Intel 4500MHD Graphics
Running Windows 7 Ultimate 64bit, Ubuntu 9.10 64bit, Currently installing Snow Leopard Vanilla, BackTrack
Currently installing Snow Leopard Vanilla, BackTrack

Superhai

  • VoodooLabs
  • Posts: 102
Re: CFGetHostUUIDString: unable to determine UUID for host. Error: 35
« Reply #17 on: May 26, 2009, 01:36:12 PM »
Do make this easy to everybody, forget the UUID from SMBIOS. It is not used for anything. What matter is the IOPlatformUUID or also called HostUUID. I think part of this confusion is because when I added the PlatformUUID fix to SMBIOSResolver, many come to believe it was related to SMBIOS which it is not.
« Last Edit: May 30, 2009, 06:01:49 PM by rocksteady »

Kabyl

  • VoodooLabs
  • Posts: 158
Re: CFGetHostUUIDString: unable to determine UUID for host. Error: 35
« Reply #18 on: May 27, 2009, 04:11:16 AM »
hmm, not sure why you still keep setting UUID both from smbios.plist + UUID.kext since (as far as Chameleon is concerned), the devs confirmed that SMBIOS does not matter.

hacks have a fake EFI and totally different (butchered) firmware than Macs, as you tried before, issuing nvram -p from a Mac and a Hack, return totally different results

Well, that's not even the issue. Sinve I set the UUID to be exactly the same both in smbios.plist and UUID.kext.
So I'm not sure that both are setting it or only the UUID.kext.
What I'm wondering is where that stray IOPlatformUUID comes from that has no resemblance to anything I set, or for that matter, to any MAC address present in my system (and I compared it to AirPort, ethernet and BT PAN MAC addresses).

Further, whatever sets it, seems to place it into a different spot than where UUID.kext or smbios.plist values end up, and also seems to be the source of information for what nvram -p uses, because these two UUIDs look rather similar (formatting issues aside).

That's because Chameleon sets it (creates the /options node, you can check the FireWire thread), and again this is not SMUUID it is hardcoded in the booter which shouldn't happen, the booter shouldn't create the /options node in the first place (it creates issues, sometimes causes a kernel panic) because it's the job of AppleEFINVRAM.

This is a serious bug we knew and know about, but it went into the sources anyway. It is now been removed, so you shouldn't have issues with it in the next release(s).

(Added live link)

« Last Edit: May 30, 2009, 06:07:03 PM by rocksteady »

eyvind

  • Member
  • Posts: 50
Re: CFGetHostUUIDString: unable to determine UUID for host. Error: 35
« Reply #19 on: May 27, 2009, 11:44:42 AM »
Just for those people who have error 35: if you have a working ethernet card - it seems that it needs to be set as "inbuilt" for the mac address from it to be used. THis can be done through EFI strings which set this argument (see timemachine fixes).
My new notebook:
MSI X-340, Slim as an Air
2 GB Ram, Intel 723 ULV processor (SSE3 capable), Intel 4500MHD Graphics
Running Windows 7 Ultimate 64bit, Ubuntu 9.10 64bit, Currently installing Snow Leopard Vanilla, BackTrack
Currently installing Snow Leopard Vanilla, BackTrack

Gringo Vermelho

  • Forum Moderator
  • Posts: 611
  • The gray monster energy hat
Re: CFGetHostUUIDString: unable to determine UUID for host. Error: 35
« Reply #20 on: May 28, 2009, 08:53:40 PM »
Another way to fix the UUID 35 error is to patch your NIC into your DSDT.

If your NIC is not supported by OS X' own drivers, you'll still need a legacy.kext or modified plugin in IONetworkingFamily.kext to get it to work as usual.

But patching it in the DSDT sets the NIC as EN0 and internal (no device property string with tmfix needed) and gets rid of the UUID 35 error.

Koalala's ACPIPatcher works with some NICs. There's a solution for Marvell 88E8056 in the thread as well (thanks to Krazubu).
http://www.insanelymac.com/forum/index.php?showtopic=142434
10.9.5 - ASUS P8Z77-V Pro - i5 3570K - GTX 660 - Chameleon 2.3 svn-r2xxx
How to...
Install Chameleon: http://forum.voodooprojects.org/index.php/topic,649
Make your own Chameleon boot CD: http://forum.voodooprojects.org/index.php/topic,484.msg2131.html#msg2131

eyvind

  • Member
  • Posts: 50
Re: CFGetHostUUIDString: unable to determine UUID for host. Error: 35
« Reply #21 on: May 29, 2009, 03:15:10 AM »
Hmm i still have problems understanding the DSDT patching.... Is it possible to patch these ethernet options (inbuilt, etc) in Dsdt.aml (loaded by chameleon) or do they have to be patched straight into the BIOS dsdt?
My new notebook:
MSI X-340, Slim as an Air
2 GB Ram, Intel 723 ULV processor (SSE3 capable), Intel 4500MHD Graphics
Running Windows 7 Ultimate 64bit, Ubuntu 9.10 64bit, Currently installing Snow Leopard Vanilla, BackTrack
Currently installing Snow Leopard Vanilla, BackTrack

Gringo Vermelho

  • Forum Moderator
  • Posts: 611
  • The gray monster energy hat
Re: CFGetHostUUIDString: unable to determine UUID for host. Error: 35
« Reply #22 on: May 29, 2009, 03:25:43 AM »
Just to clear things up a bit - when talking about a patched BIOS, we're talking about patching the DSDT tables in the BIOS.
DSDT.aml is a file containing those DSDT tables, it lives on your hard drive and is loaded by Chameleon before OS X starts. If you're using DSDT.aml you don't need to flash your motherboard with a patched BIOS.

It's your choice if you want to flash your BIOS or use DSDT.aml. The end result is the same.

The DSDT section of my motherboard BIOS has been modified to remove CPU aliases only. This is necessary on my motherboard - otherwise it can't boot any OS X media (retail/OSX86/DVD/HDD) that doesn't already have a DSDT.aml on it.
Everything else is patched in DSDT.aml for easy access if I want to add or change something.

Dive in to the thread I linked to above and start reading. Then, just for fun, you can try extracting a DSDT.aml from your BIOS, decompile it and look at it in a text editor.

 
« Last Edit: January 31, 2010, 07:27:10 PM by Gringo Vermelho »
10.9.5 - ASUS P8Z77-V Pro - i5 3570K - GTX 660 - Chameleon 2.3 svn-r2xxx
How to...
Install Chameleon: http://forum.voodooprojects.org/index.php/topic,649
Make your own Chameleon boot CD: http://forum.voodooprojects.org/index.php/topic,484.msg2131.html#msg2131

rcfa

  • Member
  • Posts: 47
Re: CFGetHostUUIDString: unable to determine UUID for host. Error: 35
« Reply #23 on: May 29, 2009, 12:14:54 PM »
OK, I did some experimenting trying the different ways to solve this issue.

Using the UUID.kext gets rid of the errors, but in a "brute force" way, it will NOT set en0 to be recognized as "built-in"

Patching the BIOS' DSDT tables doesn't help in my case, because my built-in ethernet is not one that Apple uses.

Putting an EFI string into /Extra/com.apple.boot.plist gets the en0 recognized as built-in AND it sets the IOPlatformUUID to the proper value *without* UUID.kext being present.

So it would seem that the last approach is the best EXCEPT for one problem: all it does seems to happen too late in the boot process. As a result, early during the boot, there's a bunch of these Error 35 incidents. They stop later. But I'm not sure, if at that point "the damage is done" or not, i.e. can these early error 35 incidents be safely ignored or not.

Using both the UUID.kext AND the EFI string approach gets rid of all Error 35 incidents and it gets the ethernet adapter recognized as "built-in". So currently I use this double-whammy approach to be on the safe side, until someone can confirm that the error 35 early in the boot can be ignored and that these things self-heal once the IORegistry has the proper IOPlatformUUID value set. In that case, I could get rid of the UUID.kext.

But in any case, it seems, that the UUID.kext will at best be only part of the solution, but not the whole solution, while the EFI string approach might be a complete solution.

The SMUUID value, as said before, right now contributes nothing. Would be nice if a future version of Chameleon could take that value, do some "magic" and allow us to get both rid of the EFI string and the UUID.kext. Just dreaming... ;)

eyvind

  • Member
  • Posts: 50
Re: CFGetHostUUIDString: unable to determine UUID for host. Error: 35
« Reply #24 on: May 29, 2009, 02:10:53 PM »
@Beerkexd: Thanks for the heads-up.. Much appreciated :)... All the info floating around forums about DSDT patching is hard to understand. So once again : thanks mucho =) Anyway I think ill just go with the dsdt.aml file... Im still wary of patching my bios :P

@rfca: glad to see everything is working :)
I also dream of these two fixes being incorporated into chameleon. But right now the devs are working their asses off, and thats what counts... lol
My new notebook:
MSI X-340, Slim as an Air
2 GB Ram, Intel 723 ULV processor (SSE3 capable), Intel 4500MHD Graphics
Running Windows 7 Ultimate 64bit, Ubuntu 9.10 64bit, Currently installing Snow Leopard Vanilla, BackTrack
Currently installing Snow Leopard Vanilla, BackTrack

Kabyl

  • VoodooLabs
  • Posts: 158
Re: CFGetHostUUIDString: unable to determine UUID for host. Error: 35
« Reply #25 on: September 03, 2009, 08:57:52 PM »
To fix UUID error without kext (PlatformUUID.kext, UUID.kext, SMBIOSResolver.kext) and other hacks
replace this file in Chameleon source (i386/libsaio/).
It just add system-id to /efi/platform
after that IOPlatformExpert in kernel get this property and create PlatformUUID key based on system-id value.

Please provide a patch or a file which applies to the a Chameleon released code source. the file you posted is probably from pc_efi.

I had to remove your post because I can't remove the attachment alone, please repost.

Thanks.

IntVar

  • Entrant
  • Posts: 1
Re: CFGetHostUUIDString: unable to determine UUID for host. Error: 35
« Reply #26 on: September 04, 2009, 06:20:44 AM »
To fix UUID error without kext (PlatformUUID.kext, UUID.kext, SMBIOSResolver.kext) and other hacks
replace this file in Chameleon-2.0-RC2-r640 source (i386/libsaio/).
It just add system-id to /efi/platform
after that IOPlatformExpert in kernel get this property and create PlatformUUID key based on system-id value.

Kabyl

  • VoodooLabs
  • Posts: 158
Re: CFGetHostUUIDString: unable to determine UUID for host. Error: 35
« Reply #27 on: September 04, 2009, 07:05:48 AM »
Thanks, nice find!

And here is the relevant code from "iokit/Kernel/IOPlatformExpert.cpp"

Code: [Select]
void IOPlatformExpert::registerNVRAMController(IONVRAMController * caller)
{
    OSData *          data;
    IORegistryEntry * entry;
    OSString *        string = 0;
    char              uuid[ 36 + 1 ];

    entry = IORegistryEntry::fromPath( "/efi/platform", gIODTPlane );
    if ( entry )
    {
        data = OSDynamicCast( OSData, entry->getProperty( "system-id" ) );
        if ( data && data->getLength( ) == 16 )
        {
            SHA1_CTX     context;
            uint8_t      digest[ SHA_DIGEST_LENGTH ];
            const uuid_t space = { 0x2A, 0x06, 0x19, 0x90, 0xD3, 0x8D, 0x44, 0x40, 0xA1, 0x39, 0xC4, 0x97, 0x70, 0x37, 0x65, 0xAC };

            SHA1Init( &context );
            SHA1Update( &context, space, sizeof( space ) );
            SHA1Update( &context, data->getBytesNoCopy( ), data->getLength( ) );
            SHA1Final( digest, &context );

            digest[ 6 ] = ( digest[ 6 ] & 0x0F ) | 0x50;
            digest[ 8 ] = ( digest[ 8 ] & 0x3F ) | 0x80;

            uuid_unparse( digest, uuid );
            string = OSString::withCString( uuid );
        }

        entry->release( );
    }

    if ( string == 0 )
    {
        entry = IORegistryEntry::fromPath( "/options", gIODTPlane );
        if ( entry )
        {
            data = OSDynamicCast( OSData, entry->getProperty( "platform-uuid" ) );
            if ( data && data->getLength( ) == sizeof( uuid_t ) )
            {
                uuid_unparse( ( uint8_t * ) data->getBytesNoCopy( ), uuid );
                string = OSString::withCString( uuid );
            }

            entry->release( );
        }
    }

    if ( string )
    {
        getProvider( )->setProperty( kIOPlatformUUIDKey, string );
        publishResource( kIOPlatformUUIDKey, string );

        string->release( );
    }

    publishResource("IONVRAM");
}

This was only added in recent versions of XNU.

Now we need to auto-generate it somehow or, first thing I can think of is having a key/value pair in the Boot.plist. Using the UUID from SMBIOS wouldn't be a good idea since you can't be sure your board/BIOS has a proper implementation of SMBIOS.
« Last Edit: September 04, 2009, 07:18:55 AM by Kabyl »

geticus

  • Observer
  • Posts: 11
Re: CFGetHostUUIDString: unable to determine UUID for host. Error: 35
« Reply #28 on: September 13, 2009, 04:50:17 PM »
Hello everybody and thank you for all this stuff

Using UUID.mkext are not working for me.

@rcfa

What I have to do to put "EFI string into /Extra/com.apple.boot.plist gets the en0 recognized as built-in AND it sets the IOPlatformUUID to the proper value *without* UUID.kext being present"

Can you be a little more explicite ?

greatings


Moderator Edit: if i'm getting you right, you need to search for basic things like EFI strings, EFI Studio. Also hope that you're not confusing kexts with mkext (FAQ #11).
« Last Edit: September 17, 2009, 02:59:25 PM by rocksteady »

Gringo Vermelho

  • Forum Moderator
  • Posts: 611
  • The gray monster energy hat
Re: CFGetHostUUIDString: unable to determine UUID for host. Error: 35
« Reply #29 on: September 14, 2009, 04:10:11 AM »
You can use gfxutil to create the ethernet device properties string. Google netkas' forum to find it and read more about what it is and how to use it.

You can also use OSX86Tools or EFIStudio - both use gfxutil but inside a point and click interface.
10.9.5 - ASUS P8Z77-V Pro - i5 3570K - GTX 660 - Chameleon 2.3 svn-r2xxx
How to...
Install Chameleon: http://forum.voodooprojects.org/index.php/topic,649
Make your own Chameleon boot CD: http://forum.voodooprojects.org/index.php/topic,484.msg2131.html#msg2131