Sie sind auf Seite 1von 8

If you don't have time to read my story (which also describes some

interesting technical approaches) just scroll down this thread until a


"100% WORKING SOLUTION" text

Discrete AMD GPU of my 2011 MacBook Pro 8,2 has finally failed because of the
reasons mentioned here ( http://logicboardmac.blogspot.ru/ ) and
there ( https://www.macrumors.com/2015/02/19/2011-macbook-pro-repair-
program-apple/ ) . It has been working perfectly for 6 years under quite a high
load, even tried SETI@HOME mining at background! So I was confident that my
MBP is not affected by bad solder / bad soldering quality and didn't want to bring it
to Apple for a free repair program - partially because couldn't find the time to
pause my important software projects, partially because I was afraid that Apple
might give me a less reliable logic board or refuse a free repair because of the
several unrelated repairs that I did manually by myself earlier to save money:
changed thermal paste a few times, replaced the internal battery 2 times, replaced
a keyboard with broken buttons, etc. But it finally broke down last week: laptop's
screen image became distorted, it refused to boot OS X (always freezing half-way),
and - Apple free repair program has already ended! I know there are affordable
solutions like $50 BGA resoldering at unofficial local repair shop and that its
possible to get a new replacement HD 6750M chip from AliExpress for $35 or
cheaper ( http://www.aliexpress.com/item/DC-2...0028-216-0810028-BGA-
Chipset/32764872143.html or https://www.aliexpress.com/item/DC-2015-New-
216-0810001-216-0810001-Graphic-Chipset/32718112928.html , because don't
know if this is true - https://www.rossmanngroup.com/board...0604-replace-216-
0810005-gpu-with-216-0810028 ) to guarantee a successful repair, so the total
price of repair would be either $50 or $50+$35=$85 - less than $100 in any case.
But I don't like investing money to the old computers, so I have thought - what if
there is some hack to force MBP to use integrated graphics ALL THE TIME, even
while booting ? And then started to explore the possible solutions...

===

First of all, it is possible to successfully boot a MBP to OS X while still using the
failed GPU, after you remove the AMD drivers by booting in command line mode
(CMD+S) and entering these commands:
1) fsck -fy (to check a disk)
2) mount -uw / (mount a root filesystem with read/write permissions)
3) sudo mkdir /AMD_Kexts/ (make a directory to store the AMD drivers in case
you'll need them in future)
4) sudo mv /System/Library/Extensions/AMD*.* /AMD_Kexts/ (move the AMD
drivers)
5) sudo rm -rf /System/Library/Caches/com.apple.kext.caches/ (remove the
AMD drivers cache)
6) sudo mkdir /System/Library/Caches/com.apple.kext.caches/ (just in case
OS X will be dumb and will not recreate this directory, I am creating it for OS X)
7) sudo touch /System/Library/Extensions/ (to update the timestamps so that
new driver caches - without AMD drivers - will be definitely rebuilt)
8) sudo umount / (umount a partition to guarantee that your changes are flushed
to it)
9) sudo reboot

The degree of your inconvenience while doing these steps - strongly depends on
how heavily a screen's image is distorted in your case. In my case it was even more
difficult because the OS X partition became a "read-only" partition (because of too
many emergency shutdowns I did while desperately trying to boot OS X with a
failed GPU) so I had to remove a hard drive from MacBook Pro and (using a USB to
SATA 2.5" adapter taken from my portable HDD) attached it to a computer with
Linux, then followed these instructions:

https://superuser.com/questions/961401/mounting-hfs-partition-on-arch-linux (1st
answer) - carefully executed a number of commands, calculated a sizelimit for my
parition layout, and finally ran sudo mount -t hfsplus -o
force,rw,sizelimit=YOURNUMBER /dev/sdb2 /mnt to mount this HFS+ partition
to /mnt directory in read-write mode. Then I performed these "1)-7)" steps you
see above, and also repaired a filesystem by running sudo fsck.hfsplus -f
/dev/sdb2 before unmounting a partition with sudo umount /mnt and putting a
hard drive back to MBP...

