OS: AOSP - Build Kernel
Build Kernel
Halaman ini merinci bagaimana mem-build hanya kernel. Petunjuk berikut berasumsi bahwa kita belum download semua AOSP; jika kita sudah melakukannya, kita dapat melewati langkah-langkah git clone kecuali langkah yang men-download kernel source.
Sebagian contoh di bagian ini menggunakan hikey kernel sebagai contoh.
Selecting a kernel
Tabel daftar nama dan lokasi dari kernel source dan binary,
Device Lokasi Binary Lokasi Source Konfigurasi Build hikey device/linaro/hikey-kernel kernel/hikey-linaro hikey_defconfig angler device/huawei/angler-kernel kernel/msm angler_defconfig bullhead device/lge/bullhead-kernel kernel/msm bullhead_defconfig shamu device/moto/shamu-kernel kernel/msm shamu_defconfig fugu device/asus/fugu-kernel kernel/x86_64 fugu_defconfig volantis device/htc/flounder-kernel kernel/tegra flounder_defconfig hammerhead device/lge/hammerhead-kernel kernel/msm hammerhead_defconfig flo device/asus/flo-kernel/kernel kernel/msm flo_defconfig deb device/asus/flo-kernel/kernel kernel/msm flo_defconfig manta device/samsung/manta/kernel kernel/exynos manta_defconfig mako device/lge/mako-kernel/kernel kernel/msm mako_defconfig grouper device/asus/grouper/kernel kernel/tegra tegra3_android_defconfig tilapia device/asus/grouper/kernel kernel/tegra tegra3_android_defconfig maguro device/samsung/tuna/kernel kernel/omap tuna_defconfig toro device/samsung/tuna/kernel kernel/omap tuna_defconfig panda device/ti/panda/kernel kernel/omap panda_defconfig stingray device/moto/wingray/kernel kernel/tegra stingray_defconfig wingray device/moto/wingray/kernel kernel/tegra stingray_defconfig crespo device/samsung/crespo/kernel kernel/samsung herring_defconfig crespo4g device/samsung/crespo/kernel kernel/samsung herring_defconfig
Setelah menentukan device project yang akan kita kerjakan, lihat git log untuk kernel binary. Device projects menggunakan format device/<vendor>/<name>.
$ git clone https://android.googlesource.com/kernel/hikey-linaro $ cd hikey-linaro $ git log --max-count=1 kernel
Commit message untuk kernel binary berisi parsial git log dari kernel yang digunakan untuk mem-build binary. Entri pertama dalam log adalah terbaru (yang digunakan untuk mem-build kernel). Buat catatan commit message karena kita akan membutuhkannya pada langkah berikutnya.
Mengidentifikasi versi kernel
Untuk mengetahui versi kernel yang digunakan dalam image system, jalankan perintah berikut pada file kernel,
$ 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'
Untuk Nexus 5 (hammerhead), perintah tersebut adalah,
$ 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'
Downloading source
Download source untuk kernel yang kita ingin build menggunakan perintah git clone yang benar:
$ 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
- goldfish project berisi kernel source untuk emulate platform.
- msm project berisi source untuk ADP1, ADP2, Nexus One, Nexus 4, Nexus 5, Nexus 6, Nexus 5X, Nexus 6P, Nexus 7 (2013), dan dapat digunakan sebagai pijakan awal untuk bekerja pada Qualcomm MSM chipset.
- omap project digunakan untuk PandaBoard dan Galaxy Nexus, dan dapat digunakan untuk pijakan awal untuk bekerja dengan TI OMAP chipset.
- samsung project digunakan untuk Nexus S, dan dapat digunakan untuk pijakan awal untuk bekerja dengan Samsung Hummingbird chipset.
- tegra project digunakan untuk Xoom, Nexus 7 (2012), Nexus 9, dan dapat digunakan untuk pijakan awal untuk bekerja dengan NVIDIA Tegra chipset.
- exynos project mempunyai kernel source untuk Nexus 10, dan dapat digunakan untuk pijakan awal untuk bekerja dengan Samsung Exynos chipset.
- x86_64 project mempunyai kernel source untuk Nexus Player, dan dapat digunakan untuk pijakan awal untuk bekerja dengan Intel x86_64 chipsets.
- hikey-linaro project digunakan untuk HiKey reference board, dan dapat digunakan untuk pijakan awal untuk bekerja dengan HiSilicon 620 chipset.
Downloading a prebuilt gcc
Pastikan prebuilt toolchain ada dalam path:
$ export PATH=$(pwd)/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH
Di mesin Linux, jika kita tidak memiliki Android source tree, kita dapat men-download prebuilt toolchain dari:
$ git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6
Build kernel
Jika kita tahu commit message terakhir untuk kernel dan berhasil download kernel source maupun prebuilt gcc, pada dasarnya kita siap untuk build kernel. Perintah build berikut menggunakan hikey kernel:
$ 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
Untuk build kernel yang berbeda, cukup mengganti kata hikey-linaro dengan nama kernel yang ingin kita build.
Image output ke directory arch/arm64/boot/Image ; kernel binary output ke file arch/arm64/boot/dts/hisilicon/hi6220-hikey.dtb . Copy Image directory dan file hi6220-hikey.dtb ke hikey-kernel directory.
Alternatif lain, kita dapat memasukan variabel TARGET_PREBUILT_KERNEL saat menggunakan make bootimage (atau make command lainnya yang akan build boot image). Variable ini di dukung oleh semua device karena di setup melalui device/common/populate-new-device.sh. Contoh:
$ export TARGET_PREBUILT_KERNEL=$your_kernel_path/arch/arm/boot/zImage-dtb
Catatan: Nama kernel berbeda untuk setiap device. Untuk mencari tahu lokasi filename yang benar untuk kernel kita, coba lihat di device/<vendor>/<name> di kernel source.