[REF] efrant's "Android for Galaxy Nexus" 101 & FAQs

Search This thread

efrant

Retired Senior Moderator & Developers Relations
Feb 12, 2009
11,469
10,985
Montreal
Samsung Galaxy S20
The popularity of Nexus devices has increased significantly since the launch of the Nexus One in January 2010. Along with this popularity, forums such as xda-developers have also had an influx of new users, most of which are not developers, and are not well versed in the intricacies of Android.

After much thought (and some discussion on this thread), I’ve decided to create this thread as a compilation of FAQs, 101s, and “How-To’s” in the hopes that those coming to Android who want to learn will have another resource to help them learn. With that in mind, this thread is NOT meant to explain the quickest way to do things (you will NOT see toolkits or shortcuts discussed in this thread), nor is it meant to be a “fix-my-device” thread. It is created with for a purpose of learning, in order to expand users’ knowledge of Nexus devices and Android in general. See this post by kyphur for the general philosophy of this site, which I share.

I do not take myself to be an Android guru or developer. However, I do have a bit of knowledge to share. If you think things are missing or not accurate, I will be more than happy to add or revise anything. I will try to cover most of the basic topics related to Android, including drivers, ADB, fastboot, partitions, recoveries, bootloaders, root and reverting to stock. Again, I will not discuss toolkits, nor will I cover custom ROMs. Those have their own threads.

This will be an ongoing work-in-progress, as it takes considerable time to try and capture everything properly, and my time is limited. The order of the information will also change, as I haven't quite figured out the best way to present everything. (Currently there are some FAQs, including fastboot and ADB commands, followed by a list of reference and how-to threads.)

So, without further delay:

Frequently Asked Questions

What is Android?
Android is an open-source operating system for mobile devices. It is basically a java virtual machine running on a Linux-based kernel.

What is the Android SDK and do I need it?
SDK stands for "software development kit. Do you need it? If you are developing, then yes (but then you probably would be reading this thread now would you... :) ). If you are not developing, then no, you do NOT need to install it. It is just a waste of space. The only files you need (to interface with your PC) that comes from the SDK are the fastboot and adb files, and they can be found here for Windows, Linux, and MacOS.

Why do I need a driver for my Windows PC to recognize my device?
As with all hardware, Windows requires device drivers for it to be able to interface with the OS. Drivers are not required if you are using Linux or MacOS.

Where do I get the driver for my PC?
For previous Nexus devices (the Nexus One and Nexus S) the driver included in the Android SDK was the one needed. However, with the Galaxy Nexus, that driver no longer works. The driver is now provided by Samsung, and can be found from various locations. However, I recommend using this package by 1wayjonny. It works perfectly and, unlike most other packages, 1wayjonny’s repack does not install any crapware along with it. That said, it doesn’t include an .exe file, so it needs to be installed manually from the .inf file. If you do not now how to do that, see here for instructions. Note: If you are using Windows 8, you will need to do this before you can install the driver.

Why do I need to install the driver twice?
Nexus devices use two main interfaces (there are actually a few more, but I will cover them later) to communicate with a PC. These are ADB (Android debug bridge) and fastboot, both of which will be covered later. The fastboot interface requires the GNex to be booted in fastboot (i.e., bootloader) mode. Thus, in order to install the fastboot driver, you need to boot your GNex into the bootloader. The ADB interface requires an Android kernel to be booted, i.e., your device needs to be booted normally, or in recovery (covered later). Additionally, if your device is booted normally, you need to have USB Debugging set to enabled in settings (i.e., Settings->Developer options->USB debugging).

How do I boot my device into the bootloader (i.e., fastboot mode)?
Turn off your device, hold volume up and volume down, and press and hold the power button.

What is a command prompt?
A command prompt in Windows (or terminal in Linux/MacOS) is a command line window in which you can enter commands. To open a command prompt in Windows, you can hold the shift key and right click in the directory in which you want your command prompt open. Or, in a Windows Explorer window you can go to File-><name-of-window>->Open command window here.

What is a bootloader?
Without getting into too many technicalities, the bootloader is essentially the program that gets loaded first when starting your device, and it is responsible for booting the Android kernel. Think of the bootloader as the BIOS of a computer.

What does it mean if my bootloader is locked/unlocked?
Most (if not all) devices are shipped from the manufacturer with locked bootloaders. This is for security reasons. A locked bootloader does not allow easy flashing of images, which means that it is difficult to change or modify the operating system. Unlocking a bootloader (using fastboot) on a most Galaxy Nexus devices results in a complete loss of all personal data from the device. Having a locked or unlocked bootloader has no bearing on the functioning of the device. Unlocking it gives you more options to play around with the OS. Additionally, an unlocked bootloader means that you can easily root your device no matter what -- unlike most non-Nexus devices, if you lose root, it is trivial to get it back.

What is “root”?
Root essentially means that you have root (or superuser) access to the file system on Android. It is similar to being “administrator” on a Windows PC. It has nothing to do with your device or the bootloader, it has to do with the Android OS (i.e., you cannot “root” your device – you root the Andoid build that you are running). To have root, you need to be booted into the Android OS that you have rooted. If you are in fastboot mode, root is irrelevant.

How do I get “root”?
If you are booted into a custom recovery (recoveries will be covered later), root is enabled by default. If you want root while booted into Android, you will need to place two files on your system partition: an “su” binary which grants root access, and a superuser app that manages that access. The two that are available are ChainsDD’s Superuser and Chainfire’s SuperSU. Usually these files are packaged up in a zip file that is flashable using a custom recovery, but they can be flashed manually using ADB. Both of these methods will be described below.

If I unlock my bootloader, is that the same as root?
No, as was mentioned above, unlocking the bootloader allows you to (among a few other things) flash images easily to the device when not booted into the Android OS. Root allows you access to manipulate the files WITHIN the Android OS.

If I unlock my bootloader, does that mean that I have to root?
No.

If I unlock my bootloader, do I have to flash a custom ROM?
No.

Do I need to root to flash a ROM?
No.

What is a ROM?
A ROM is slang for an mobile OS build.

What are the different versions of Android, and is there a difference between say 4.2 and JOP40C?
Have a look at this link for an explanation of what (for example) JOP40C means, and what version of Android that is.