===

This gave me a MBP which could boot to OS X although STILL using a broken AMD
GPU: so it screen's image is very distorted (could browse the Internet but quite
inconvenient to read a text), Launchpad is super laggy, and you can't switch to
Integrated GPU using gfxCardStatus because: without AMD drivers (which we had
to remove to successfully boot to OS X) Macbook Pro thinks its' internal screen is
External Display and gfxCardStatus tells it is impossible to switch because External
Display is using AMD GPU. Somewhere I found a suggestion that it is possible to
rebuild a gfxCardStatus from the source code
- https://github.com/codykrieger/gfxCardStatus - with removed or commented
out 156-166 lines in the ./gfxCardStatus/Classes/GSProcess.m to make it to
ignore the external display:

// find out if an external monitor is forcing the discrete gpu on


CGDirectDisplayID displays[8];
CGDisplayCount displayCount = 0;
if (CGGetOnlineDisplayList(8, displays, &displayCount) == noErr) {
for (int i = 0; i < displayCount; i++) {
if ( ! CGDisplayIsBuiltin(displays))
[list addObject:[NSDictionary dictionaryWithObjectsAndKeys:
Str(@"External Display"), kTaskItemName,
@"", kTaskItemPID, nil]];
}
}

So I rebuilt a gfxCardStatus using the instructions from the last reply of this issue -
https://github.com/codykrieger/gfxCardStatus/issues/229
(also had to download a MacOSX10.11.sdk from here
- https://github.com/phracker/MacOSX-SDKs/releases - unpack and copy it to
XCode's /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.pla
tform/Developer/SDKs/MacOSX10.11.sdk - because of the Apple's stupidity the
latest XCode for El Capitan does not include SDK for El Capitan!) However, it still
didn't work - gfxCardStatus only pretended that it has switched to Integrated GPU,
while in reality OS X did not let it switch! Even after I
edited ./gfxCardStatus/Classes/GSGPU.m file to enable the mysterious "Nuke it
from orbit switching" option, it still couldn't switch...

===

Then I discovered this interesting repository - https://github.com/0xbb/gpu-


switch - which is partially similar by its' source code to gfxCardStatus but also has
the "Login Hooks" (install_hooks.sh) to "automate the switching process for
login/logout". Sadly it didn't work for me... However, there is a very
interesting gpu-switch text file right at the root of this repository, which describes
the EFI variables!

https://github.com/0xbb/gpu-switch/blob/master/gpu-switch

After studying it and also reading this issue's comments


- https://github.com/0xbb/gpu-switch/issues/11 - I became confident to try this
solution, but found out that my MacBook Pro 2011 8,2 with OS X El Capitan 10.11.6
is in a VERY problematic situation:

1) rEFInd is not installed, and to install it - must disable SIP protection. But I
cannot boot to Recovery mode (Command+Option+R) or to OS X Installation
DVD/USB (hold Option), (to disable SIP), because they freeze while booting! -
although I removed AMD kexts from my system, of course these recovery tools are
using AMD kexts integrated to their design. Also cannot use Rootfool hack
( https://github.com/gdbinit/rootfool ) to disable SIP during runtime, because it
works only at OS X version older than 10.11.4

2) Tried overheating my Macbook Pro on purpose (forcing CPU usage to 100% and
putting it to a tightly closed bag) to force it to shutdown from overheating and then
quickly reboot so that Integrated graphics will be enabled during the boot time -
making it possible to boot to Recovery. But because of the wonderful high end
thermal paste I have applied not so long ago - cannot overheat it even after waiting
for a long time! At this point I thought that could either: a) remove AMD kexts
from Installation media, or b) to connect MBP's hard drive to a Linux machine again
and run a bunch of chmods to remove the SIP flags from the directories mentioned
here ( http://apple.stackexchange.com/questions/193368/what-is-the-rootless-
feature-in-el-capitan-really ) which could potentially make a system unbootable,
or c) to try installing rEFInd to HFS+ partition directly from a Linux machine with
root rights because it will bypass SIP --- but have not explored these options,
although some of them might have worked...

