HOW TO REBUILT THE ANDROID EMULATOR-SPECIFIC KERNEL:
====================================================

I. Helper script:
-----------------

We now provide a helper script to rebuild the kernel,
it is under $AOSP/prebuilts/qemu-kernel/build-kernel.sh.

Make sure to use a checkout of aosp/master, not one of the aosp/studio-XXX
branches, the latter do not contain the prebuilt target toolchain binaries
required to rebuild the kernel.

You need the sources in android.googlesource.com/kernel/goldfish.git,
in branch origin/android-goldfish-<version>, where <version> is the
kernel version that applies to your system image.

Roughly speaking:

  2.6.27     -> Anything before Gingerbread. (<= Android 2.2)
  2.6.29     -> For Gingerbread (2.3) until JellyBean MR2 (4.2.x)
  3.4        -> For KitKat (4.4.x) and Lollipop 32 bit (5.0/5.1)
  3.10       -> For Lollipop 64 bit and Marshmallow (6.0)
  3.18       -> Currently experimental.

Besides, you need to select the right 'config', which corresponds to the
virtual board you want to support. There are currently two to consider:

- The legacy virtual board is called 'goldfish', and corresponds to
  the virtual hardware supported by the legacy QEMU1 code base.

- The newest virtual board is called 'ranchu', and corresponds to the
  virtual hardware supported by the QEMU2 code base.

The main difference between them is that 'goldfish' supports obsolete
goldfish-specific NAND and eMMC virtual devices that are replaced by
virtio-block in QEMU2 (for much better performance and reliability).
For more details, see docs/GOLDFISH-VIRTUAL-HARDWARE.TXT.

You specify which architecture to build for with the --arch=<name>
option, where <name> is one of the emulator's CPU architecture name
(e.g. 'arm', 'mips', 'x86', 'x86_64', 'arm64' and 'mips64').

Each architecture has a default configuration (typically 'goldfish') that
you can override with the --config=<name> option, where <name> is the name
of a sub-directory under $KERNEL/arch/*/configs/

The default output directory will be /tmp/kernel-qemu/<arch>-<kernel_version>/
but this can be overriden with the --out=<dir> option.

By default the script tries to find an appropriate toolchain from
$AOSP/prebuilts/gcc/, but you can specify a different one using the
--cross=<prefix> option.

See build-kernel.sh --help for more options and details.

Here's a table of options to rebuild popular kernel configuration:

  Goldfish:
     32-bit ARMv7-A     --arch=arm
     32-bit i386        --arch=x86
     32-bit MIPS        --arch=mips
     64-bit x86_64      --arch=x86_64

  Ranchu:
     32-bit ARMv7-A     --arch=arm --config=ranchu
     32-bit i386        --arch=x86 --config=i386_ranchu
     32-bit MIPS        --arch=mips --config=ranchu
     64-bit ARMv8       --arch=arm64
     64-bit x86_64      --arch=x86_64 --config=x86_64_ranchu
     64-bit MIPS        --arch=mip64 --config=ranchu

The script will generate the following files in its output directory:

    kernel-qemu            The kernel image to be used with QEMU, use
                           the emulator's '-kernel <file>' option to use it,
                           where <file> is the path to this file.

    vmlinux-qemu           The symbol file used to debug the kernel with
                           GDB (see below).

    LINUX_KERNEL_COPYING   The kernel's license file, must be provided with
                           each copy of the binary.

    README                 Small README file explaining how this was built.

II. Debugging the kernel with QEMU:
----------------------------------

In the case where you need to debug the kernel (e.g. to inspect kernel panics)
you can do that by following this procedure:

  1) Rebuild the kernel from sources (see previous section).

  2) Start the emulator with special options to use the new kernel image,
     start kernel debugging, and not start the vCPU to wait to GDB:

         emulator -kernel /path/to/kernel-qemu \
                  <other-options> \
                  -qemu -s -S

  3) In another terminal, start a GDB client that will attach to the emulator
     process, after reading the kernel symbol file:

         $AOSP/prebuilts/gdb/linux-x86/bin/gdb
         file /path/to/vmlinux-qemu
         target remote :1234
         b panic
         c

NOTE: The version of gdb under $AOSP/prebuilts/ supports all Android target
      architectures. Your 'host' gdb probably only supports x86/x86_64.

NOTE: You can place as many breakpoints as you want with the 'b' command before
      starting execution with the 'c' command.

Once you reach the breakpoint, use 'bt' to print a stack trace. See the GDB
manual for more information.


III. Rebuilding from scratch:
----------------------------

If you don't or can't use the script, here are manual instructions:

You need to have an appropriate cross-toolchain in your path
(e.g. 'arm-eabi-gcc --version' must work)

then (for version 2.6.29):

git clone https://android.googlesource.com/kernel/goldfish.git kernel-goldfish
cd kernel-goldfish
git checkout origin/android-goldfish-2.6.29

export CROSS_COMPILE=arm-eabi-
export ARCH=arm
export SUBARCH=arm
make goldfish_defconfig    # configure the kernel
make -j2                   # build it

=> this generates a file named arch/arm/boot/zImage

NOTE: Branch android-goldfish-2.6.27 is obsolete now. Do not use it.

Now, you can use it with:

  emulator -kernel path/to/your/new/zImage <other-options>


You can build an ARMv7-compatible kernel image by using goldfish_armv7_defconfig
in the above instructions (instead of goldfish_defconfig). Note that you will
need to enable ARMv7 emulation by using the -cpu cortex-a8 option, as in:

  emulator -kernel path/to/your/new/zImage <other-options> -qemu -cpu cortex-a8

As a special convenience, if the name of your kernel image ends in -armv7, then
the emulator binary will automatically enable ARMv7 emulation for you, so doing
the following should be equivalent

  emulator -kernel path/to/your/kernel-armv7 <other-options>

Voila !
