Putting CyanogenMod 7 On a Droid 2 Global

My phone was slow. Unbearably slow. Ghost clicks, freezing, applications crashing. I could literally press a name in the Contacts list, get up and get a glass of water, and come back before my phone had finished pulling it up. It was time for a change.

Lately I’d been thinking of getting the Samsung Galaxy S5. After all, my venerable Droid 2 Global (D2G) is already six years old. However, a post on Verizon’s community forums convinced me Verizon had managed to screw up its global interoperability, a key feature for a future phone of mine (must be reasonably travel-proof!).

Accordingly, I began looking at the Nexus 6 (N6) instead. It looks to be truly carrier-independent, top of the line hardware, and tons of LTE/CDMA/GSM support. Only problem, it’s sold out! Also, it’s huge. Like probably won’t fit in all my pockets huge.

So I settled on a solution. If I could update my D2G so that it became usable once more, I’d have a stop-gap until the N6 gets restocked. Plus, in the event that I’m out for a night on the town and the pants pocket can’t fit the N6, I’ll have a fallback in my D2G. And with the baseband hack to band unlock my D2G I could even have an internationally viable second phone (imagine! The “G” in D2G actually meaning something!).

The Goals

Since this was my first time installing a custom ROM I decided to keep things simple. I skipped the band unlocking (for now ;)) and decided to focus on getting CM7 running on my phone.

Initially I thought I would just factory reset the phone and settle for Verizon’s stock PoopDroid (Gingerpoop?). But even after the factory reset the phone was still unbearably slow. Better, but still slow.

So I decided to say f&$^ it, in for a penny in for a pound. Might as well put CM on it!

Getting Started

This guide covers how to put CyanogenMod 7 on a Droid 2 Global. Specifically, a Verizon Droid 2 Global running Android 2.3.4 Gingerbread, with firmware version 629 (alternatively known as A956).
The specs on my phone pre-CM install were:

System version: 4.5.629.A956.Verizon.en.US
Android version: 2.3.4
Baseband version: N_01.82.00R

As per usual, I take no liability for whatever happens to your device. Proceed at your own risk, and I suggest reading every step in full before you start. Then, when you’re working on a section, re-read all the steps again and google what to do if you mess up at that stage (you should have a way to reverse if things go south!). I’ll include references inline.

A Bit of History

Last I had checked (about three years ago), CM7 was happily running on Gingerbread D2G’s. Then came the dreaded .629 OTA (over the air update). Suddenly D2G bootloaders were locked again and it seemed like no method for installing CM7 would be forthcoming. Eventually a workaround was discovered, though it required intentionally bricking the phone by downgrading to an incompatible firmware before installing CM7 and re-flashing to unbrick the phone. Yikes!

Thankfully in the intervening time someone managed to come up with a solution that did not require bricking the .629 D2G. Many thanks to all the developers, testers, forum administrators, and regular enthusiasts like myself whose help I have drawn on (I will do my best to give individual shoutouts!).

In particular a big shoutout to sd_shadow, whose collection “The Complete Guide to Using Droid 2 Global (a956)” is a godsend (particularly smart to host it as a google doc, shadow!). The remainder of this guide is based on links shadow collected, official CyanogenMod resources, and some nitpicky googling to solve a couple nasty issues with adb (Android Debug Bridge).

First Things First

You will need a D2G running Android 2.3.4 version .629. In this section we’ll cover backing up the phone, factory resetting the phone, rooting the phone, and installing adb on your computer.

Making a Backup and Factory Resetting

To backup my droid I simply connected it to my computer (OSX Macbook) and copied over the contents of the sdcard. This meant applications were not backed up. However, I did back up specific items from applications, like chat histories from LINE. If you want a more complete backup options like Titanium Backup may be for you.

Next, perform a wipe data/factory reset by booting into the Recovery Mode of your D2G and selecting factory reset. Also wipe the cache. To boot into Recovery Mode power down the device. Then power it up and hold the power and x keys at the same time. Recovery Mode looks like a triangle with a yellow exclamation point and a droid bot. Press the volume rocker to bring up the menu. Navigate the menu with the volume rocker and press the power button to select. See Rootjunky.com’s excellent youtube video for more.

