Installing Android 4 ICS on the Google Nexus One

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:

  1. Fastboot: Download site (pick the correct version for your operating system)
  2. Amon_Ra’s Recovery: Binary image linked in CyanogenMod’s N1 update guide
  3. CyanogenMod for Nexus One: Download site (use latest version – at the time of writing, this is 7.1.0-N1).
  4. CyanogenMod Google Apps: Download site (matching version for the CyanogenMod image)
  5. 4EXT Recovery free version: Download site
  6. BlackRose: Download page (download attached to main post)
  7. 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 [1] 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 [2].
  • 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 [3] and the Google Apps image [4] 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 [5] 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 [6]. 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:
    ./BlackRose editor
  • 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:
    fastboot -w

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 [7] 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.


This entry was posted in Android, Uncategorized and tagged , , , . Bookmark the permalink.

23 Responses to Installing Android 4 ICS on the Google Nexus One

  1. @vinnefreerider says:

    Very good!! iam using this rom and its awesome… works like a charm on my Nexus One… thanks by your easy Tutorial..

    good job!


    Vinicius Abdo

  2. Rob says:

    Wondering if there there is a path to restore back to Gingerbread 2.3.6?

    • Sorry, can’t help you there. I really don’t know any more about this than what I put together from various Google results – and that’s all up there in the blog post.

      • Zachary Miller says:

        You should of made a backup of Android in recovery before continuing this process. I used clockwork mod so I have a recovery. Not sure if there’s an option for it on Amon’s.

  3. Marc says:

    To answer the question about going back to gingerbread: of course, the phone is rooted, you are the boss! Just put the (gingerbread) file on your SD card, go to the recovery and wipe and and flash that zip…

    That’s all!

    Good luck!

  4. John says:

    Hi I am considering ICS to solve a problem with my N1. The screen goes black and no ear speaker audio while making phone call + headphone jack does not work rendering N1 useless as phone. Cant be sure its not hw problem. Tried quite a few things no including going back to froyo.

    Any feedback welcome

  5. jefferson says:

    Worked like a charm.


  6. Doug Brann says:

    Thanks for this. You’re my hero, I used Windows 7 for this, and found only that the 4EXT Recovery section didn’t quite work. So, I stuck it on the phone and installed it directly from there. That worked ok, and everything else was the same.

    You should update your spaces in the Black Rose section:
    “./other/fastboot-lflash hboot hboot_brcust.nb0”
    should read:
    “./other/fastboot-l flash hboot hboot_brcust.nb0” (and for windows, it’s “…fastboot-w …”)

    I have one question though: are you using apps2sd or link2sd or any utilities like that, or is it even necessary with what you did?

    Thanks again for this post. You are my hero :) If I ever meet you, let me buy you a beer.

    • Thanks for your comments. I’ve updated the post.

      I’m not using any SD utility apps. The setup described above will store all the apps on a dedicated partition on the SD card anyway, so there’s no need to move them to the standard data partition.

      I should point out that I did have some memory issues a while after switching to ICS, but apparently they were just related to a massive list of pending updates. Seems the system just couldn’t handle dealing with too many updates simultaneously, and as a result kept telling me that my app memory was full. Handling the updates one by one worked, and I haven’t had memory warnings since.

      …and I’ll keep that beer in mind. 😉 Though it should really go to the people who wrote the articles in the reference section. I just put the bits and pieces together.

  7. fred says:

    is it just me or ….. well what i noticed so far is that canyongen 7xxx is based on gingerbread 2.3 and not on ICS 4.0.
    What makes you guys think you installed ICS on your devices?

    • The above description is for installing CyanogenMod 9, which is based on ICS. There is no official CM9 build for the Nexus One, which is why the BCM build is used. The exact Android version installed by this guide (at least at the time I wrote this) is 4.0.4.

  8. Paulo Graça says:

    I had a problem with Android SDK. To install fastboot, here it is a great tip for Ubuntu users.

    Don’t forget to run fastboot as superuser:
    # sudo fastboot oem unlock

  9. Ryan says:

    Thanks for providing this instruction set. Installation worked well for me. I noticed google maps crashing often. I get “Login failed” on google maps and crashes. Similarly calendar crashes as well. I used the latest BCM release build.

    Should I look to update to jelly bean?


    • The version I installed has been very stable so far. Performance has really degraded over the last weeks though, probably due to memory shortness. It can often take as long as 10 to 20 seconds for my phone to wake up from whatever it was doing; sometimes it shows only the number of a caller and doesn’t display the name before I’ve already accepted the call.

      In other words: I’m eagerly awaiting the arrival of my Nexus 4…

  10. jojo says:

    Very good! I followed your instructions and it turned out great. The one main thing that’s a bummer is the native video player doesn’t work. (this is known not to work)

  11. yeahyoooo says:

    im actualy so happy! this tutorial does get a little confusing and requires some knowledge o jailbreaking but its still well worth it and there always google for help!

  12. Pingback: Installing Jelly Beans on Nexus One « Akbar's Blog

  13. mahtab says:

    tanker you

  14. alok says:

    im facing an issue. a prompt comes first on rebooting is Contacts stopped working. then after intervel of 5 or 10 secs a prompt keeps coming as android.process.acore fas stopped
    please help

  15. Thank you very much. Did you know how Beyance lost 20 pounds?? I found it finally

  16. this site says:

    Wonderful website. Lots of useful info here. I’m sending it to a few pals ans additionally sharing in delicious. And naturally, thank you to your effort!

  17. Petre says:

    Thanks alot….

  18. Sean says:

    You are the coolest person I know. That BlackRose editor mode trick had me hung up for hooourrrss. You are a G and a scholar.

Leave a Reply

Your email address will not be published. Required fields are marked *