What is the difference between a stock ROM and a custom ROM?
A stock ROM is a ROM that is either built by Google (like any yakju/takju/mysid build) or built by Samsung (like all the yakju** variants and mysidpr) and is signed by Google’s (or Samsung’s) platform keys. Everything else is a custom ROM.

What is this AOSP I keep hearing about?
AOSP stands for Android Open Source Project, and is a repository for the source code for Android. You can build your own ROM from AOSP. Details can be found on http://source.android.com/ or here.

What is fastboot?
Fastboot can refer to three things: the actual interface between your PC and phone; the fastboot.exe file; or the “mode” of your device. For you to be able to use fastboot commands: your device has to be booted in fastboot mode, the fastboot driver for your PC needs to be installed, and the fastboot.exe file needs to be on your PC.

What are the fastboot commands?
The list of fastboot commands can be seen by typing “fastboot” (without the quotes) in a command prompt opened in the directory where you fastboot.exe file is located. See below.

Code:
fastboot
usage: fastboot [ <option> ] <command>
 
commands:
  update <filename>                        reflash device from update.zip
  flashall                                 flash boot + recovery + system
  flash <partition> [ <filename> ]         write a file to a flash partition
  erase <partition>                        erase a flash partition
  format <partition>                       format a flash partition
  getvar <variable>                        display a bootloader variable
  boot <kernel> [ <ramdisk> ]              download and boot kernel
  flash:raw boot <kernel> [ <ramdisk> ]    create bootimage and flash it
  devices                                  list all connected devices
  continue                                 continue with autoboot
  reboot                                   reboot device normally
  reboot-bootloader                        reboot device into bootloader
  help                                     show this help message
 
options:
  -w                                       erase userdata and cache
  -s <serial number>                       specify device serial number
  -p <product>                             specify product name
  -c <cmdline>                             override kernel commandline
  -i <vendor id>                           specify a custom USB vendor id
  -b <base_addr>                           specify a custom kernel base address
  -n <page size>                           specify the nand page size. default: 2048
Along with these commands, there is an additional one: oem. For now, I will only cover the following commands: devices, flash, boot, erase, reboot, reboot-bootloader and oem.

These commands will work in fastboot mode, whether your bootloader is lock or unlocked:

oem: with a shipping bootloader (like what most of us have on our devices) there are two “oem” commands: “oem unlock” and “oem lock”. These commands are used to unlock and lock your bootloader, e.g., “fastboot oem unlock” will unlock your bootloader.
devices: this command checks to see if your device is properly connected to your PC in fastboot mode, e.g., “fastboot devices”
reboot: this command will reboot your device, e.g., “fastboot reboot”
reboot-bootloader: this command will reboot your device into fastboot mode, e.g., “fastboot reboot-bootloader”

These commands will only work in fastboot mode IFF your bootloader is unlocked:

flash: this command is used to flash images to partitions (partitions will be covered later) on your device. It cannot be used to “flash” individual files or .zips. For example, to flash the system partition, the command would be “fastboot flash system system.img”
boot: this command boots a kernel without flashing it to your device. For example, to boot an insecure kernel called “test.img”, the command would be “fastboot boot test.img”
erase: this command erases a specified partition. For example, to erase the cache partition, the command would be “fastboot erase cache”

The above mentioned commands are the basics for flashing your device. You should get familiar with them.

What is ADB?
ADB can refer to two things: the actual interface between your PC and phone, or the adb files (the .exe and two .dll files for Windows). For you to be able to use adb commands: the adb driver needs to be installed on your PC, the adb files need to be on your PC, and your device has to be booted either in recovery mode or booted normally into Android. Additionally, USB debugging needs to be enabled if booted into Android.

What are the ADB commands?
The list of ADB commands can be seen by typing “adb” (without the quotes) in a command prompt opened in the directory where your adb.exe file is located. See below.

Code:
Android Debug Bridge version 1.0.29
 
 -d                            - directs command to the only connected USB device
                                 returns an error if more than one USB device is present.
 -e                            - directs command to the only running emulator.
                                 returns an error if more than one emulator is running.
 -s <serial number>            - directs command to the USB device or emulator with
                                 the given serial number. Overrides ANDROID_SERIAL
                                 environment variable.
 -p <product name or path>     - simple product name like 'sooner', or
                                 a relative/absolute path to a product
                                 out directory like 'out/target/product/sooner'.
                                 If -p is not specified, the ANDROID_PRODUCT_OUT
                                 environment variable is used, which must
                                 be an absolute path.
 devices                       - list all connected devices
 connect <host>[:<port>]       - connect to a device via TCP/IP
                                 Port 5555 is used by default if no port number is specified.
 disconnect [<host>[:<port>]]  - disconnect from a TCP/IP device.
                                 Port 5555 is used by default if no port number is specified.
                                 Using this command with no additional arguments
                                 will disconnect from all connected TCP/IP devices.
 