3) Wanted to boot a Linux LiveCD to edit the EFI variables from there, but no
matter what I did: tried booting straight without GRUB option modifications, tried
editing GRUB boot options (with "e" key) to add nomodeset / remove quiet
splash / or both in every combination , or like suggested in this article
( https://wiki.archlinux.org/index.php/MacBookPro8,1/8,2/8,3_(2011) ) also
add i915.modeset=0 radeon.modeset=0 or radeon.modeset=0 i915.modeset=1
i915.lvds_channel_mode=2 ; and then
pressed Fn+F10 or Shift+Ctrl+Fn+F10 to boot with these options: but the Linux
boot process always failed at different boot stages, no matter what popular user-
friendly Linux distribution or what version of it I am trying: tried many releases of
Ubuntu / Lubuntu / Fedora , even the old "AMD64 Mac" and "Alternate AMD64 Mac"
images, but they always failed - either at the very beginning of boot process (black
screen, or a black screen with a blinking or stuck _ character at the left upper
corner) or failed at the very end of it - right before it is supposed to show a
graphical desktop environment...

Later, totoe_84 wrote that he was able to boot Ubuntu in graphical mode
using the following setup for GRUB:

 To disable the AMD graphics card I added the following lines after set
gfxpayload=keep
outb 0x728 1
outb 0x710 2
outb 0x740 2
outb 0x750 0
 Next I added the following after quiet splash
i915.lvds_channel_mode=2 i915.modeset=1 i915.lvds_use_ssc=0
(based on https://ubuntuforums.org/showthread.php?t=2157775 )

===

Then I remembered that there are not-mainstream Linux distributions for advanced
users, which have a LiveCD without any graphical interface: you are dropped to
a pure console and you are supposed to install the system along with only those
graphical interfaces and software packages / groups of packages which you
explicitly select. For example: Arch Linux (https://www.archlinux.org/)
and Gentoo Linux (https://gentoo.org/) . Because their LiveCD does not have a
graphical interface, they could be booted without a problem to a pure Linux console
and there you could edit the EFI variables ! So here is a...

===
=== 100% WORKING SOLUTION
===
=== Force your MBP to ALWAYS use Intel integrated GPU (EFI variable fix)
===
=== to make it great again !
===

1) Create the Arch Linux LiveCD/LiveUSB :

You need a working computer for that and a spare CD/DVD/USB drive. After
downloading archlinux-2017.03.01-dual.iso (see the links below) you have to
check the integrity of the .ISO file to see if it is not corrupted (avoid I/O error,
printf: not found, chattr: not found, etc). After checking the integrity
of archlinux-2017.03.01-dual.iso and everything is OK, then you can generate
an ArchLinux boot disk.

archlinux-2017.03.01-dual.iso

MD5:
1d25235e7cebe45f93452fbc05a0fb66 archlinux-2017.03.01-dual.iso

SHA1
f426866ca632a35a3eeae8e4080cff25ec8da614 archlinux-2017.03.01-dual.iso

Official website ArchLinux (only Torrent) - See MD5 and SHA1 hash
numbers:

https://www.archlinux.org/releng/releases/2017.03.01/

The MD5 and SHA1 of the official ArchLinux website are the same as the mirrors
Virtapi.org and Belnet.be. The archlinux-2017.03.01-dual.iso on Virtapi.org and
Belnet.be are legitimate.

Virtapi.org:

http://archive.virtapi.org/iso/2017.03.01/

http://archive.virtapi.org/iso/2017.03.01/archlinux-2017.03.01-dual.iso

http://archive.virtapi.org/iso/2017.03.01/md5sums.txt

http://archive.virtapi.org/iso/2017.03.01/sha1sums.txt
Belnet:

http://ftp.belnet.be/pub/archlinux.org/iso/2017.03.01/

http://ftp.belnet.be/pub/archlinux.org/iso/2017.03.01/archlinux-2017.03.01-
dual.iso

http://ftp.belnet.be/pub/archlinux.org/iso/2017.03.01/md5sums.txt

http://ftp.belnet.be/pub/archlinux.org/iso/2017.03.01/sha1sums.txt

Check for archlinux-2017.03.01-dual.iso integrity (Mac OS):

Boot in Safe Mode (press SHIFT key at boot) -> no freeze Mac OS -> El Capitan or
Sierra.

HighSierra maybe freeze at boot time (Safe Mode). There were changes in the
HighSierra in relation to the AMD kexts loaded during the Safe Mode. More tests are
needed.

File downloaded -> /Users/Your_User/Downloads/archlinux-2017.03.01-dual.iso

Finder -> Applications -> Utilities -> Terminal:

MD5:
Code:
cd Downloads/

md5 archlinux-2017.03.01-dual.iso
MD5 (archlinux-2017.03.01-dual.iso) = 1d25235e7cebe45f93452fbc05a0fb66

SHA1:
Code:
cd Downloads/

shasum archlinux-2017.03.01-dual.iso
f426866ca632a35a3eeae8e4080cff25ec8da614 archlinux-2017.03.01-dual.iso

Or try the simplest way - No needed ArchLinux - Only MacOS:

1 - Boot Single User (press Command + S) at boot (If you have MacOS installed
on your hard drive).

2 - If you have a blank HD, then use the USB stick/Pendrive with the MacOS
installer (El Capitan, Sierra or HighSierra).

2.1 - Press Option key at boot, Position the mouse on the MacOS installer icon.

2.2 - Press Command + S and keep holding these two keys.

2.3 - Click the MacOS installer icon -> continue holding the Command + S keys
until you finish the MacOS installer Single User boot .
Enter these commands (change gpu-power-prefs to Intel GPU and boot verbose):

Code:
nvram fa4ce28d-b62f-4c99-9cc3-6815686e30f9:gpu-power-prefs=%01%00%00%00

nvram boot-args="-v"

reboot

If you've chosen the Arch Linux route, please continue reading:

Then you could either simply burn this ISO to CD/DVD (which later could be either
inserted to MBP's SuperDrive or External DVD Drive connected to MBP by two USB
cables) or create a bootable USB: use the great detailed instructions from this
page, https://wiki.archlinux.org/index.php/USB_flash_installation_media

2) Boot to it: insert this CD/DVD/USB to Macbook Pro, hold Option key while
booting, choose "EFI boot" (that is your bootable installation media), press "e" key
to edit the GRUB options of the Arch Linux archiso x86_64 UEFI CD menu entry
while it is selected at the main screen, add nomodeset to the end of this line and
press Enter. If everything is done correctly, you will find yourself at the Linux
console!

3) Edit EFI vars: looks like efivarfs filesystem is mounted by default! So you can
already cd /sys/firmware/efi/efivars and ls to explore this directory and see if
there is a "gpu-power-prefs-..." variable (where ... is UUID of this variable). If
there is such a variable, its better to remove it with rm. In my case
the efivarfs has been mounted by default with read/write permissions, but if you
are getting the "operation not permitted" message while attempting to rm, it
means that in your case efivarfs has been mounted as read-only and you need to
remount it with read-write permissions and try again (credits to totoe_84 for
this valuable addition) :
*) cd /
*) umount /sys/firmware/efi/efivars/
*) mount -t efivarfs rw /sys/firmware/efi/efivars/
*) cd /sys/firmware/efi/efivars/

