Jump to content

Still Waiting For Root Device, Lenovo G770


daz1uk
 Share

18 posts in this topic

Recommended Posts

Hi,

 

Today I took the plunge and updated to 10.8 but now can boot without safe mode, I have the error "still waiting for root device".

 

When I try the -f flag I get this:

5ead857f-924c-b2c2.jpg

 

Can anyone help?

 

Also my USB doesn't work, I was going to try updating my boot loader but can't without USB.

 

Using KernelCache=No, gives me the same result as above picture.

Link to comment
Share on other sites

From the picture you posted above you'll need to remove voodoohda.

Boot into the installer and open up terminal and type the following:

rm -rf /Volumes/"Your hdd"/System/Library/Extensions/VoodooHDA.kext

  • Like 1
Link to comment
Share on other sites

Ok, when I try and use kernelcache=yes, I get this:

 

5ead857f-a034-b405.jpg

 

Any ideas?

 

Because right now I have no networking, which I'm assuming is a result of not using the kernel cache?

 

Something else odd is that myhack no longer see's my hard drive in order to run myfix, I have absolutely no idea why that would be.

Link to comment
Share on other sites

Delete flag kernelcache=yes,in Terminal copy these 2 command:

sudo kextcache -system-prelinked-kernel -all-loaded

 

and

 

sudo kextcache -v 1 -a i386 -a x86_64 -m /System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext -z /System/Library/Extensions/

 

Reboot :thumbsup_anim:And Voila

  • Like 1
Link to comment
Share on other sites

Delete from your Extra Folder Smbios.plist file ,or rename your existing MAC model.... :hammer:

For enable AppleSMC.kext you need good Smbios.plist and create thermal profile inside kext,and see-no error :wink2: after reboot

For IOuserEthernet error you need kext for Ethernet inside IONetworking,and error stoped

Link to comment
Share on other sites

Boots fine but says kexts are outdated?

I'm assuming you needed my fix to get beyond the "still waiting for root device" error.

touch /System/Library/Extensions to let the system rebuild your cache and reboot. Using kextcache to rebuild your cache manually is error prone and not recommended (per the OSX man pages even).

Link to comment
Share on other sites

Husaber,

 

Thanks for your help today it is much appreciated.

 

bcc9,

 

Thanks for the info, but no, I managed to get it to boot, simply by setting usekernelcache=no. I then ended up deleting the kernelcache flag completely as per instructions in this thread.

 

Although I will look further into your post shortly to see if there is anything there that can help with my system.

 

At this point in time I'm considering a fresh install and starting again from scratch.

Link to comment
Share on other sites

Delete from your Extra Folder Smbios.plist file ,or rename your existing MAC model.... :hammer:

For enable AppleSMC.kext you need good Smbios.plist and create thermal profile inside kext,and see-no error :wink2: after reboot

For IOuserEthernet error you need kext for Ethernet inside IONetworking,and error stoped

 

You got any pointers on where I can read about creating a thermal profile please?

Link to comment
Share on other sites

To create thermal Profile is easy....but you need good smbios.plist for your mobo...

check with this app who is your the same mobo from Mac PC:Mactracker.app

http://www.projectos...p?showtopic=359

Link to comment
Share on other sites

Ok,enable it..thermal profile:

Vanilla Speed Step

 

This is by far the trickiest of all DSDT related fixes. If you are unsure of what you are doing you can use VoodooPowerMini.kext, and it would do the trick for you. But it will not be as effective as vanilla solution, because it doesn't enable C-states.

 

There are three different CPU states defined in ACPI - P-states, C-states and T-states. We don't care about the latter.

 

P-states - are actual speed steps, various frequencies/voltages combinations are defined, so that CPU can use less power when it's not under heavy load. You can even adjust those states for undervoltage (Google it) to make your CPU eat less power at the highest frequency.

 

C-states - are the states of CPU deep sleep, when it almost shuts off its entire core parts when idle. In modern CPUs there are tens of C-states. In Core 2 Duo on mobile platform (different on desktops) four C-states are defined, but only three C-states can work simultaneously (C1, C2, C3 or C1, C2, C4). But it's still more than enough to save a lot of power/temperature. With C-states enabled my CPU core temperature dropped 10-15 degrees Celcius!

 

SpeedStep functionality in OSX depends on a combination of parameters - DSTD configuration and Mac model. First of all you need to study http://www.everymac.com to find a MacBook or MacBookPro model that is the closest to my ThinkPad in configuration using ICH7M platform and with Core 2 Duo 2.33GHz and intel 3100 it is almost identical to MacBookAir2.1. If you have ATI, your safe choice will be MacBookPro.

 

But you cannot use chosen model directly, you need to make your own fake model based on that MacBook family. I've decided that I will use MacBookAir4.1 (there was actual MacBookPro2,2) and I've updated my SMBIOS.plist accordingly:

Code:

<key>SMbiosversion</key>

<string>MBA41.88Z.00A5.B01.0611031449</string>

<key>SMproductname</key>

<string>MacBookAir2.1</string>

 

Next you need to create ACPI configuration for that model allowing OSX to use SpeedStep with that model. In SnowLeo there's /S/L/E/IOPlatformPluginFamily.kext. Inside (Show package contents) in the PlugIns folder there ACPI_SMC_PlatformPlugin.kext.

 

This is the kext that restricts or allows SpeedStep and C-states for particular Mac models. Before 10.6.2 all models configuration was stored in Info.plist inside that kext. Now in 10.6.2 there's another folder named Resources with separate configuration plists for each Mac that is supported by SnowLeo.

 

We are not going to change that kext contents, since we need to keep /S/L/E 100% vanilla. But, we are going to use the information that is stored in MacBookAir2.1.plist.

 