device commands:
  adb push <local> <remote>    - copy file/dir to device
  adb pull <remote> [<local>]  - copy file/dir from device
  adb sync [ <directory> ]     - copy host->device only if changed
                                 (-l means list but don't copy)
                                 (see 'adb help all')
  adb shell                    - run remote shell interactively
  adb shell <command>          - run remote shell command
  adb emu <command>            - run emulator console command
  adb logcat [ <filter-spec> ] - View device log
  adb forward <local> <remote> - forward socket connections
                                 forward specs are one of:
                                   tcp:<port>
                                   localabstract:<unix domain socket name>
                                   localreserved:<unix domain socket name>
                                   localfilesystem:<unix domain socket name>
                                   dev:<character device name>
                                   jdwp:<process pid> (remote only)
  adb jdwp                     - list PIDs of processes hosting a JDWP transport
  adb install [-l] [-r] [-s] <file> - push this package file to the device and install it
                                 ('-l' means forward-lock the app)
                                 ('-r' means reinstall the app, keeping its data)
                                 ('-s' means install on SD card instead of internal storage)
  adb uninstall [-k] <package> - remove this app package from the device
                                 ('-k' means keep the data and cache directories)
  adb bugreport                - return all information from the device
                                 that should be included in a bug report.
 
  adb backup [-f <file>] [-apk|-noapk] [-shared|-noshared] [-all] [-system|-nosystem] [<packages...>]
                               - write an archive of the device's data to <file>.
                                 If no -f option is supplied then the data is written
                                 to "backup.ab" in the current directory.
                                 (-apk|-noapk enable/disable backup of the .apks themselves
                                    in the archive; the default is noapk.)
                                 (-shared|-noshared enable/disable backup of the device's
                                    shared storage / SD card contents; the default is noshared.)
                                 (-all means to back up all installed applications)
                                 (-system|-nosystem toggles whether -all automatically includes
                                    system applications; the default is to include system apps)
                                 (<packages...> is the list of applications to be backed up.  If
                                    the -all or -shared flags are passed, then the package
                                    list is optional.  Applications explicitly given on the
                                    command line will be included even if -nosystem would
                                    ordinarily cause them to be omitted.)
 
  adb restore <file>           - restore device contents from the <file> backup archive
 
  adb help                     - show this help message
  adb version                  - show version num
 
scripting:
  adb wait-for-device          - block until device is online
  adb start-server             - ensure that there is a server running
  adb kill-server              - kill the server if it is running
  adb get-state                - prints: offline | bootloader | device
  adb get-serialno             - prints: <serial-number>
  adb status-window            - continuously print device status for a specified device
  adb remount                  - remounts the /system partition on the device read-write
  adb reboot [bootloader|recovery] - reboots the device, optionally into the bootloader or recovery program
  adb reboot-bootloader        - reboots the device into the bootloader
  adb root                     - restarts the adbd daemon with root permissions
  adb usb                      - restarts the adbd daemon listening on USB
  adb tcpip <port>             - restarts the adbd daemon listening on TCP on the specified port
networking:
  adb ppp <tty> [parameters]   - Run PPP over USB.
 Note: you should not automatically start a PPP connection.
 <tty> refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1
 [parameters] - Eg. defaultroute debug dump local notty usepeerdns
 
adb sync notes: adb sync [ <directory> ]
  <localdir> can be interpreted in several ways:
 
  - If <directory> is not specified, both /system and /data partitions will be updated.
 
  - If it is "system" or "data", only the corresponding partition
    is updated.
copkay has written up a great guide on the use of the “backup” and “restore” commands in this thread, so I will not cover those commands here.


For now, I will only cover the following commands: devices, reboot, reboot bootloader, push, pull and shell.

devices: this command checks to see if your device is properly connected to your PC in ADB mode, e.g., “adb devices”
reboot: this command will reboot your device, e.g., “adb reboot”
reboot-bootloader: this command will reboot your device into fastboot mode, e.g., “adb reboot bootloader”
push: this command copies a file (or directory) to your device from your PC. For example, say you wanted to copy to your /sdcard folder on your device a file called junk.jpg, which is stored on your PC in c:\. The command would be “adb push c:\junk.jpg /sdcard/” (assuming the folder is mounted – to be covered later). Petrovski80 has added more details on copying files to your device in his thread here.
pull: this command copies a file (or directory) to your PC from your device. For example, say you wanted to copy to your c:\ directory on your PC a file called junk.jpg, which is stored in the /sdcard folder on your device. The command would be “adb pull /sdcard/junk.jpg c:\” (assuming the folder is mounted – to be covered later).
shell: this command opens a “shell” to your device so you can issue commands directly to the Android OS. The command is “adb shell”. Your prompt will change to “$” which means that you are now issuing commands to Android, not to your PC. (At some point, I will try to put together a list of commonly used commands, but for anyone that has used Linux, they are essentially the same.)


What are the partitions on a Galaxy Nexus?
A Galaxy Nexus has the following 13 partitions:

boot <-- this is where the kernel and ramdisk are stored
cache <-- this is, well, the cache, i.e., a temporary storage area
dgs <-- I have no idea what this is for
efs <-- this is where your IMEI number is stored, among other things
metadata <-- I have no idea what this is for
misc <-- I have no idea what this is for
param <-- this is where the lock state of the bootloader is stored
radio <-- this is where the radio (i.e., baseband) is stored
recovery <-- this is where the recovery is stored
sbl <-- this is part of the bootloader, and is loaded by the xloader. This is what provides the odin and fastboot interfaces.
system <-- this is where the Android OS resides
userdata <-- this is where your data, including /sdcard resides
xloader <-- this is part of the bootloader, and loads up first.

See this thread or this one for the offsets and sizes.

What does mounting mean?
In order for a device to have access to files, the partition on which those files reside needs to be “mounted”. If you are in recovery, you can easily do this by going to the mounts menu and mounting the appropriate partition. If you are booted in Android, you will need to mount the partition yourself. The /sdcard folder is already mounted by default, however.

How do I mount the system partition?
In recovery: go to the mount menu and mount /system
In Android, on your device: you need root, and a file explorer with root access
In Android, connected via ADB (root required): you need to type the following command in a command prompt:

adb shell
su
mount -o remount,rw -t ext4 /dev/block/mmcblk0p1 /system

To explain this a bit:

-o remount,rw <== this remounts a partition that is already mounted (as read-only), as read-write

-t ext4 <== this specifies to mount it as ext4

/dev/block/mmcblk0p1 <== this is the system partition

/system <== this is what you are mounting it as

What is recovery?
Recovery is like a mini OS, which allows you to perform various functions, usually related to flashing files to your device, or updating files, or backing things up, etc. The stock image has a recovery included, but its functionality is very limited. There are a number of custom recoveries available, but the two most popular for the Galaxy Nexus are CWM and TWRP. There are various versions of each. More details to come in this section.

I see an Android lying on its back when I boot into recovery. Why?
What you see is the main screen of the Galaxy Nexus stock recovery. To access the menu, you need to push and hold power and press volume up.

I just flashed CWM, but every time I try to boot into CWM, I keep seeing the stock recovery. Why?
If you updated your Android build using an OTA update file (either manually or over-the-air), the update placed two files on your device that re-flash the stock recovery every time you reboot your device. These two files are:

/system/etc/install-recovery.sh <== this is the script that installs the patch file
/system/recovery-from-boot.p <== this is the patch

You have to rename (or delete) one or both of them, then re-flash your custom recovery. Now it will stick.

What is an insecure boot image?
An insecure boot image is one that has root enabled for the shell user (i.e, ADB) by default on boot. This means that if you have booted or flashed an insecure image, when you connect your device to a computer, and open a shell via ADB, you will be userid 0 (or root) without having to "request" root access via the su binary. This makes somethings easier -- for example, you can now use the "remount" command in ADB to mount /system without having to type the full mount command in a shell. (More to add later.)

How do I root?
As was mentioned earlier, you need to place the su binary and the superuser app into the right spots on your device. In order to do this, you need to already have root access. There are two ways: flash a root package in recovery (instructions here), or manually place the files in the appropriate spots (I will add instructions on how to do this at a later time).
 
Last edited:

efrant

Retired Senior Moderator & Developers Relations
Feb 12, 2009
11,469
10,985
Montreal
Samsung Galaxy S20
Useful Galaxy Nexus Guides and Reference Threads

Useful Galaxy Nexus Guides and Reference Threads

Galaxy Nexus drivers: http://xdaforums.com/showthread.php?t=1379875

Jubakuba Galaxy Nexus guide: http://xdaforums.com/showthread.php?t=1529058

Difference between yakju/takju and the other builds: http://xdaforums.com/showthread.php?t=1728555

How to back up your device using ADB – no root needed: http://xdaforums.com/showthread.php?t=1420351

How to copy files to/from your device using ADB: http://xdaforums.com/showthread.php?t=1869380

How to return your device to Google’s stock images: http://xdaforums.com/showthread.php?t=1626895

How to root: http://xdaforums.com/showpost.php?p=26328017&postcount=123

How to unlock the bootloader WITHOUT root and WITHOUT wiping data: http://xdaforums.com/showthread.php?t=2016628

List of all OTA update files and links, including instructions on how to update: http://xdaforums.com/showthread.php?t=1419170

List of all GSM radios: http://xdaforums.com/showpost.php?p=20569003

List of most GSM RILs: http://xdaforums.com/showpost.php?p=27441945

List of all bootloaders: http://xdaforums.com/showthread.php?t=1587498

List of all toro (i.e., Verizon) radios: http://xdaforums.com/showthread.php?t=1890585

How to unlock your bootloader without wiping data and without being connected to a PC – root required: http://xdaforums.com/showthread.php?t=1731993

How to root without unlocking your bootloader – for builds from 4.0.1 to 4.1.1, : http://xdaforums.com/showthread.php?p=31751966

How to root without unlocking your bootloader – for 4.0.1 and 4.0.2 builds only: http://xdaforums.com/showthread.php?t=1531865

CWM recovery (latest for maguro, toro, toroplus): http://www.clockworkmod.com/rommanager/

CWM recovery (5.5.0.2 for maguro): http://xdaforums.com/showthread.php?t=1357642

CWM recovery (5.5.0.4 for toro): http://xdaforums.com/showthread.php?t=1392336

TWRP recovery (latest for maguro, toro, toroplus): http://xdaforums.com/showthread.php?t=1592689

Edify scripting: How to create recovery-flashable zips: http://xdaforums.com/showthread.php?p=29735133

Odin: How to flash your device if you cannot get into fastboot mode: http://xdaforums.com/showthread.php?t=1586807

OMAP_Flash: How to flash your device if you cannot get into fastboot mode and you cannot get into download mode: http://xdaforums.com/showthread.php?t=1760787

How to compile your own ROM from source: http://xdaforums.com/showthread.php?t=1386615

How to remove a carrier SIM lock (proper method): http://xdaforums.com/showthread.php?t=1606982

How to remove a carrier SIM lock (easy but you will lose you IMEI): http://xdaforums.com/showthread.php?t=1548210

Information on bootloader security: http://xdaforums.com/showthread.php?t=1898664

How to recovery deleted files: http://xdaforums.com/showthread.php?p=34185439

How to nandroid directly to your computer: http://xdaforums.com/showthread.php?t=1818321
 
Last edited:

El Daddy

Retired Forum Moderator
May 2, 2008
4,261
5,210
Roseville, MN
Good work man! I was thinking about doing something similar this weekend but this is much better. :)

