[Kindle Fire General] CaelOlcan:
###############################################

##### Android / Kindle Fire Rooting and Romming #####

###############################################

Read this (skip the windows driver section, but check out the section after that for fastboot and adb commands):

----- http://xdaforums.com/showthread.php?t=1552547

And then this:

----- http://xdaforums.com/showthread.php?t=1638452

And then note this for v6.3:

----- http://xdaforums.com/showthread.php?t=1568340

And here is the repository for links to ROMs (including stocks), bootloaders, recoveries, et al.

----- http://xdaforums.com/showthread.php?t=1859851

FYI: The Kindle Fire uses the ARM architecture in an TI OMAP 4430 chip.

----- http://www.zdnet.com/blog/hardware/inside-the-kindle-fire-processor/16317

----- The OMAP 4430 is a dual-core ARM A9 part clocked at 1GHz built using 45nm CMOS process. It features Symmetric Multiprocessing (SMP) and an integrated POWERVR SGX540 graphics accelerator (supporting OpenGL ES v2.0, OpenGL ES v1.1, OpenVG v1.1 and EGL v1.3) for 3D games and UI. It also features IVA 3 hardware accelerators to allow full HD 1080p video encode/decode. The chip also features on-board USB 2.0 support.

----- FYI: The 1st-generation Kindle Fire (which I have) is 'codenamed' Otter. The 2nd-gen is Otter2.

----- ----- http://wiki.cyanogenmod.org/w/Otter_Info

###################

#### Key Terms #####

###################

ADB (Android Debug Bridge) - Communicate with and control an Android-powered device over a USB link from a computer; part of the Android SDK; has a client, server, and daemon.

----- http://www.androidauthority.com/about-android-debug-bridge-adb-21510/

./adb help

Fastboot - A diagnostic and engineering protocol that you can boot your Android device into so you can modify the file system images from a computer over a USB connection, that is, you can flash roms to it. Is part of the ASDK (Requires more than the SDK - does it?), and specific USB drivers for windows. For fastboot to work, the device has to be in fastboot mode in order for the computer to send commands to it.

----- http://www.elinux.org/Android_Fastboot

./fastboot help

----- Usually commands are in the format: fastboot <operation> <kf_source/destination> <file>

----- So to change the splash screen image, something like:

----- ----- http://xdaforums.com/showpost.php?p=21262416&postcount=126

fastboot flash splash1 splash1.img

Recovery Mods - Essentially a rudimentary OS / advanced bootloader. Many are ROM managers that allow you to switch between various OS's you have stored on your device in ROM format, or to add/delete them. You basically wipe the system then install a new one each time you switch ROMs. Recovery mods also serve backup functions, and allow tethering (so you can use your phone as an internet connection for your laptop). The term 'recovery' comes from Android's /dev/mtd/mtd1 recovery partition, as compared to the /dev/mtd/mtd2 boot partition; the latter is the primary boot holding the kernel and initrd with rootfs for default boot, while the former is the backup boot holding another kernel and initrd with rootfs in case the primary borks; note that mtd3 is the system partition holding the bulk of the Android system files, mtd4 is the cache which is only used for OTA (Over The Air Amazon/Sprint/Verizon updates) so largely unused, and mtd5 is userdata for user-installed apps and data.

----- http://www.elinux.org/Android_Fastboot

----- TWRP (Team Win Recovery Project) is one popular recovery, built on ASOP (Android Open Source Recovery) recovery.

----- ----- http://www.teamw.in/project/twrp

----- ----- http://teamw.in/project/twrp2/79 <- the kindle fire page

----- CWM (ClockworkMod) is another recovery, but there is some sort of bug with certain chips in 1st-gen Kindles that will brick sometimes with CWM, so don't use it.

----- ----- http://www.clockworkmod.com/

----- COTR (Cannibal Open Touch Recovery) is a newer recov. Open as in open source, touch as in touch screen.

----- ----- http://www.redmondpie.com/cannibal-...ures-of-all-custom-recoveries-under-one-hood/

Bootloader - Just like a linux bootloader. This is the first thing you install (after you get root access). The Kindle requires a special one because there needs to be a way to access recovery with just one button (as opposed to a cell phone).

----- FFFe (FireFireFire Extended) - Seems to be the most popular for Kindle Fire. The extended, I believe, is a variations where dual boot is enabled (see Recovery Mods info to get an idea of how that works.) To use it, when the logo pops up after you turn on the Fire press the power button. It also does some other stuff, like make fastboot easier (I think the usb detection triggering fastboot is the 1st stage, and the rest of FFF is second). I believe that FFF is based on kf_u-boot (which is now outdated?).