So, again, the path to the plist is:

/S/L/E/IOPlatformPluginFamily.kext/Contents/PlugIns/ACPI_SMC_PlatformPlugin.kext/Contents/Resources/

 

We now need to put this information into our legacy kext from above and update it to enable SpeedStep for our custom fake Mac model. But first put into legacy kext the following template inside IOKitPersonalities section (check screenshot above):

Code:

<key>ACPI_SMC_PlatformPlugin</key>

<dict>

<key>CFBundleIdentifier</key>

<string>com.apple.driver.ACPI_SMC_PlatformPlugin</string>

<key>IOClass</key>

<string>ACPI_SMC_PlatformPlugin</string>

<key>IOPlatformThermalProfile</key>

<dict>

[====Here we'll place info from MacBookAir2.1.plist====]

</dict>

<key>IOProbeScore</key>

<integer>1200</integer>

<key>IOPropertyMatch</key>

<dict>

<key>IOCPUNumber</key>

<integer>0</integer>

</dict>

<key>IOProviderClass</key>

<string>AppleACPICPU</string>

<key>IOResourceMatch</key>

<string>ACPI</string>

</dict>

 

Inside IOPlatformThermalProfile section you need to copy information from the same section from your chosen Mac model plist. In my case it was MacBookAir2.1.plist. After this I replaced all occurrences of MacBookPro2,1 with MacBookAir4.1.

 

Next we need to enable P-states and C-states. For P-states, edit copied plist configuration to include the following:

Code:

...

<key>ConfigArray</key>

<array>

<dict>

<key>model</key>

<string>MacBookPro2,3</string>

<key>restart-actions</key>

<dict>

<key>cpu-p-state</key>

<integer>0</integer>

</dict>

</dict>

</array>

<key>ControlArray</key>

...

<key>PLimitDict</key>

<dict>

<key>MacBookAir4.1</key>

<integer>0</integer>

</dict>

<key>StepDataDict</key>

....

 

In IORegistryExplorer you will spot the following. With IOService selected when you open info for CPU0@0->AppleACPICPI->ACPI_SMC_PlatformPlugin on right handside you should see that CPUPlimit is 0x0 and PerformanceStateArray contains 5 values. This means you're golden.

 

th_dsdt1.jpg

 

Most of vanilla speed step guides tell you that you also need to put P-states definition in your DSDT. P-states definition is picked up by OSX automatically from SSDT tables, so you need to put P-states into DSDT only if you want override them to enable undervoltage for example.

 

With C-states it is a bit different, but I'm not sure why. To enable C-states you need to find in one of previously extracted SSDT tables the following block Name (C1M4, Package (0x04). This block defines three C-states - C1, C2 and C4. You can also use C1M3 or C1M2 or C1M1 (different combinations of C-states) which are defined within the same SSDT. You should then put it into your DSDT like this:

Code:For Core 2 Duo only.......This is visual from my DSDT-DONT COPY

 

Scope (_PR)
  {
   Processor (CPU0, 0x00, 0x00001010, 0x06)
   {
   }
   Processor (CPU1, 0x01, 0x00001010, 0x06)
   {
   }
  }
  Scope (_PR.CPU0)
  {
   Name (C1M4, Package (0x04)
   {
	   0x03,
	   Package (0x04)
	   {
		   ResourceTemplate ()
		   {
			   Register (FFixedHW,
				   0x01,			   // Bit Width
				   0x02,			   // Bit Offset
				   0x0000000000000000, // Address
				   0x01,			   // Access Size
				   )
		   },
		   One,
		   One,
		   0x03E8
	   },
	   Package (0x04)
	   {
		   ResourceTemplate ()
		   {
			   Register (SystemIO,
				   0x08,			   // Bit Width
				   0x00,			   // Bit Offset
				   0x0000000000001014, // Address
				   ,)
		   },
		   0x02,
		   One,
		   0x01F4
	   },
	   Package (0x04)
	   {
		   ResourceTemplate ()
		   {
			   Register (SystemIO,
				   0x08,			   // Bit Width
				   0x00,			   // Bit Offset
				   0x0000000000001016, // Address
				   ,)
		   },
		   0x03,
		   0x39,
		   0x64
	   }
   })
   Method (_CST, 0, NotSerialized)
   {
	   Return (C1M4)
   }
  }
  Scope (_PR.CPU1)
  {
   Method (_CST, 0, NotSerialized)
   {
	   Return (^^CPU0._CST ())
   }
  }

 

 

What we do here is that we define/override _CST() method for each of our CPU cores, and this method will return defined package of three C-states we've chosen. You can try to use my C-states, chances are they are the same across all Core Duo / Core 2 Duo family. There's no harm if you have different C-states defined, the section simply won't work and will be ignored by OSX.

 

The last step for C-states is to add a couple of new sub-sections to legacy kext inside IOPlatformThermalProfile section:

Code:

<string>ACPI_SMC_PlatformPlugin</string>

<key>IOPlatformThermalProfile</key>

<dict>

<key>CStateDemotionDict</key>

<dict>

[====skipped, check attached Extra.zip for reference====]

</dict>

<key>CStateDict</key>

<dict>

[====skipped, check attached Extra.zip for reference====]

</dict>

.....

 

th_dsdt3.jpg

 

Once you've done all of this and regenerated mkext caches with pfix, reboot and check IORegistryExplorer (see the screenshot above). If you have successfully enabled C-states, you will see CSTInfo parameter. If you don't see it, that means you have no C-states enabled.

  1. That's it, you're done with vanilla speed step. Check CPU temperature (google iStat) and compare it to what you have in Windows or what you've had before your vanilla speed step. You will be surprised.

  • Like 1
Link to comment
Share on other sites

 Share

×
×
  • Create New...