AOSP: Build Kernel

From OnnoWiki
Jump to navigation Jump to search

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.

Memilih 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.