----- ----- http://xdaforums.com/showthread.php?t=1369405

----- ----- http://xdaforums.com/showthread.php?t=1615093 dual boot with FFFe

----- kf_u-boot - Pokey9000's (from http://xdaforums.com) KF-specific fork of the firmware Das U-Boot (typically abbreviated as just "U-Boot") for Embedded PowerPC, ARM and MIPS systems.

----- ----- http://www.denx.de/wiki/U-Boot/

Bootmode - "As the Kindle Fire powers up or reboots, the bootloader begins to do its job and checks for the bootmode of the device. The bootmode tells the bootloader how it should proceed in the boot up process. Most users will just be concerned about three of these bootmodes: normal (4000), fastboot (4002), and recovery (5001). In a great majority of the cases, the Kindle Fire will be in the normal bootmode setting, telling the bootloader to continue right on to booting the operating system. However, there are circumstances when the device needs to be started up directly in fastboot or recovery mode. This is possible by changing the bootmode setting and rebooting the device. Bootmode is a persistent setting, meaning the Kindle Fire will remember this new setting until it is changed again. No amount of restarts or ROM flashes will change the bootmode until it is explicitly changed again."

----- http://xdaforums.com/showthread.php?t=1552547

SU and Superuser.apk - Superuser is an app that manages what apps on your rooted device have access to the su binary. Apps that are granted su have elevated permissions and can modify just about any part of the system. Superuser.apk runs as any other app and gives you, the user, a place to see what apps you have allowed or denied, as well as view a log of which apps have used su when. The su binary is what other apps call when they need superuser rights. The binary checks the database maintained by Superuser.apk to determine if you have already granted rights to the requesting app, and if not tells Superuser.apk to display a prompt asking you for permission. Superuser comes pre-installed on any rooted ROM. In fact, without it, you don’t have a rooted device at all. You cannot uninstall it, it lives on the system partition with other apps that came pre-installed on your device. It can be updated from the Market if the developer of your particular ROM has used a version that is signed with the proper keys, which are publicly available on my github (see link).

----- http://androidsu.com/superuser/ (You want the ARM architecture for the KF.)

##########################################

##### Set up ADB and Fastboot (via ASDK) #####

##########################################

http://androidtweak.in/general/installing-and-setting-up-android-sdk-adb-and-fastboot-on-gnulinux/

1. Download and unpack the Android SDK from Google to /opt. Get the full ADT bundle.

----- http://developer.android.com/sdk/index.html#ExistingIDE

2. Inside its directory, inside sdk/tools, run ./android.

3. In the SDK Manager that opens check that under Tools the Android SDK Platform-Tools are installed. If not, install them.

4. Exit the SDK Manager.

5. Verify that there is now a sdk/platform-tools directory, and that adb and fastboot are in it.

6. If you want, you can add blah/sdk/platform-tools to your $PATH.

PATH=$PATH:blah/sdk/platform-tools

####################################################

##### Get ADB to recognize the device (Kindle Fire) #####

####################################################