Rooting the D2G .629

Follow the instructions from this xda-developers post to make a bootable CD for rooting your Droid 2 Global and root it. Pay attention to instructions about wiping the partition cache, etc. Even though I did it in the previous step I went ahead and did it again since I had played around with the stock ROM a bit (syncing my google account). Thanks to phifc, drjbliss, Skrilax_CZ, ezSBF by 1kds, and bhigham.

Download the .iso
and burn to a CD or mount on a bootable USB. If you’re on a Mac just burn it to a CD, I’ve never been able to get Unetbootin to work properly for me. In case that link goes down, I’ve hosted the file here (right-click, save as. Then change file extension from .jpg to .iso) as well.This file is the Droid2_D2G_DX_DX2-RootCD-2012.iso with md5 7baee9c34f6ef7ad0b4fa219ae387c68 at about 54MB. I do not think this CD contains the backup image (SBF) of .629, though this one (219MB, MD5: 579d7d5095fc2560205033456db150a2) might.
Tip: to calculate the md5 of a file in OSX simply open the Terminal, navigate to the directory containing the file, and type md5 filename
The instructions in bhigham’s xda-developers post above have been copied here for archival purposes.

I have tested this CD on my phone, and found it to work properly, but I can’t guarantee that it will work for others. Others have also found it to work, but I can’t guarantee you will have the same results.

You are welcome to try it, and I hope it is helpful to someone, but as with all modifications, you do so at your own risk.Instructions for using this CD.
Download and burn this image file to CD. (or create bootable USB)
It might be a good idea to do a factory reset before starting this process, but you might be ok without it. My phone had already been rooted, so I had to sbf it back to stock, in order to test the CD, so I have only tried it after a factory reset.
1 Enable USB debugging on the phone,
2 Boot computer off of this CD
3 Hook up phone to computer (phone needs to be on at this point)
4 Start the root process by selecting option 1
5 When it says on the screen that phone needs placed in bootloader, (almost right away, as it only needs to send 1 command before placing in bootloader) power off the phone, and put it in bootloader by holding the up arrow on the keyboard of the phone while powering on.
6 when in bootloader and hooked up to the phone, press enter on the computer to proceed, a preinstall image will be flashed to the phone, providing the exploit that will root the phone.
7 When it has flashed, the phone should reboot. If it hangs when booting, unplug phone, remove battery, replace battery and power back on. When powered on, hook up cable again, and the process will continue (it will immediately reboot again)
8 When the phone reboots, ADB should be root, so it will push the necessary files to the phone, and reboot the phone again. Per Morlok8k, cache should be wiped to avoid bootloop problems, so the phone will be rebooted into Recovery.
9 You will have to press both volume buttons to enter recovery, where you should wipe cache partition and reboot.
If all went well, your phone should be rooted.

Installing adb

Android Debug Bridge (adb) allows you to push files from your computer onto your droid. It allows you to do much more as well, but for our purposes it will be used to transfer files over.
Why not just copy and paste? Because certain files will need to be copied to hidden or specific locations that will not be writable without the use of adb.
Install adb on your computer following the instructions from the CyanogenMod team. Key note: you only need the Android SDK Platform-tools package. When I installed I only had two things checked: the Platform-tools package and something else way down the list (I think it was a support item, like support libraries or something). The total size of the install should be pretty small, like less than a 100MB if I recall correctly.
To add adb to your PATH variable (so that whenever you’re in a Terminal window you can just type adb command and it works without you having to be in the folder containing the adb install) add the following to ~/.bash_profile

if [ -d "<path-to-sdk>/platform-tools" ] ; then
export PATH="<path-to-sdk>/platform-tools:$PATH"

Replace <path-to-sdk> with the location you installed the SDK in. Be sure to begin this with a slash. For me my ~/.bash_profile looks like:

if [ -d "/Users/bobo/Code/android-sdk-macosx/platform-tools" ] ; then
export PATH="/Users/bobo/Code/android-sdk-macosx/platform-tools:$PATH"