If your screen is so distorted that it is difficult to see the letters, just start typing
the rm gpu-power-pre and then press TAB key for autocompletion. In my case
there were not such a EFI variable, only "gpu-active-..." and maybe somehow
related "gfx-saved-config-restore-status-..." . Then I looked again at that gpu-
switch text file (mentioned above, https://github.com/0xbb/gpu-
switch/blob/master/gpu-switch),
and entered THESE COMMANDS:

*) chattr -i "/sys/firmware/efi/efivars/" <----- skip this command

Actually a gpu-switch script had "${sysfs_efi_vars}/${efi_gpu}" but I didnt have a


"gpu-power-prefs-..." variable - so, partially by mistake, I didn't add that efi_gpu
suffix and entered this incomplete path accidentally

*) printf "\x07\x00\x00\x00\x01\x00\x00\x00" >


/sys/firmware/efi/efivars/gpu-power-prefs-fa4ce28d-b62f-4c99-9cc3-
6815686e30f9

Did not have a EFI "gpu-power-prefs-" variable so I thought that it will be OK to


create a new one with a random UUID - in this case, taken directly from a gpu-
switch script

*) chattr +i "/sys/firmware/efi/efivars/gpu-power-prefs-fa4ce28d-b62f-
4c99-9cc3-6815686e30f9"

