Wednesday, January 30, 2013

Rooting the Samsung Galaxy S3 and (Optionally) Installing CM10.1

Used without permission from:

There is a bunch of information about doing this already.  I'm just documenting what I steps I took to do this under Linux.

First, I got the Heimdall 64 bit binary.  This would not run, not sure why:

wskellenger@marquette ~/utils $ ./heimdall
bash: ./heimdall: No such file or directory

Even as root, it refused to do anything useful:

wskellenger@marquette ~/utils $ sudo ./heimdall

Okay, so I downloaded the 32 bit version.

wskellenger@marquette ~/utils $ ./heimdall
./heimdall: error while loading shared libraries: cannot open shared object file: No such file or directory

I don't really understand this either, as I have libusb:

 wskellenger@marquette ~/utils $ sudo ldconfig -v | grep libusb
/sbin/ldconfig.real: Can't stat /lib/i686-linux-gnu: No such file or directory
/sbin/ldconfig.real: Can't stat /usr/lib/i686-linux-gnu: No such file or directory
/sbin/ldconfig.real: Path `/lib/x86_64-linux-gnu' given more than once
/sbin/ldconfig.real: Path `/usr/lib/x86_64-linux-gnu' given more than once ->
/sbin/ldconfig.real: Cannot stat /usr/lib/x86_64-linux-gnu/ ->
: No such file or directory -> ->
/sbin/ldconfig.real: Cannot stat /usr/lib32/ No such file or directory ->

After some Googling around and coming up empty, I just decided to build heimdall from source.  This was easy enough.

cd ~/Projects
git clone
cd Heimdall
git checkout v1.4.1RC2

Now you should have all of the sources you need to build.  The following instructions are from the Heimdall README.

wskellenger@marquette ~/Projects/Heimdall $ cd libpit
wskellenger@marquette ~/Projects/Heimdall/libpit $ ./configure
wskellenger@marquette ~/Projects/Heimdall/libpit $ make
wskellenger@marquette ~/Projects/Heimdall/libpit $ cd ..
wskellenger@marquette ~/Projects/Heimdall $ cd heimdall
wskellenger@marquette ~/Projects/Heimdall/heimdall $ ./configure
wskellenger@marquette ~/Projects/Heimdall/heimdall $ make

wskellenger@marquette ~/Projects/Heimdall/heimdall $ sudo make install

You'll see this message after doing the install, do what it says:

 IMPORTANT - You must reboot your machine or execute the following as root:
service udev restart

If you want the frontend, also do:

wskellenger@marquette ~/Projects/Heimdall/heimdall-frontend $ qmake-qt4
wskellenger@marquette ~/Projects/Heimdall/heimdall-frontend $ make
wskellenger@marquette ~/Projects/Heimdall/heimdall-frontend $ sudo make install

That's it.  If you type 'heimdall' at a prompt now you should see some stuff on the screen.

Now, I took a brand new SGS3, and pressed HOME (the single button), Volume DOWN, and POWER at the same time.  You will feel a small buzz of the vibrator, and then see a screen about how this is dangerous and so forth.  Press volume UP to proceed.

At this point you'll see just our little green android guy and an indication that it is "Downloading...", but we haven't done anything yet.

Let's get the recovery installed first.  First I checked to see if anything from Samsung was connected.  Indeed there was:

 wskellenger@marquette ~/Projects/Heimdall/heimdall $ sudo lsusb
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 006: ID 04e8:685d Samsung Electronics Co., Ltd
Bus 001 Device 003: ID 2635:0601 
Bus 001 Device 004: ID 0a5c:21d7 Broadcom Corp.
Bus 001 Device 005: ID 0c45:6495 Microdia 

Now I just moved the clockworkmod image that I downloaded from here over to my utils directory.

wskellenger@marquette ~/utils $ mv ~/Downloads/recovery-clockwork- .

I also renamed it to recovery.img, probably isn't necessary but I did so anyway:

wskellenger@marquette ~/utils $ mv recovery-clockwork- recovery.img

Now let's try to flash it with Heimdall:

wskellenger@marquette ~/utils $ heimdall flash --recovery recovery.img --no-reboot
Heimdall v1.4 RC2

Copyright (c) 2010-2012, Benjamin Dobell, Glass Echidna

This software is provided free of charge. Copying and redistribution is

If you appreciate this software and you would like to support future
development please consider donating:

Initialising connection...
Detecting device...
Claiming interface...
Attempt failed. Detaching driver...
Claiming interface again...
Setting up interface...

Checking if protocol is initialised...
Protocol is not initialised.

Initialising protocol...
Protocol initialisation successful.

Beginning session...

This device may take up to 2 minutes to respond.
Please be patient!

Session begun.

Downloading device's PIT file...
PIT file download successful.

Uploading RECOVERY
RECOVERY upload successful

Ending session...
Releasing device interface...
Re-attaching kernel driver...

At this point I just tried to reboot the device into recovery to see if I had CWM installed or not.  I popped the battery out to get out of the previous download mode.  Maybe there is a better way to do this, not sure.  Now reboot into recovery.  Hold Volume UP, HOME, and POWER.  When you feel the small vibration, keep holding for a little while longer.  You will see the SGS3 logo and then hopefully boot into CWM recovery.

Once inside CWM, the first thing I'm going to do is a Nandroid backup of this baby.  Go to backup and recovery and select backup.  This will take a little while so be patient.  In the meantime I'll download CM10.

Edit 6-May-2013:  If you just want to root your device, and keep the stock Samsung ROM, at this point you can sideload the file available here.  After this, reboot, check to see if the SuperSU app is installed, and you're done.

Okay, back to installing CM 10.  I went with one of the 10.1 monthly release snapshots, available at

Now that you've got the CM package and you've made a backup, we can sideload the CM10 .zip file onto the device.  First let's see if we can see the device or not:

wskellenger@marquette ~/utils $ adb devices
List of devices attached
3c1b4cf7    recovery

Pretty sweet.  Let's go to 'install zip  from sideload' in the Clockworkmod menu.  The screen should show:

Sideload started ...
Now send the package you want to apply
to the device with "adb sideload <filename>" ...

So, let's do that:

wskellenger@marquette ~/Downloads $ adb sideload
sending: 'sideload'  100% 

After this you'll see the phone open and install the update automatically.  This is pretty sick.  We also need gapps so let's download and install that the same way.  I got gapps from

Again, select "install zip from sideload", and adb sideload the gapps package:

wskellenger@marquette ~/Downloads $ adb sideload sending: 'sideload'  100% 

That's pretty much it folks.  I actually did a wipe data, wipe cache, wipe dalvik.  After that I feared that I perhaps undid the gapps installation so I installed gapps again after this.  Then I did "reboot system now" and unplugged the USB cable.

Booyah, I'm seeing the familiar CyanogenMod bootscreen.

1 comment:

  1. You didn't have to compile from source, there. You just needed to install the 32-bit version of libusb, as a 32-bit program can't use the 64-bit lib. sudo apt-get install libusb-1.0-0:i386 would have done the trick for you.

    Good documentation, still, though :)