Tip: Having trouble running adb commands? The phone should be connected via a USB cable to the laptop in “Charge only mode” when running adb commands. USB debugging mode (Menu -> Settings -> Apps -> Development) must also be enabled. Otherwise commands are not guaranteed to work!

Installing CyanogenMod 7

With a rooted phone and our laptop setup for adb, it’s time to install CyanogenMod 7! It’s important to note that our version of CM7 we will be installing is an unofficial version. I believe it was first created by someone named RevNumbers. It is now maintained by someone else, either e334 or jianc (see this rootzwiki thread for more).

First, download cm-7-20130831-UNOFFICIAL-droid2we.zip (106.5MB, MD5: 310ad3adfd172fc7805b6fc6faf764c7). Again, I’ve mirrored the file (right-click save as, change .jpg to .zip).

Then, download the google apps bundle if you want to use google related services with your phone (i.e. google account sync, google play store, etc.). I got that apps bundle from the link for CM7 at CyanogenMod’s page (size: 6.4MB, MD5: 1647897d8ac3efb04723d2ad2c361a3f).

Finally, download bootstrap- from the CyanogenMod page (size: 2.3MB, md5: c67a11b41f52b617d3656ba80016f003).

Installing Bootstrapper and ClockworkMod Recovery

Now it’s time to install Bootstrapper, which will let you install ClockworkMod Recovery (CWM). CWM is a full featured recovery mode that vastly facilitates installing custom ROMs. Indeed, I tried installing CM7 using the Stock Recovery Mode and it would not work.

This step was probably the trickiest of them all, and require extensive googling on my part. adb refused to push to the correct /system/app/ (the trailing slash is important) location, continually citing a “Permissions denied” or a “Read-only” error. Luckily I found a solution on the Android stackexchange, on which the following is based. Navigate to the folder where you have bootstrap downloaded and follow along.

Type these commands (with explanations given in parentheses)

adb shell (opens up an adb shell into your attached phone)

su (changes prompt from $ to #. Will only work if you successfully rooted)

mount (lists all the mount points. Look for the mount point for /system because you want to adb push the bootstrap zip to /system/app)

exit (drops you from # to $)

exit (exits the adb shell)

We’ll be using the mount command to make the /system location writable so that you can adb push the bootstrap .zip to it. Here is what my mount command looked like:

mount -o remount,rw -t ext3 /dev/block/mmcblk1p21 /system

-0 is the options flag.

remount,rw tells it to remount the partition with read and write capabilities.

-t is the type flag. ext3 is the formatting on this partition.

/dev/block/mmcblk1p21 is the location of the device you want to remount

/system is the mount point

Problem: you can only run this mount command from inside the adb shell, which is a shell local to your phone running through adb. However, you can only copy a file from your computer to the phone if you are not in a shell on your phone (i.e. you have to be in a shell on your computer).

Solution: use adb push to get the bootstrap zip to the /sdcard/ location, then open a shell inside the phone and copy the bootstrap file to the /system/app/ location! Here’s what that looked like for me.

bobos-MacBook:d2g bobo$ adb push -p bootstrap- /sdcard/
Transferring: 2457209/2457209 (100%)
2238 KB/s (2457209 bytes in 1.071s)
bobos-MacBook:d2g bobo$ adb shell
$ su
# mount -o remount,rw -t ext3 /dev/block/mmcblk1p21 /system
# cp /sdcard/bootstrap- /system/app/
# rm bootstrap-
rm failed for bootstrap-, Read-only file system
# mount -o remount,ro -t ext3 /dev/block/mmcblk1p21 /system
# exit
$ exit

adb push <location_to_file> <location_on_phone> just copies a file from your computer to the phone.

-p tells it to notify you of the percent progress of the transfer.

You’ll see that I fail to delete the bootstrap zip because that partition is currently read-only. I believe using a similar mount strategy could be used to remove it, but I left it be for the time being.

Also, take note of the second mount command, this time with –o remount,ro. What this does is remount the partition as read-only, returning it to its original state.

Getting into ClockworkMod Recovery

These steps are taken from another Rootjunky.com youtube video.

Restart the Droid 2 Global

Go to Apps –> Bootstrapper

Eventually a Superuser Request will pop up on the screen, go ahead and allow Droid 2 Bootstrapper Superuser access with Remember checked

Click Bootsrap Recovery at the top, a modal should pop saying “Success!” Click OK.

Click Reboot Recovery to reboot into CWM.
Rootjunky.com’s host offers the following alternative tip. I couldn’t get it to work for me, although I only tried it when I was stuck bootlooping so YMMV.
If your phone has died, do the following. After power down press the power button and hold ‘r’ to get into CWM recovery. Holding ‘x’ instead would get you into stock recovery mode. If these methods don’t work, power down and remove the battery, reinsert battery and try again. Sometimes it takes two tries.

Inside ClockworkMod Recovery

These steps are somewhat modeled off the CyanogenMod page on Installing CM from Recovery.

Note! I probably should have installed the google apps bundle at this point too, but I did not. I also end up getting stuck in a bootloop, so beware!

1) Slide out the keyboard and use the left-arrow and right-arrow keys to navigate. Use the enter key to select. Alternatively use volume up and volume down to navigate. The power button no longer selects (like it did in stock recovery mode). Instead it goes ‘back’ a screen. If you use it from the Main Menu it will make the whole screen go black. Just press the power button again to return to hte Main Menu.

2) Go to Mounts and Storage menu and Mount /sdcard
3) Go back to Main Menu
4) Select Install zip from sdcard