1. Plug in your device. The screen that comes on is called Mass Storage Mode, which allows you to mount /mnt/usb (with fstab setup correctly: /dev/sdh /mnt/usb auto defaults,noauto,user,uid=1000,gid=100 0 0 # kindle fire). Pressing 'Disconnect' on the Kindle will turn off this mode. The following I did with it on, but I don't think it matters.

2. Run 'adb devices'. If you see the first results, ignore the rest of this section.

----- https://rechtzeit.wordpress.com/2011/02/24/adb-devices-shows-no-permissions/

adb devices
List of devices attached
0123456789012345 device

----- If you see the following, then udev is unable to determine the permissions for this USB device.

adb devices
List of devices attached
???????????? no permissions

3. Verify the device is connected and get some basic info. (If you're unsure which device is yours, do a lsusb before plugging it in as well.)

lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 004: ID 1949:0006 Lab126
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
...

----- So the Kindle is device 004 on bus 002, the vendor ID# is 1949, and 0006 is the device #.

4. Get more info. Note that the first result will probably be the last usb device plugged in, but verify by looking at the idVendor and idProduct as well as the manufacturer and product attribute lines.

udevadm info --attribute-walk --name=/dev/bus/usb/002/004
looking at device '/devices/pci0000:00/0000:00:13.2/usb2/2-5':
KERNEL=="2-5"
SUBSYSTEM=="usb"
DRIVER=="usb"
ATTR{configuration}==""
ATTR{bNumInterfaces}==" 2"
ATTR{bConfigurationValue}=="1"
ATTR{bmAttributes}=="c0"
ATTR{bMaxPower}=="500mA"
ATTR{urbnum}=="1473"
ATTR{idVendor}=="1949"
ATTR{idProduct}=="0006"
ATTR{bcdDevice}=="0216"
ATTR{bDeviceClass}=="00"
ATTR{bDeviceSubClass}=="00"
ATTR{bDeviceProtocol}=="00"
ATTR{bNumConfigurations}=="1"
ATTR{bMaxPacketSize0}=="64"
ATTR{speed}=="480"
ATTR{busnum}=="2"
ATTR{devnum}=="4"
ATTR{devpath}=="5"
ATTR{version}==" 2.00"
ATTR{maxchild}=="0"
ATTR{quirks}=="0x0"
ATTR{authorized}=="1"
ATTR{manufacturer}=="Amazon"
ATTR{product}=="Kindle"
ATTR{serial}=="123456789012345"

5. If you haven't up to this point, switch to root.

6. Create a udev rules file for the device.

cd /etc/udev/rules.d/
vi 99-android.rules

----- Note that udev is being replaced by hal (at least in Slackware), and so a rules/policy file will probably need to be made in /etc/hal/fdi/policy instead of this in the future.

7. Enter the following into it and save. You should be able to leave out owner:group to let anyone use, and there are probably several other variations that will work (e.g., I believe instead of SYSFS you can have ATTR or ATTRS).

SUBSYSTEM=="usb", SYSFS{idVendor}=="1949", OWNER="me" GROUP="users", MODE="666"

8. Try it again as root, and then as your user. You should now see the serial number from the udevadm command.

adb devices
List of devices attached
123456789012345 device

9. You will also need to add a second, identical line changing the idVendor attribute to "18d1". This may not become a problem for you, but when the KF boots into fastboot mode it ceases to be recognized as a standard Kindle and instead looks like this:

lsusb
...
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 002: ID 18d1:0100 Google Inc.
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

######################

##### Temp Root It #####

######################

In order to gain root access to the device, you must use one of several methods. Which one you use will depend on the device and its current system (firmware?) version. To find your version go to Settings -> More -> Device -> System Version. As of this writing (2013-09-20), my 1st-gen Fire is version 6.3.2. The generic Android root util called SuperOneClick is known to work on at least the 6.2 Kindle software versions. You can also install an app on your Kindle called ES File Explorer (Apps -> Store -> search for 'ES', select the app, click Free, click Get App, click Install, etc., Open App) that has a root util that comes installed in it (which should show up right there, check out youtube vids for details). You can also do it by hand using fbmode (known to work with 6.2 through 6.3.1). Note that most of the one click type utils just batch run fbmode commands or similar by hand methods.

1. Go to Settings -> More -> Device

----- 1a. -> Allow Installation of Applications, change it to on.

----- 1b. Be sure you see Battery Fully Charged. If something goes wrong, you don't want it running out of juice before you can fix it.

2. Connect your device to the computer, and disconnect (aka turn off Mass Storage Mode).

3. Verify that adb is working. The prompt in the first result means it is. If it's not you'll see the device not found error. (Be sure to exit the adb shell when done.)

adb shell
$
$ exit
adb shell
error: device not found

4. (Be sure to exit the adb shell first.) Check to see if you already have root access. If you get the first result, then you have root access and can skip the rest of this section.

adb root
adbd is already running as root
adb root
adbd cannot run as root in production builds

5. Get into fastboot mode somehow, fbmode is the easiest. This is a workaround to get you into fastboot mode when you don't have root privileges. Note that once you have root privileges, you can change the bootmode with "adb shell idme bootmode 4002; adb reboot" instead. (Also, I'm not sure if fbmode gives permanent root privileges.) First download fbmode and unzip it into the platform-tools dir.

----- http://xdaforums.com/showthread.php?t=1414832

----- MD5sum: 091dc2ca822eab525d85aad629add7d3 fbmode.zip

----- I extracted it to sdk/platform-tools/fbmode(by_pokey9000).

----- 5a. Place the fbmode file onto your KF in /data/local/tmp. (You can also use /data/local. The /data partition is write accessible to unprivileged users so that's why we use it.)

adb push fbmode(by_pokey9000)/fbmode /data/local/tmp
3225 KB/s (510876 bytes in 0.154s)

----- 5b. Change the file to executable by running a command in a remote shell on the KF, and verify.

adb shell chmod 755 /data/local/tmp/fbmode
adb shell ls -l /data/local/tmp/fbmode
-rwxr-xr-x shell shell 510876 2011-12-29 01:32 fbmode

----- 5c. Now run the binary via a remote shell, and verify.

adb shell /data/local/tmp/fbmode

----- 5d. Reboot the device (will reboot into fastboot).

adb reboot

6. Immediately continue with installing a bootloader.

############################

##### Install a Bootloader #####

############################

There are lots of these available. Currently (2013-09-20) FireFireFire Extended v1.4a seems to be the most popular. Note that the older version of FFFe (prior to 1.4) caused the yellow triangle boot hang problem you may read about. As mentioned in the Key Terms above, you will need a bootloader specifically designed for the Kindle Fire so you will be able to access the recovery partition/software using the only (power) button.

1. Download FFFe, and unzip it into the platform-tools dir.

----- http://xdaforums.com/showthread.php?t=1632375

----- ----- https://code.google.com/p/kindle-alt-roms-cm10-cm9-dev/downloads/detail?name=fffe-1.4.1-awidawad.zip

----- ----- SHA1:	b99620e382ea5d01cb6fa9e465ab719f63621780

----- or: http://goo.im/devs/Hashcode/otter/bootloader/ <- this one is hashcode's and I think I trust it more.

----- ----- MD5sum: 419c53b922c963082454b14b7de75a90 fff-u-boot_v1.4a.zip

----- I extracted this into sdk/platform-tools/fff-u-boot_v1.4a(by_hashcode)

2. Flash the fff binary to the bootloader partition. The binary will be in the cache directory. I'm not sure you even need the META-INF files or the padfile. I expect it would have been fine to go from sdk/platform-tools/fff-u-boot_v1.4a(by_hashcode)/cache/fff-u-boot_v1.4a.bin, however, I'm not sure how important the other files are so I unzipped it all to the sdk/platform-tools dir and used it from there. The -i 0x1949 switch is required for non-root privileged devices.

fastboot -i 0x1949 flash bootloader fff-u-boot_v1.4a.bin
sending 'bootloader' (243 KB)...
OKAY [ 0.065s]
writing 'bootloader'...
OKAY [ 0.177s]
finished. total time: 0.242s

3. Continue immediately with flashing the recovery.

##########################

##### Install a Recovery #####

##########################

1. Download TWRP. As of this writing (2013-09-20) TWRP is at 2.6.3, and we want the Otter. (Note the codename for KF 1st-gen is Otter. So I assume Otter is what we want, but I've seen people mention or reference Blaze a lot. I'm not sure what that is, but since the references were usually a year or so old and since I know Otter will be correct, I'm going with Otter.)

----- http://teamw.in/project/twrp2/79

----- MD5sum: 8b5e6f15ab88ce52022991925dcd4ac0 openrecovery-twrp-2.6.3.0-otter.img

----- I extracted this directly into sdk/platform-tools/.

2. Flash the openrecovery image to the KF's recovery partition. The -i 0x1949 switch is required for non-root privileged devices.

fastboot -i 0x1949 flash recovery openrecovery-twrp-2.6.3.0-otter.img
sending 'recovery' (6564 KB)...
OKAY [ 1.648s]
writing 'recovery'...
OKAY [ 1.416s]
finished. total time: 3.064s

3. You now need to reboot the KF. Do not do 3a, but read because in Jcase's 2.6.3 instructions, he tells you:

----- http://xdaforums.com/showthread.php?t=1568340

----- 3a. Your device will now boot into twrp recovery, and flash the firefirefire bootlaoder. When done it will prompt you to reboot. Upon reboot you will get stuck on the "yellow triangle" screen of firefire fire.

fastboot oem idme bootmode 5002
fastboot reboot

----- I have no idea what he's talking about. Those commands did not work for me. When I figured out how to restart in a manner that made more sense (see 3b.), I selected to boot into the TWRP recovery, and as far as I could tell, TWRP did not flash its own version of FFF, nor did it reboot. It simply started TWRP. I poked around in there. It did at one point tell me that it was not yet rooted and asked me if I wanted to have it do it, but I declined to follow the rest of Jcase's instructions. Point of the story: ignore 3a, and do 3b instead.

----- 3b. Reboot the KF.

fastboot -i 0x1949 reboot
rebooting...
finished. total time: 0.000s

4. This will now boot into the FFF bootloader, which will offer you a choice prior to booting into the primary OS of booting into recovery. You will want to do that for the next commands to work. You need to immediately continue to permanently root it.

############################

##### Permanently Root It #####

############################

1. Get Superuser/Su and unzip it. As of this writing (2013-09-20) the latest is Superuser 3.2 RC3. The KF uses the ARM chip architecture so we want the ARM version (see above in the Key Terms section). Note that you need to make its own directory to unzip it into because all but two of its files are the same that as those that came with FFF, and in case they are different (use diff) you don't want to replace them; if they are different, you'll have to make the call which versions you want to use. The two files you do want no matter what will be in the system/ directory.

----- http://androidsu.com/superuser/ (You want the ARM architecture for the KF.)

----- MD5sum: 6462ac14cd38ed7c539ce3e29a6b92a8 Superuser-3.2-RC3-arm-signed

----- I extracted it into sdk/platform-tools/Superuser-3.2-RC3-arm-signed(by_ChainsDD)

----- 1a. Once in recovery, mount the /system partition in read/write mode. ("adb shell remount system" might also do this, and it will change a mounted /system between r/w and ro.)

adb shell mount system

----- 1b. Copy su to the right place in /system.

adb push Superuser-3.2-RC3-arm-signed(by_ChainsDD)/system/bin/su /system/xbin/su
3447 KB/s (85096 bytes in 0.024s)

----- 1c. Change the ownership to root only (so nobody can mess with it).

adb shell chown 0.0 /system/xbin/su

----- 1d. Change the permissions to executable (so anyone can try to get su), and verify.

adb shell chmod 06755 /system/xbin/su
adb shell ls -l /system/xbin/su
-rwsr-sr-x 1 root root 85096 Feb 29 2008 /system/xbin/su

2. Disable the root checker by renaming the executable. (I suppose you could just chmod a-x it, but this is how the pros do it, so I'll stick with their method.) I'm not entirely certain what check_rooted does, but I assume it is used by Amazon and will cause headaches.

adb shell ls -l /system/bin/check_*
-rwxr-xr-x 1 root shell 54680 Aug 1 2008 /system/bin/check_prereq
-rwxr-xr-x 1 root shell 5556 Aug 1 2008 /system/bin/check_rooted
adb shell mv /system/bin/check_rooted /system/bin/check_rooted.bak
adb shell ls -l /system/bin/check_*
-rwxr-xr-x 1 root shell 54680 Aug 1 2008 /system/bin/check_prereq
-rwxr-xr-x 1 root shell 5556 Aug 1 2008 /system/bin/check_rooted.bak

3. Return to normal bootmode (4000), and reboot. (Actually I'm not sure we ever changed it since we didn't use Jcase's "oem idme bootmode 5002" command, and I'm pretty sure fbmode only changes it for 1 reboot. But doing this will not hurt anyway.)

adb shell idme bootmode 4000
<idme> write 4000 to offset 0x1000
adb reboot

4. After reboot, when you're back in Amazon's default OS, install the Superuser app. It will appear in your carousel. Play with it.

adb install system/app/Superuser.apk
7539 KB/s (1500495 bytes in 0.194s)
pkg: /data/local/tmp/Superuser.apk
Success

######################################

##### Make A Full (up to 8GB) Backup #####

######################################

This will back up all partitions and the hidden NVRAM data. If you ever have to restore from scratch, you can get fastboot to write a new partition table and then fastboot in these backups. Need >8GB local free, and adb installed and able to get a shell.

----- http://xdaforums.com/showthread.php?t=1369405

1. Make a new directory to store the dump files and cd into it.

sudo mkdir /mnt/1.2tb.pri_my300/KindleFire
sudo mkdir /mnt/1.2tb.pri_my300/KindleFire/preROMing.backup

2. Make sure that your KF is running adb as root (as above in #? of the Root It section).

adb root
adbd is already running as root

3. Then pull the blk copies from the device. This will place them on the root fs, and then I move them to the backup directory. (I'm sure you can direct them to the end destination with pull, but I didn't figure that out before I ran this.)

for F in `seq 1 12`; do adb pull /dev/block/mmcblk0p$F; done
adb shell idme ? > nvram.txt
sudo mv mmcblk* nvram.txt /mnt/1.2tb.pri_my300/KindleFire/preROMing.backup

#######################

##### Install a ROM #####

#######################

http://xdaforums.com/showthread.php?t=1638452

1. Download the one you want from the link. Hashcode, who is active on xda-developers, maintains the CryanogenMod, and he seems to be trusted to do quality work so I'll use the latest CM ROM. As of this writing (2013-09-20) the CryanogenMod-10.2 is current. Note the codename for KF 1st-gen is Otter (not Otter2, not sure what blaze is for).

----- http://xdaforums.com/showthread.php?t=2410112

----- http://goo.im/devs/loosethisskin/otter/cm-10.2

----- MD5sum: 7a5c807f410ecaeb37220bda8c7b4eee cm-10.2-20130913-0258-otter-sgt7.zip

2. Copy the ROM.zip file to the /sdcard directory on the KF, and checksum it.

adb push cm-10.2-20130913-0258-otter-sgt7.zip /sdcard
6569 KB/s (186800117 bytes in 27.769s)
adb shell md5sum /sdcard/cm-10.2-20130913-0258-otter-sgt7.zip
7a5c807f410ecaeb37220bda8c7b4eee /sdcard/cm-10.2-20130913-0258-otter-sgt7.zip
md5sum cm-10.2-20130913-0258-otter-sgt7.zip
7a5c807f410ecaeb37220bda8c7b4eee cm-10.2-20130913-0258-otter-sgt7.zip

2. Definitely check and follow the instructions on the specific ROM's info page. In this case, I believe it is the standard methodology. Since it tells us to also install Gapps, we need to download that as well. (See Install Gapps section below for more info.)

----- 2a. Download it. In my case, Hashcode has given instructions to get it the following link. You are to match up your CryanogenMod version with the appropriate Gapps version, which is made easy with the table at the top.

----- ----- http://goo.im/gapps

----- ----- MD5sum: 1f51b5cc6370c1f45dc951109b6ce6ed gapps-jb-20130813-signed.zip

----- 2b. Copy it to the KF, and checksum it.

adb push gapps-jb-20130813-signed.zip /sdcard
adb shell md5sum /sdcard/gapps-jb-20130813-signed.zip
1f51b5cc6370c1f45dc951109b6ce6ed /sdcard/gapps-jb-20130813-signed.zip

3. Wipe cache, dalvik, data and system (full wipe). Wipes typically remove the existing files in the data and cache partitions that could interfere with the operation of the new system software. A "Factory Reset" will delete any installed apps, software/network settings, etc. It will not touch the /sdcard directory that contains music, eBooks, and files of that nature. In our case, we need to do the four listed by Hashcode.

----- 3a. From the main menu of TWRP, Wipe -> Advanced Wipe -> Select Partitions to Wipe

----- 3b. Check the dalvik, data, cache, and system boxes.

----- 3c. Swipe to Wipe.

4. Install from your ROM.zip, and tell it to install Gapps while you're at it.

----- 4a. From the main menu of TWRP, "Install"

----- 4b. Navigate to the /sdcard directory on the left (should be the default the first time you use TWRP) and select the cm-10.2-20130913-0258-otter-sgt7.zip file from the list on the right.

----- 4c. Check the box "Zip file signature verification?" if you've placed .md5 files with the zips. Even though you already have, it's nice to make sure TWRP agrees with you.

----- 4d. Press "Add More Zips"

----- 4e. Select the gapps-jb-20130813-signed.zip file from the right.

----- 4f. Swipe to flash install them.

5. When it's finished and you are prompted, press "Reboot.

6. When you reboot, CM will take some time to get going the first time, just let it. Then walk through the setup process. All your setings, like the Wi-Fi password, will be gone and need to be recreated.

7. Cleanup by deleting the zips within the File Manager app.

###################################

##### Install Google Apps (Gapps) #####

###################################

You may not actually need this. It may come installed with the ROM, but you'll definitely want Gapps either way because this includes Google Marketplace where you can get all the Android apps.

1. Download it. In my case, Hashcode has given instructions to get it the following link. You are to match up your CryanogenMod version with the appropriate Gapps version, which is made easy with the table at the top.

----- http://goo.im/gapps

----- MD5sum: 1f51b5cc6370c1f45dc951109b6ce6ed gapps-jb-20130813-signed.zip

###################################

YOU'RE DONE MOTHER****ER!

Play around.

Try some other stuff: