Disclaimer: This is a guide for rooting and flashing the Google Nexus One smartphone. The described procedure worked for me, but there is no guarantee that it will work for you. If it doesn’t, it may brick your phone. Proceed at your own risk.
I’m a big fan of the Android system, both from a consumer perspective (I like the usability of the system, and I like not being restricted by the manufacturer), from a developer perspective (the tools are free, programs are easy to test, and the API is good), and from an idealistic perspective (open source, and maintained a company that’s not focused on patent wars).
There has been a lot of criticism about Google’s supposed update policy, when in fact the problem mostly lies with device manufacturers. That’s why I buy Nexus devices – the updates come directly from Google, and if necessary, I can hack the phone.
With my Nexus One already being a few generations old, hacking finally has become necessary. There won’t be an official update to Android 4 Ice Cream Sandwich (supposedly for memory reasons, see below), but at the same time, the Android 2 apps have gotten so many updates that even with just the bare necessities installed, my phone has continuously been at its memory limit for months.
With some repartitioning and a modded ROM, the Nexus One can run Android 4 and have plenty of RAM left to be usable. The internet is full of forum posts and YouTube videos showing bits and pieces of the update process, but I haven’t been able to find a guide that describes the entire procedure step by step. Here, therefore, I’ll describe what I had to do to get my phone upgraded.
Following this guide will install the BCM Ice Cream Sandwich mod (based on CyanogenMod 9) on a stock Google Nexus One. As ICS requires a larger internal system partition than the N1 comes with originally, we’ll be using the latest regular CyanogenMod release available for the N1 to root and partition the phone. The end result will be a N1 running ICS, with apps stored on the SD card to leave enough free RAM for a working system.
- A Nexus One phone, obviously. All links and bootloader procedures are specific to this device.
- A USB connection between your phone and your desktop computer.
- The Android SDK installed on your desktop system. If you don’t have it, get it here.
- A backup of your current data. The upgrade will completely wipe your phone and SD card, so backup anything you still need after the upgrade before you start.
- Time. If everything goes smoothly and you can follow the guide directly, the upgrade probably won’t take too long. I didn’t have a straightforward guide, and not everything did go smoothly, so the whole procedure took me several hours.
Keep in mind that during updating, you’re phone won’t be usable, and if you break something, it might take even longer to get it working again. Have a backup phone ready in case you need one.
You will be controlling your phone from your desktop computer several times during the upgrade. This guide is written for Ubuntu Linux systems, but different operating systems should not be too different.
During the upgrade, we’ll be using the following downloads:
- Fastboot: Download site (pick the correct version for your operating system)
- Amon_Ra’s Recovery: Binary image linked in CyanogenMod’s N1 update guide
- CyanogenMod for Nexus One: Download site (use latest version – at the time of writing, this is 7.1.0-N1).
- CyanogenMod Google Apps: Download site (matching version for the CyanogenMod image)
- 4EXT Recovery free version: Download site
- BlackRose: Download page (download attached to main post)
- BCM ICS: Download page (binary images listed under “ROM Downloads”)
Unlocking the Bootloader
The phone’s bootloader has to be unlocked before we can flash new images.
- Install fastboot  on your computer.
- Reboot your phone into the bootloader: Hold down the trackball while powering on the phone. After a brief moment, the phone should show a white screen with a menu and three skating Andy figures at the bottom.
- Make sure the phone is connected to the computer via USB.
- Type the following into your console:
fastboot oem unlock
(This is assuming that you’ve installed fastboot in your path. Otherwise you may have to type the full path to the fastboot executable)
- The phone will show a confirmation screen. Select “Yes” by pressing the volume up button, then confirm by pressing the power button.
Your bootloader should now be unlocked. To show this, the phone’s boot logo will show an open lock at the bottom of the screen from now on.
Rooting the Phone
Next, we have to root the phone so we can replace the recovery image and repartition the internal memory. There may be simpler ways to do this, but the easiest procedure I found was to simply install CyanogenMod as per the official instructions.
- Make sure your phone is booted into the bootloader.
- Type into your console:
fastboot boot recovery recovery recovery-RA-passion-v2.1.1-CM.img
…where the last part of this line is the filename (and path) of your downloaded Amon_Ra image .
- The phone should now boot into the recovery system.
- Select “Wipe”, then “Wipe ALL data/factory reset”.
- Select “Enable USB-MS” to activate USB mounting. Copy the standard CyanogenMod image  and the Google Apps image  to the SD card.
- Select “Flash ZIP”, then select the Cyanogen image from the SD card. Do the same for the Google Apps image.
- Reboot the phone and follow the on screen instructions.
Your phone should now be rooted and running CyanogenMod 7. If you’re happy with this version, you could just stop now. Otherwise, continue to prepare the phone for ICS.
Repartitioning the SD Card
My main reason for hacking my phone was the lack of free RAM when running the latest official Android version for the N1. ICS requires even more memory, but CyanogenMod lets you move all “internal” applications to a partition on the SD card, effectively leaving more actual RAM for the system itself. We have to create this partition.
- Install 4EXT Recovery  via the console:
adb install 4EXTRecoveryUpdater.apk
(Alternatively, you can buy the full version from the Google Play Store)
- Launch the 4EXT Recovery app on your phone.
- Select “Settings”. This will download the latest updates and then apparently take you back to the menu.
- Select “Settings” again to install 4EXT as the recovery image. A list showing available versions will appear, select one (I simply picked the most current one). Select “Install”.
- Once the installation is complete, boot into recovery mode via your computer’s console:
adb reboot recovery
- Your phone should reboot and show the 4EXT main menu.
- Select “tools”, then “partition sd card”, confirm and pick “remove all partitions and start from scratch” to wipe all data from your SD card and start repartitioning. 4EXT will now ask you for partition sizes. The first ext partition is where CyanogenMod will put “internal” apps. According to various forum posts, this should not exceed 1.5GB. I entered “1024” for a 1GB partition. You can skip the second ext partition as well as the swap partition. Confirm your settings, then select a file system – I entered “ext4”.
4EXT should now have created your partitions. The remaining space on your SD card was created as a data partition, similarly to the one before repartitioning.
Repartitioning Internal Memory
Your phone is now ready to have apps stored on the SD card instead in the phone’s own memory, but we still have to resize the internal storage before we can install ICS. We’ll use BlackRose for that. Reminder: This guide is written for Linux. For Windows, you have to use the appropriate .exe files (included in the same download archive) instead of the binaries listed here.
- Unzip BlackRose . On my Linux system, I had to also make the BlackRose binary executable (chmod u+x BlackRose).
- Start BlackRose from the command line:
- You should get a message that BlackRose is waiting for devices. Reboot your phone, BlackRose should install and quit. Boot your phone again.
- BlackRose has an interactive mode for flashing your phone with new internal partitions, but it didn’t work for me. Instead, I did this:
- Run BlackRose in editor mode:
- Select “resize” and enter the desired partition sizes. The BCM mod requires at least 180MB on the system partition (the stock partition is 145MB). I followed some tutorial and typed “220” for the system partition and “10” for the second partition, then entered “ics” as the device name. BlackRose will terminate, creating a file hboot_brcust.nb0 in the current directory.
- Execute the following command to flash the newly created image to your phone:
./other/fastboot-l flash hboot hboot_brcust.nb0
(on Windows, use fastboot-w instead of fastboot-l)
- Again, BlackRose will wait for a device. Reboot your phone into the bootloader and it should install the image.
- Run on the command line:
Your phone’s bootloader should now show “220/10/206” in the 2nd line, confirming that the new partition sizes have been flashed. At this point there is no working system on your phone.
Installing BCM ICS
Nearly done now. The phone is ready for ICS, we just have to flash the BCM image.
- Boot into recovery mode from the bootloader.
- Toggle USB storage to make the SD card mountable via USB. Copy the BCM ZIP  to the phone’s data partition (at this point, there may be more than one partition available on the card, be sure to pick the right one). Unmount cleanly (I didn’t, resulting in a broken ZIP on the card), then go back to the main menu.
- Select “install from sdcard” and choose the BCM ZIP on the card. This will start the installation process.
- At this point, you can either install with standard settings, or select “custom” to configure some more details, including the SD card cache size (the default settings is optimised for class 4 cards).
- Finally, reboot your phone once more.
Done! You should be seeing a rather ugly splash screen, and after a while ICS should appear on your phone. Connect to your Google account (if you’re using one) as usual and start setting up your phone.
- CyanogenMod – homepage
- CyanogenMod Nexus One Full Update Guide – in the CyanogenMod Wiki
- BCM – Ice Cream Sandwich from CM 9 Source – main page with download links and version history
- BlackRose – main page with download links and version history
- Help for ICS BCM ROM installation please – rough outline of the steps in this guide, along with some pitfalls
- 4EXT Recovery – homepage
- Fastboot – guide & download links in the CyanogenMod Wiki
- How to unlock and root a Nexus One – with video