| page.title=Building Kernels |
| @jd:body |
| |
| <!-- |
| Copyright 2015 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <div id="qv-wrapper"> |
| <div id="qv"> |
| <h2>In this document</h2> |
| <ol id="auto-toc"> |
| </ol> |
| </div> |
| </div> |
| |
| <p>This page details how to build only the kernel. The following instructions |
| assume you have not downloaded all of AOSP; if you have already done so, you can |
| skip the <code>git clone</code> steps except the step that downloads the kernel |
| sources.</p> |
| |
| <p>All examples in this section use the |
| <a href="{@docRoot}source/devices.html#hikey-boards">hikey</a> kernel.</p> |
| |
| <h2 id="figuring-out-which-kernel-to-build">Selecting a kernel</h2> |
| <p>This table lists the name and locations of the kernel sources and binaries: |
| <table> |
| <tr> |
| <th>Device</th> |
| <th>Binary location</th> |
| <th>Source location</th> |
| <th>Build configuration</th> |
| </tr> |
| <tr> |
| <td>marlin</td> |
| <td>device/google/marlin-kernel</td> |
| <td>kernel/msm</td> |
| <td>marlin_defconfig</td> |
| </tr> |
| <tr> |
| <td>sailfish</td> |
| <td>device/google/marlin-kernel</td> |
| <td>kernel/msm</td> |
| <td>marlin_defconfig</td> |
| </tr> |
| <tr> |
| <td>hikey</td> |
| <td>device/linaro/hikey-kernel</td> |
| <td>kernel/hikey-linaro</td> |
| <td>hikey_defconfig</td> |
| </tr> |
| <tr> |
| <td>angler</td> |
| <td>device/huawei/angler-kernel</td> |
| <td>kernel/msm</td> |
| <td>angler_defconfig</td> |
| </tr> |
| <tr> |
| <td>bullhead</td> |
| <td>device/lge/bullhead-kernel</td> |
| <td>kernel/msm</td> |
| <td>bullhead_defconfig</td> |
| </tr> |
| <tr> |
| <td>shamu</td> |
| <td>device/moto/shamu-kernel</td> |
| <td>kernel/msm</td> |
| <td>shamu_defconfig</td> |
| </tr> |
| <tr> |
| <td>fugu</td> |
| <td>device/asus/fugu-kernel</td> |
| <td>kernel/x86_64</td> |
| <td>fugu_defconfig</td> |
| </tr> |
| <tr> |
| <td>volantis</td> |
| <td>device/htc/flounder-kernel</td> |
| <td>kernel/tegra</td> |
| <td>flounder_defconfig</td> |
| </tr> |
| <tr> |
| <td>hammerhead</td> |
| <td>device/lge/hammerhead-kernel</td> |
| <td>kernel/msm</td> |
| <td>hammerhead_defconfig</td> |
| </tr> |
| <tr> |
| <td>flo</td> |
| <td>device/asus/flo-kernel/kernel</td> |
| <td>kernel/msm</td> |
| <td>flo_defconfig</td> |
| </tr> |
| <tr> |
| <td>deb</td> |
| <td>device/asus/flo-kernel/kernel</td> |
| <td>kernel/msm</td> |
| <td>flo_defconfig</td> |
| </tr> |
| <tr> |
| <td>manta</td> |
| <td>device/samsung/manta/kernel</td> |
| <td>kernel/exynos</td> |
| <td>manta_defconfig</td> |
| </tr> |
| <tr> |
| <td>mako</td> |
| <td>device/lge/mako-kernel/kernel</td> |
| <td>kernel/msm</td> |
| <td>mako_defconfig</td> |
| </tr> |
| <tr> |
| <td>grouper</td> |
| <td>device/asus/grouper/kernel</td> |
| <td>kernel/tegra</td> |
| <td>tegra3_android_defconfig</td> |
| </tr> |
| <tr> |
| <td>tilapia</td> |
| <td>device/asus/grouper/kernel</td> |
| <td>kernel/tegra</td> |
| <td>tegra3_android_defconfig</td> |
| </tr> |
| <tr> |
| <td>maguro</td> |
| <td>device/samsung/tuna/kernel</td> |
| <td>kernel/omap</td> |
| <td>tuna_defconfig</td> |
| </tr> |
| <tr> |
| <td>toro</td> |
| <td>device/samsung/tuna/kernel</td> |
| <td>kernel/omap</td> |
| <td>tuna_defconfig</td> |
| </tr> |
| <tr> |
| <td>panda</td> |
| <td>device/ti/panda/kernel</td> |
| <td>kernel/omap</td> |
| <td>panda_defconfig</td> |
| </tr> |
| <tr> |
| <td>stingray</td> |
| <td>device/moto/wingray/kernel</td> |
| <td>kernel/tegra</td> |
| <td>stingray_defconfig</td> |
| </tr> |
| <tr> |
| <td>wingray</td> |
| <td>device/moto/wingray/kernel </td> |
| <td>kernel/tegra</td> |
| <td>stingray_defconfig</td> |
| </tr> |
| <tr> |
| <td>crespo</td> |
| <td>device/samsung/crespo/kernel</td> |
| <td>kernel/samsung</td> |
| <td>herring_defconfig</td> |
| </tr> |
| <tr> |
| <td>crespo4g</td> |
| <td>device/samsung/crespo/kernel</td> |
| <td>kernel/samsung</td> |
| <td>herring_defconfig</td> |
| </tr> |
| </table> |
| |
| <p>After determining the device project you want to work with, view the git log |
| for the kernel binary. Device projects use the form |
| <code>device/<vendor>/<name></code>.</p> |
| |
| <pre><code>$ git clone https://android.googlesource.com/kernel/hikey-linaro |
| $ cd hikey-linaro |
| $ git log --max-count=1 kernel |
| </code></pre> |
| |
| <p>The commit message for the kernel binary contains a partial git log of the |
| kernel sources used to build the binary. The first entry in the log is the most |
| recent (the one used to build the kernel). Make a note of the commit message |
| as you will need it in a later step.</p> |
| |
| <h2 id="id-version">Identifying kernel version</h2> |
| |
| <p>To determine the kernel version used in a system image, run the following |
| command against the kernel file:</p> |
| |
| <pre><code>$ dd if=kernel bs=1 skip=$(LC_ALL=C grep -a -b -o $'\x1f\x8b\x08\x00\x00\x00\x00\x00' kernel | cut -d ':' -f 1) | zgrep -a 'Linux version' |
| </code></pre> |
| |
| <p>For Nexus 5 (hammerhead), the command is:</p> |
| <pre><code>$ dd if=zImage-dtb bs=1 skip=$(LC_ALL=C od -Ad -x -w2 zImage-dtb | grep 8b1f | cut -d ' ' -f1 | head -1) | zgrep -a 'Linux version' |
| </code></pre> |
| |
| |
| <h2 id="downloading-sources">Downloading sources</h2> |
| <p>Download the source for the kernel you want to build using the appropriate |
| <code>git clone</code> command:</p> |
| |
| <pre><code>$ git clone https://android.googlesource.com/kernel/common.git |
| $ git clone https://android.googlesource.com/kernel/hikey-linaro |
| $ git clone https://android.googlesource.com/kernel/x86_64.git |
| $ git clone https://android.googlesource.com/kernel/exynos.git |
| $ git clone https://android.googlesource.com/kernel/goldfish.git |
| $ git clone https://android.googlesource.com/kernel/msm.git |
| $ git clone https://android.googlesource.com/kernel/omap.git |
| $ git clone https://android.googlesource.com/kernel/samsung.git |
| $ git clone https://android.googlesource.com/kernel/tegra.git |
| </code></pre> |
| |
| <ul> |
| <li>The <code>goldfish</code> project contains the kernel sources for the |
| emulated platforms.</li> |
| <li>The <code>msm</code> project has the sources for ADP1, ADP2, Nexus One, |
| Nexus 4, Nexus 5, Nexus 6, Nexus 5X, Nexus 6P, Nexus 7 (2013), Pixel, |
| and Pixel XL, and can be used |
| as a starting point for work on Qualcomm MSM chipsets.</li> |
| <li>The <code>omap</code> project is used for PandaBoard and Galaxy Nexus, |
| and can be used as a starting point for work on TI OMAP chipsets.</li> |
| <li>The <code>samsung</code> project is used for Nexus S, and can be used as a |
| starting point for work on Samsung Hummingbird chipsets.</li> |
| <li>The <code>tegra</code> project is for Xoom, Nexus 7 (2012), Nexus 9, |
| and can be used as a starting point for work on NVIDIA Tegra chipsets.</li> |
| <li>The <code>exynos</code> project has the kernel sources for Nexus 10, |
| and can be used as a starting point for work on Samsung Exynos chipsets.</li> |
| <li>The <code>x86_64</code> project has the kernel sources for Nexus Player, |
| and can be used as a starting point for work on Intel x86_64 chipsets.</li> |
| <li>The <code>hikey-linaro</code> project is used for HiKey reference boards, |
| and can be used as a starting point for work on HiSilicon 620 chipsets.</li> |
| </ul> |
| |
| <h2 id="downloading-a-prebuilt-gcc">Downloading a prebuilt gcc</h2> |
| <p>Ensure the prebuilt toolchain is in your path:</p> |
| <pre>$ export PATH=$(pwd)/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH</pre> |
| <p>or</p> |
| <pre>$ export PATH=$(pwd)/prebuilts/gcc/darwin-x86/arm/arm-eabi-4.6/bin:$PATH</pre> |
| |
| <p>On a Linux host, if you don't have an Android source tree, you can download |
| the prebuilt toolchain from: |
| <pre>$ git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6</pre> |
| |
| <h2 id="building">Building the kernel</h2> |
| <p>When you know the last commit message for a kernel and have successfully |
| downloaded the kernel source and prebuilt gcc, you are ready to build the |
| kernel. The following build commands use the hikey kernel:</p> |
| <pre><code>$ export ARCH=arm64 |
| $ export CROSS_COMPILE=aarch64-linux-android- |
| $ cd hikey-linaro |
| $ git checkout -b android-hikey-linaro-4.1 origin/android-hikey-linaro-4.1 |
| $ make hikey_defconfig |
| $ make |
| </code></pre> |
| |
| <p>To build a different kernel, simply replace <code>hikey-linaro</code> with |
| the name of the kernel you want to build.</p> |
| |
| <p>The image outputs to the <code>arch/arm64/boot/Image</code> directory; the |
| kernel binary outputs to the |
| <code>arch/arm64/boot/dts/hisilicon/hi6220-hikey.dtb</code> fle. Copy the |
| <code>Image</code> directory and the <code>hi6220-hikey.dtb</code> file to the |
| <code>hikey-kernel</code> directory.</p> |
| |
| <p>Alternatively, you can include the <code>TARGET_PREBUILT_KERNEL</code> |
| variable while using <code>make bootimage</code> (or any other <code>make</code> |
| command line that builds a boot image). This variable is supported by all |
| devices as it is set up via <code>device/common/populate-new-device.sh</code>. |
| For example:</p> |
| |
| <pre><code>$ export TARGET_PREBUILT_KERNEL=$your_kernel_path/arch/arm/boot/zImage-dtb |
| </code></pre> |
| |
| <p class="note"><strong>Note:</strong> Kernel names differ by device. To locate |
| the correct filename for your kernel, refer to |
| <code>device/<vendor>/<name></code> in the kernel source.</p> |