5) Select Choose zip from sdcard

6) Select cm-7-20130831-UNOFFICIAL-droid2we.zip

7) At the end it should say Install from SD card complete.8) Go back to Main Menu and Reboot

Now I’m Stuck in a Bootloop

With the blue CyanogenMod man, just looping over and over…
Press ALT + Shift + Del to reset, then quickly press Power + x to get into Stock Recovery Mode (might just need to press x and not power + x).
Wipe data/factory reset
Wipe cache partition
Reboot system now

Still Stuck in the Bootloop

3:36am – Decide to let it wait for 10 minutes and see if it boots up, since one post said the first boot up can take 10 minutes.
3:37am – it boots up!

Restarting Just to See if It Still Works

Holding power down and going to Reboot brings up the following options: Reboot, Recovery, or Bootloader. I select Reboot.

Still works on reboot, can still place a call (though it boots up quickly (REALLY quickly) it takes a second to find service)

Installing Google Apps Bundle

These steps are from the CyanogenMod page on installing Google Apps.

1) adb push -p gapps-gb-20110828-signed.zip /sdcard/
2) Restart the phone into Clockwork Mod recovery. Remember, power button goes back and enter selects.
3) Choose: install zip from sdcard
4) Choose: choose zip from sdcard
5) Choose: gapps-gb-20110828-signed.zip
6) It should terminate with “Install from sdcard complete.”
7) Go back to Main Menu
8) Select: reboot system now

Congratulations, You Have a Working CM7 D2G!

There are some minor annoyances. For example, the ALT+LOCK key doesn’t work, but you can just double tap the ALT key to do the same thing. My Contacts weren’t syncing properly, but a quick uncheck then recheck of Sync Contacts in Menu > Accounts and Sync fixed it. Likewise I struggled to find the Gmail Notification to turn it off, but found it internal to the Gmail App in Menu > Settings > my_email_addr (under Accounts) > Uncheck Email Notifications.

Perhaps the most interesting option is to manage app permissions, which can be done natively from CM7. Go to Menu -> Settings -> CyanogenMod Settings -> Application and check Permission management to enable it.

To change permissions for a given application go to Menu -> Manage Applications and click on the target application. Scroll down and see a list of permissions with green checkmarks by them. Simply tap any of those permissions for it to be disabled.

The checkmark will stay but the permission will be crossed out. Tap again to re-enable. The app might need to be restarted for the permission change to take effect (I haven’t had the patience to sort this out yet, but it doesn’t seem to work for me. That might be because I’m not restarting apps before testing if denying them network connectivity actually works.)