Edit: This needs to be stickied ASAP

Sent from my Galaxy Nexus using xda premium
 
Last edited:

efrant

Retired Senior Moderator & Developers Relations
Feb 12, 2009
11,469
10,985
Montreal
Samsung Galaxy S20
Good work man! I was thinking about doing something similar this weekend but this is much better. :)

Sent from my Galaxy Nexus using xda premium
Thanks (to all).

It is far from complete though, and it will be an on-going work-in-progress. It's not as easy to write up general info as it is to write up a step-by-step guide... :)
 

killyouridols

Senior Member
Sep 15, 2009
641
129
Essex
Awesome post. This should see a few overwhelmed users right :)

Top work!

Sent from my Galaxy Nexus using xda app-developers app
 

strumcat

Senior Member
Mar 29, 2012
681
305
Incredibly useful and much needed thread, really well done, efrant. Information desk and referral center for new users. Wish it was here when I came onboard. You should make a "N00b Lighthouse" graphic for it. I think this will help reduce and untangle a lot of the repetitive new-user threads.
 

segv11

Senior Member
Mar 19, 2012
379
526
toro partitions

Great thread, efrant. Thanks for the effort. I'd love to see this stickied.


You mentioned toro/toroplus having a "radio-cdma" partition. I can't find it; perhaps it is a virtual partition that recovery and the fastboot know about that does not exist separately in storage. Perhaps it's hidden inside another one.

I'd like to contribute the partition list from my "toro" (Verizon Galaxy Nexus) in case is is useful. In addition to the named partitions listed in the OP, there 5 more unnamed ones. I don't know yet what they are used for.