http://www.tecmint.com/chattr-command-examples/ - chattr (Change


Attribute) is a command line Linux utility that is used to set/unset certain
attributes to a file in Linux system to secure accidental deletion or modification of
important files and folders, even though you are logged in as a root user.
...
Syntax of chattr ---> chattr [operator] [flags] [filename]
...
A file is set with ‘i‘ attribute (+i as you see in this command) ---> cannot be
modified (immutable). Means no renaming, no symbolic link creation, no execution,
no writable, only superuser can unset the attribute.
...
Operator

1. + : Adds the attribute to the existing attribute of the files.


2. – : Removes the attribute to the existing attribute of the files.
3. = : Keep the existing attributes that the files have.
This chattr command is supposed to lock a file to make it accessible only by
"superuser" - and so that, while booting, your EFI will have no chance to screw up
your gpu-power-prefs-... variable under any circumstances

*) cd /

Could not unmount efivars if you are inside this directory, so change to the root
directory

*) umount /sys/firmware/efi/efivars/

Guarantees that your EFI variables are flushed to efivarfs filesystem, please
unmount it safely before rebooting)

*) reboot

===> IF YOU DID EVERYTHING CORRECTLY, MOST LIKELY THAT YOUR


MACBOOK PRO IS NOW USING INTEGRATED GRAPHICS WHILE BOOTING,
AFTER BOOTING, AND IS WORKING GREAT AGAIN !

In the future maybe you could need to re-apply this solution if you would
have to reset your PRAM / NVRAM / SMC because of some other problems,
so remember this solution somewhere... Funny thing: now you can't switch
to Discrete GPU even using gfxCardStatus, it is forever stuck at Integrated

I spent two working days to discover this solution, and really hope that it will work
flawlessly for every MBP owner with a broken discrete GPU. Good luck!

=== NEWS ! YOU COULD ALSO FOLLOW THESE GUIDES FOR THE EXTRA
IMPROVEMENTS : ===

Follow the MikeyN Guide - page 35 - #875 - to move the


AMDRadeonX3000.kext from the /System/Library/Extensions directory
and do not freeze Macbook Pro (at 75% progress bar or "IOConsoleUsers:
gIOScreenLockState 3" message).

Rename old AMDRadeonX3000.kext and move new AMDRadeonX3000.kext


after update - Page 57 - #1425

Shutdown or Restart Macbook Pro - avoid black screen freeze - Update 2 -


Page 57 - #1425

Close the Lid - Sleep - Waking - Page 43 #1066 - Page 50 #1243

Das könnte Ihnen auch gefallen