Code:
mtdblock0    - (don't know)
mmcblk0      - (don't know but it looks big; like the entire eMMC)
mmcblk0p1    - xloader
mmcblk0p2    - sbl
mmcblk0p3    - efs
mmcblk0p4    - param
mmcblk0p5    - misc
mmcblk0p6    - dgs
mmcblk0p7    - boot
mmcblk0p8    - recovery
mmcblk0p9    - radio
mmcblk0p10   - system
mmcblk0p11   - cache
mmcblk0p12   - userdata
mmcblk0p13   - metadata
mmcblk0boot1 - (don't know - blank on Galaxy Nexus, but other devices use this)
mmcblk0boot0 - (don't know - blank on Galaxy Nexus, but other devices use this)

I would love to learn more about the bootchain, as I'm sure several of our unknown partitions are involved.
 

efrant

Retired Senior Moderator & Developers Relations
Feb 12, 2009
11,469
10,985
Montreal
Samsung Galaxy S20
Great thread, efrant. Thanks for the effort. I'd love to see this stickied.


You mentioned toro/toroplus having a "radio-cdma" partition. I can't find it; perhaps it is a virtual partition that recovery and the fastboot know about that does not exist separately in storage. Perhaps it's hidden inside another one.

I'd like to contribute the partition list from my "toro" (Verizon Galaxy Nexus) in case is is useful. In addition to the named partitions listed in the OP, there 5 more unnamed ones. I don't know yet what they are used for.


Code:
mtdblock0    - (don't know)
mmcblk0      - (don't know but it looks big; like the entire eMMC)
mmcblk0p1    - xloader
mmcblk0p2    - sbl
mmcblk0p3    - efs
mmcblk0p4    - param
mmcblk0p5    - misc
mmcblk0p6    - dgs
mmcblk0p7    - boot
mmcblk0p8    - recovery
mmcblk0p9    - radio
mmcblk0p10   - system
mmcblk0p11   - cache
mmcblk0p12   - userdata
mmcblk0p13   - metadata
mmcblk0boot1 - (don't know - blank on Galaxy Nexus, but other devices use this)
mmcblk0boot0 - (don't know - blank on Galaxy Nexus, but other devices use this)

I would love to learn more about the bootchain, as I'm sure several of our unknown partitions are involved.
Thanks for the correction. Post edited. I wasn't entirely sure (as I don't have a toro or toroplus devices). Based on what I've read, I'm gathering that the LTE radio likely resides on the radio partition, along with the 3G radio.

And yes, I'm pretty sure you are correct: the mmcblk0 is just the entire NAND. Not sure what mmcblk0boot0, mmcblk0boot1 and mtdblock0 are.

I would also like to know more about the boot chain. I will try to do some research as time permits. From what I've read so far (and most of it is from AdamOutler -- see this thread), there is a chip that is not flashable which contains the intial boot program, which then loads the xloader, which in turn loads the sbl (which provides the odin and fastboot interfaces), which then loads the kernel.
 
  • Like
Reactions: arkhan11 and segv11

LifeInAnalog

Senior Member
Dec 13, 2010
301
349
Georgetown
..great work efrant, as always.

If I had a dollar for every time this thread gets a link reference in answering questions...

Sent from my Galaxy Nexus using xda premium
 

Top Liked Posts

  • There are no posts matching your filters.
  • 213
    The popularity of Nexus devices has increased significantly since the launch of the Nexus One in January 2010. Along with this popularity, forums such as xda-developers have also had an influx of new users, most of which are not developers, and are not well versed in the intricacies of Android.

    After much thought (and some discussion on this thread), I’ve decided to create this thread as a compilation of FAQs, 101s, and “How-To’s” in the hopes that those coming to Android who want to learn will have another resource to help them learn. With that in mind, this thread is NOT meant to explain the quickest way to do things (you will NOT see toolkits or shortcuts discussed in this thread), nor is it meant to be a “fix-my-device” thread. It is created with for a purpose of learning, in order to expand users’ knowledge of Nexus devices and Android in general. See this post by kyphur for the general philosophy of this site, which I share.

    I do not take myself to be an Android guru or developer. However, I do have a bit of knowledge to share. If you think things are missing or not accurate, I will be more than happy to add or revise anything. I will try to cover most of the basic topics related to Android, including drivers, ADB, fastboot, partitions, recoveries, bootloaders, root and reverting to stock. Again, I will not discuss toolkits, nor will I cover custom ROMs. Those have their own threads.

    This will be an ongoing work-in-progress, as it takes considerable time to try and capture everything properly, and my time is limited. The order of the information will also change, as I haven't quite figured out the best way to present everything. (Currently there are some FAQs, including fastboot and ADB commands, followed by a list of reference and how-to threads.)

    So, without further delay:

    Frequently Asked Questions

    What is Android?
    Android is an open-source operating system for mobile devices. It is basically a java virtual machine running on a Linux-based kernel.

    What is the Android SDK and do I need it?
    SDK stands for "software development kit. Do you need it? If you are developing, then yes (but then you probably would be reading this thread now would you... :) ). If you are not developing, then no, you do NOT need to install it. It is just a waste of space. The only files you need (to interface with your PC) that comes from the SDK are the fastboot and adb files, and they can be found here for Windows, Linux, and MacOS.

    Why do I need a driver for my Windows PC to recognize my device?
    As with all hardware, Windows requires device drivers for it to be able to interface with the OS. Drivers are not required if you are using Linux or MacOS.

    Where do I get the driver for my PC?
    For previous Nexus devices (the Nexus One and Nexus S) the driver included in the Android SDK was the one needed. However, with the Galaxy Nexus, that driver no longer works. The driver is now provided by Samsung, and can be found from various locations. However, I recommend using this package by 1wayjonny. It works perfectly and, unlike most other packages, 1wayjonny’s repack does not install any crapware along with it. That said, it doesn’t include an .exe file, so it needs to be installed manually from the .inf file. If you do not now how to do that, see here for instructions. Note: If you are using Windows 8, you will need to do this before you can install the driver.

    Why do I need to install the driver twice?
    Nexus devices use two main interfaces (there are actually a few more, but I will cover them later) to communicate with a PC. These are ADB (Android debug bridge) and fastboot, both of which will be covered later. The fastboot interface requires the GNex to be booted in fastboot (i.e., bootloader) mode. Thus, in order to install the fastboot driver, you need to boot your GNex into the bootloader. The ADB interface requires an Android kernel to be booted, i.e., your device needs to be booted normally, or in recovery (covered later). Additionally, if your device is booted normally, you need to have USB Debugging set to enabled in settings (i.e., Settings->Developer options->USB debugging).

    How do I boot my device into the bootloader (i.e., fastboot mode)?
    Turn off your device, hold volume up and volume down, and press and hold the power button.

    What is a command prompt?
    A command prompt in Windows (or terminal in Linux/MacOS) is a command line window in which you can enter commands. To open a command prompt in Windows, you can hold the shift key and right click in the directory in which you want your command prompt open. Or, in a Windows Explorer window you can go to File-><name-of-window>->Open command window here.

    What is a bootloader?
    Without getting into too many technicalities, the bootloader is essentially the program that gets loaded first when starting your device, and it is responsible for booting the Android kernel. Think of the bootloader as the BIOS of a computer.

    What does it mean if my bootloader is locked/unlocked?
    Most (if not all) devices are shipped from the manufacturer with locked bootloaders. This is for security reasons. A locked bootloader does not allow easy flashing of images, which means that it is difficult to change or modify the operating system. Unlocking a bootloader (using fastboot) on a most Galaxy Nexus devices results in a complete loss of all personal data from the device. Having a locked or unlocked bootloader has no bearing on the functioning of the device. Unlocking it gives you more options to play around with the OS. Additionally, an unlocked bootloader means that you can easily root your device no matter what -- unlike most non-Nexus devices, if you lose root, it is trivial to get it back.

    What is “root”?
    Root essentially means that you have root (or superuser) access to the file system on Android. It is similar to being “administrator” on a Windows PC. It has nothing to do with your device or the bootloader, it has to do with the Android OS (i.e., you cannot “root” your device – you root the Andoid build that you are running). To have root, you need to be booted into the Android OS that you have rooted. If you are in fastboot mode, root is irrelevant.

    How do I get “root”?
    If you are booted into a custom recovery (recoveries will be covered later), root is enabled by default. If you want root while booted into Android, you will need to place two files on your system partition: an “su” binary which grants root access, and a superuser app that manages that access. The two that are available are ChainsDD’s Superuser and Chainfire’s SuperSU. Usually these files are packaged up in a zip file that is flashable using a custom recovery, but they can be flashed manually using ADB. Both of these methods will be described below.

    If I unlock my bootloader, is that the same as root?
    No, as was mentioned above, unlocking the bootloader allows you to (among a few other things) flash images easily to the device when not booted into the Android OS. Root allows you access to manipulate the files WITHIN the Android OS.

    If I unlock my bootloader, does that mean that I have to root?
    No.

    If I unlock my bootloader, do I have to flash a custom ROM?
    No.

    Do I need to root to flash a ROM?
    No.

    What is a ROM?
    A ROM is slang for an mobile OS build.

    What are the different versions of Android, and is there a difference between say 4.2 and JOP40C?
    Have a look at this link for an explanation of what (for example) JOP40C means, and what version of Android that is.

    What is the difference between a stock ROM and a custom ROM?
    A stock ROM is a ROM that is either built by Google (like any yakju/takju/mysid build) or built by Samsung (like all the yakju** variants and mysidpr) and is signed by Google’s (or Samsung’s) platform keys. Everything else is a custom ROM.

    What is this AOSP I keep hearing about?
    AOSP stands for Android Open Source Project, and is a repository for the source code for Android. You can build your own ROM from AOSP. Details can be found on http://source.android.com/ or here.

    What is fastboot?
    Fastboot can refer to three things: the actual interface between your PC and phone; the fastboot.exe file; or the “mode” of your device. For you to be able to use fastboot commands: your device has to be booted in fastboot mode, the fastboot driver for your PC needs to be installed, and the fastboot.exe file needs to be on your PC.

    What are the fastboot commands?
    The list of fastboot commands can be seen by typing “fastboot” (without the quotes) in a command prompt opened in the directory where you fastboot.exe file is located. See below.

    Code:
    fastboot
    usage: fastboot [ <option> ] <command>
     
    commands:
      update <filename>                        reflash device from update.zip
      flashall                                 flash boot + recovery + system
      flash <partition> [ <filename> ]         write a file to a flash partition
      erase <partition>                        erase a flash partition
      format <partition>                       format a flash partition
      getvar <variable>                        display a bootloader variable
      boot <kernel> [ <ramdisk> ]              download and boot kernel
      flash:raw boot <kernel> [ <ramdisk> ]    create bootimage and flash it
      devices                                  list all connected devices
      continue                                 continue with autoboot
      reboot                                   reboot device normally
      reboot-bootloader                        reboot device into bootloader
      help                                     show this help message
     
    options:
      -w                                       erase userdata and cache
      -s <serial number>                       specify device serial number
      -p <product>                             specify product name
      -c <cmdline>                             override kernel commandline
      -i <vendor id>                           specify a custom USB vendor id
      -b <base_addr>                           specify a custom kernel base address
      -n <page size>                           specify the nand page size. default: 2048
    Along with these commands, there is an additional one: oem. For now, I will only cover the following commands: devices, flash, boot, erase, reboot, reboot-bootloader and oem.

    These commands will work in fastboot mode, whether your bootloader is lock or unlocked:

    oem: with a shipping bootloader (like what most of us have on our devices) there are two “oem” commands: “oem unlock” and “oem lock”. These commands are used to unlock and lock your bootloader, e.g., “fastboot oem unlock” will unlock your bootloader.
    devices: this command checks to see if your device is properly connected to your PC in fastboot mode, e.g., “fastboot devices”
    reboot: this command will reboot your device, e.g., “fastboot reboot”
    reboot-bootloader: this command will reboot your device into fastboot mode, e.g., “fastboot reboot-bootloader”

    These commands will only work in fastboot mode IFF your bootloader is unlocked:

    flash: this command is used to flash images to partitions (partitions will be covered later) on your device. It cannot be used to “flash” individual files or .zips. For example, to flash the system partition, the command would be “fastboot flash system system.img”
    boot: this command boots a kernel without flashing it to your device. For example, to boot an insecure kernel called “test.img”, the command would be “fastboot boot test.img”
    erase: this command erases a specified partition. For example, to erase the cache partition, the command would be “fastboot erase cache”

    The above mentioned commands are the basics for flashing your device. You should get familiar with them.

    What is ADB?
    ADB can refer to two things: the actual interface between your PC and phone, or the adb files (the .exe and two .dll files for Windows). For you to be able to use adb commands: the adb driver needs to be installed on your PC, the adb files need to be on your PC, and your device has to be booted either in recovery mode or booted normally into Android. Additionally, USB debugging needs to be enabled if booted into Android.

    What are the ADB commands?
    The list of ADB commands can be seen by typing “adb” (without the quotes) in a command prompt opened in the directory where your adb.exe file is located. See below.

    Code:
    Android Debug Bridge version 1.0.29
     
     -d                            - directs command to the only connected USB device
                                     returns an error if more than one USB device is present.
     -e                            - directs command to the only running emulator.
                                     returns an error if more than one emulator is running.
     -s <serial number>            - directs command to the USB device or emulator with
                                     the given serial number. Overrides ANDROID_SERIAL
                                     environment variable.
     -p <product name or path>     - simple product name like 'sooner', or
                                     a relative/absolute path to a product
                                     out directory like 'out/target/product/sooner'.
                                     If -p is not specified, the ANDROID_PRODUCT_OUT
                                     environment variable is used, which must
                                     be an absolute path.
     devices                       - list all connected devices
     connect <host>[:<port>]       - connect to a device via TCP/IP
                                     Port 5555 is used by default if no port number is specified.
     disconnect [<host>[:<port>]]  - disconnect from a TCP/IP device.
                                     Port 5555 is used by default if no port number is specified.
                                     Using this command with no additional arguments
                                     will disconnect from all connected TCP/IP devices.
     
    device commands:
      adb push <local> <remote>    - copy file/dir to device
      adb pull <remote> [<local>]  - copy file/dir from device
      adb sync [ <directory> ]     - copy host->device only if changed
                                     (-l means list but don't copy)
                                     (see 'adb help all')
      adb shell                    - run remote shell interactively
      adb shell <command>          - run remote shell command
      adb emu <command>            - run emulator console command
      adb logcat [ <filter-spec> ] - View device log
      adb forward <local> <remote> - forward socket connections
                                     forward specs are one of:
                                       tcp:<port>
                                       localabstract:<unix domain socket name>
                                       localreserved:<unix domain socket name>
                                       localfilesystem:<unix domain socket name>
                                       dev:<character device name>
                                       jdwp:<process pid> (remote only)
      adb jdwp                     - list PIDs of processes hosting a JDWP transport
      adb install [-l] [-r] [-s] <file> - push this package file to the device and install it
                                     ('-l' means forward-lock the app)
                                     ('-r' means reinstall the app, keeping its data)
                                     ('-s' means install on SD card instead of internal storage)
      adb uninstall [-k] <package> - remove this app package from the device
                                     ('-k' means keep the data and cache directories)
      adb bugreport                - return all information from the device
                                     that should be included in a bug report.
     
      adb backup [-f <file>] [-apk|-noapk] [-shared|-noshared] [-all] [-system|-nosystem] [<packages...>]
                                   - write an archive of the device's data to <file>.
                                     If no -f option is supplied then the data is written
                                     to "backup.ab" in the current directory.
                                     (-apk|-noapk enable/disable backup of the .apks themselves
                                        in the archive; the default is noapk.)
                                     (-shared|-noshared enable/disable backup of the device's
                                        shared storage / SD card contents; the default is noshared.)
                                     (-all means to back up all installed applications)
                                     (-system|-nosystem toggles whether -all automatically includes
                                        system applications; the default is to include system apps)
                                     (<packages...> is the list of applications to be backed up.  If
                                        the -all or -shared flags are passed, then the package
                                        list is optional.  Applications explicitly given on the
                                        command line will be included even if -nosystem would
                                        ordinarily cause them to be omitted.)
     
      adb restore <file>           - restore device contents from the <file> backup archive
     
      adb help                     - show this help message
      adb version                  - show version num
     
    scripting:
      adb wait-for-device          - block until device is online
      adb start-server             - ensure that there is a server running
      adb kill-server              - kill the server if it is running
      adb get-state                - prints: offline | bootloader | device
      adb get-serialno             - prints: <serial-number>
      adb status-window            - continuously print device status for a specified device
      adb remount                  - remounts the /system partition on the device read-write
      adb reboot [bootloader|recovery] - reboots the device, optionally into the bootloader or recovery program
      adb reboot-bootloader        - reboots the device into the bootloader
      adb root                     - restarts the adbd daemon with root permissions
      adb usb                      - restarts the adbd daemon listening on USB
      adb tcpip <port>             - restarts the adbd daemon listening on TCP on the specified port
    networking:
      adb ppp <tty> [parameters]   - Run PPP over USB.
     Note: you should not automatically start a PPP connection.
     <tty> refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1
     [parameters] - Eg. defaultroute debug dump local notty usepeerdns
     
    adb sync notes: adb sync [ <directory> ]
      <localdir> can be interpreted in several ways:
     
      - If <directory> is not specified, both /system and /data partitions will be updated.
     
      - If it is "system" or "data", only the corresponding partition
        is updated.
    copkay has written up a great guide on the use of the “backup” and “restore” commands in this thread, so I will not cover those commands here.


    For now, I will only cover the following commands: devices, reboot, reboot bootloader, push, pull and shell.

    devices: this command checks to see if your device is properly connected to your PC in ADB mode, e.g., “adb devices”
    reboot: this command will reboot your device, e.g., “adb reboot”
    reboot-bootloader: this command will reboot your device into fastboot mode, e.g., “adb reboot bootloader”
    push: this command copies a file (or directory) to your device from your PC. For example, say you wanted to copy to your /sdcard folder on your device a file called junk.jpg, which is stored on your PC in c:\. The command would be “adb push c:\junk.jpg /sdcard/” (assuming the folder is mounted – to be covered later). Petrovski80 has added more details on copying files to your device in his thread here.
    pull: this command copies a file (or directory) to your PC from your device. For example, say you wanted to copy to your c:\ directory on your PC a file called junk.jpg, which is stored in the /sdcard folder on your device. The command would be “adb pull /sdcard/junk.jpg c:\” (assuming the folder is mounted – to be covered later).
    shell: this command opens a “shell” to your device so you can issue commands directly to the Android OS. The command is “adb shell”. Your prompt will change to “$” which means that you are now issuing commands to Android, not to your PC. (At some point, I will try to put together a list of commonly used commands, but for anyone that has used Linux, they are essentially the same.)


    What are the partitions on a Galaxy Nexus?
    A Galaxy Nexus has the following 13 partitions:

    boot <-- this is where the kernel and ramdisk are stored
    cache <-- this is, well, the cache, i.e., a temporary storage area
    dgs <-- I have no idea what this is for
    efs <-- this is where your IMEI number is stored, among other things
    metadata <-- I have no idea what this is for
    misc <-- I have no idea what this is for
    param <-- this is where the lock state of the bootloader is stored
    radio <-- this is where the radio (i.e., baseband) is stored
    recovery <-- this is where the recovery is stored
    sbl <-- this is part of the bootloader, and is loaded by the xloader. This is what provides the odin and fastboot interfaces.
    system <-- this is where the Android OS resides
    userdata <-- this is where your data, including /sdcard resides
    xloader <-- this is part of the bootloader, and loads up first.

    See this thread or this one for the offsets and sizes.

    What does mounting mean?
    In order for a device to have access to files, the partition on which those files reside needs to be “mounted”. If you are in recovery, you can easily do this by going to the mounts menu and mounting the appropriate partition. If you are booted in Android, you will need to mount the partition yourself. The /sdcard folder is already mounted by default, however.

    How do I mount the system partition?
    In recovery: go to the mount menu and mount /system
    In Android, on your device: you need root, and a file explorer with root access
    In Android, connected via ADB (root required): you need to type the following command in a command prompt:

    adb shell
    su
    mount -o remount,rw -t ext4 /dev/block/mmcblk0p1 /system

    To explain this a bit:

    -o remount,rw <== this remounts a partition that is already mounted (as read-only), as read-write

    -t ext4 <== this specifies to mount it as ext4

    /dev/block/mmcblk0p1 <== this is the system partition

    /system <== this is what you are mounting it as

    What is recovery?
    Recovery is like a mini OS, which allows you to perform various functions, usually related to flashing files to your device, or updating files, or backing things up, etc. The stock image has a recovery included, but its functionality is very limited. There are a number of custom recoveries available, but the two most popular for the Galaxy Nexus are CWM and TWRP. There are various versions of each. More details to come in this section.

    I see an Android lying on its back when I boot into recovery. Why?
    What you see is the main screen of the Galaxy Nexus stock recovery. To access the menu, you need to push and hold power and press volume up.

    I just flashed CWM, but every time I try to boot into CWM, I keep seeing the stock recovery. Why?
    If you updated your Android build using an OTA update file (either manually or over-the-air), the update placed two files on your device that re-flash the stock recovery every time you reboot your device. These two files are:

    /system/etc/install-recovery.sh <== this is the script that installs the patch file
    /system/recovery-from-boot.p <== this is the patch

    You have to rename (or delete) one or both of them, then re-flash your custom recovery. Now it will stick.

    What is an insecure boot image?
    An insecure boot image is one that has root enabled for the shell user (i.e, ADB) by default on boot. This means that if you have booted or flashed an insecure image, when you connect your device to a computer, and open a shell via ADB, you will be userid 0 (or root) without having to "request" root access via the su binary. This makes somethings easier -- for example, you can now use the "remount" command in ADB to mount /system without having to type the full mount command in a shell. (More to add later.)

    How do I root?
    As was mentioned earlier, you need to place the su binary and the superuser app into the right spots on your device. In order to do this, you need to already have root access. There are two ways: flash a root package in recovery (instructions here), or manually place the files in the appropriate spots (I will add instructions on how to do this at a later time).
    46
    Useful Galaxy Nexus Guides and Reference Threads

    Useful Galaxy Nexus Guides and Reference Threads

    Galaxy Nexus drivers: http://xdaforums.com/showthread.php?t=1379875

    Jubakuba Galaxy Nexus guide: http://xdaforums.com/showthread.php?t=1529058

    Difference between yakju/takju and the other builds: http://xdaforums.com/showthread.php?t=1728555

    How to back up your device using ADB – no root needed: http://xdaforums.com/showthread.php?t=1420351

    How to copy files to/from your device using ADB: http://xdaforums.com/showthread.php?t=1869380

    How to return your device to Google’s stock images: http://xdaforums.com/showthread.php?t=1626895

    How to root: http://xdaforums.com/showpost.php?p=26328017&postcount=123

    How to unlock the bootloader WITHOUT root and WITHOUT wiping data: http://xdaforums.com/showthread.php?t=2016628

    List of all OTA update files and links, including instructions on how to update: http://xdaforums.com/showthread.php?t=1419170

    List of all GSM radios: http://xdaforums.com/showpost.php?p=20569003

    List of most GSM RILs: http://xdaforums.com/showpost.php?p=27441945

    List of all bootloaders: http://xdaforums.com/showthread.php?t=1587498

    List of all toro (i.e., Verizon) radios: http://xdaforums.com/showthread.php?t=1890585

    How to unlock your bootloader without wiping data and without being connected to a PC – root required: http://xdaforums.com/showthread.php?t=1731993

    How to root without unlocking your bootloader – for builds from 4.0.1 to 4.1.1, : http://xdaforums.com/showthread.php?p=31751966

    How to root without unlocking your bootloader – for 4.0.1 and 4.0.2 builds only: http://xdaforums.com/showthread.php?t=1531865

    CWM recovery (latest for maguro, toro, toroplus): http://www.clockworkmod.com/rommanager/

    CWM recovery (5.5.0.2 for maguro): http://xdaforums.com/showthread.php?t=1357642

    CWM recovery (5.5.0.4 for toro): http://xdaforums.com/showthread.php?t=1392336

    TWRP recovery (latest for maguro, toro, toroplus): http://xdaforums.com/showthread.php?t=1592689

    Edify scripting: How to create recovery-flashable zips: http://xdaforums.com/showthread.php?p=29735133

    Odin: How to flash your device if you cannot get into fastboot mode: http://xdaforums.com/showthread.php?t=1586807

    OMAP_Flash: How to flash your device if you cannot get into fastboot mode and you cannot get into download mode: http://xdaforums.com/showthread.php?t=1760787

    How to compile your own ROM from source: http://xdaforums.com/showthread.php?t=1386615

    How to remove a carrier SIM lock (proper method): http://xdaforums.com/showthread.php?t=1606982

    How to remove a carrier SIM lock (easy but you will lose you IMEI): http://xdaforums.com/showthread.php?t=1548210

    Information on bootloader security: http://xdaforums.com/showthread.php?t=1898664

    How to recovery deleted files: http://xdaforums.com/showthread.php?p=34185439

    How to nandroid directly to your computer: http://xdaforums.com/showthread.php?t=1818321
    8
    4
    Added comment on installing the drivers on Windows 8 to the first post.
    4
    Great job on this efrant, thread has been stickied.

    We have too many stickies in general as is so I just added a redirect for it in Q&A.