Wednesday, January 1, 2014

Cara compile kernel Android (draf, akan dikemaskini dari masa ke semasa)

Beberapa teman meminta saya mengajar cara untuk compile kernel Android. Di sini saya perturunkan beberapa jutsu yang saya kutip dari laman-laman yang berlainan, disebabkan beberapa isu yang unik pada laman sesawang masing-masing.

Secara ringkas, ilmu pengaturcaraan tidak diperlukan sama sekali untuk compile kernel Android. Tetapi, ia sangat membantu jika anda menghadapi masalah ketika proses compilation.

Berikut beberapa kemahiran yang perlu anda tahu:

1- Cara guna git.
2- Cara kernel Android berfungsi
3- Cara guna Linux menggunakan command line.

Disebabkan kernel Android berasal dari Linux, dengan beberapa keunikan seperti Bionic libraries, maka sekiranya anda pernah compile kernel Linux, maka caranya tidak jauh berbeza dengan kernel Android.

Cuma, disebabkan anda kena compile kernel Android ni dari komputer desktop/laptop anda, anda perlu melakukan proses "cross compiling" kerana ia melibatkan senibina pemprosesan yang berlainan, yakni dari hos x86/x_64 kepada ARM.

Untuk compilation kernel Android, penggunaan sistem operasi Linux dari distro Ubuntu 64 bit sahaja digalakkan. 32bit distro, mengikut pembacaan saya tidak boleh digunakan.

Proses muat turun kod sumber Android (source code)
Ada beberapa kod sumber yang boleh anda guna untuk proses kompilasi.. tetapi yang paling asasi ialah kod sumber dari git Android.

Untuk tutorial ini saya menggunakan contoh LG Nexus 4 (nama kod "mako")

Gunakan git;

git clone https://android.googlesource.com/kernel/msm.git

Satu direktori bernama "msm" akan dibentuk. Kalau anda mahu  gunakan nama sendiri untuk direktori/folder itu, gunakan

git clone https://android.googlesource.com/kernel/msm.git  nama-yg-anda-nak

Toolchain
Kemudian, anda perlukan toolchain (compiler silang platform) yang digunakan untuk compile kod sumber yang anda muat turun sebentar tadi ke di atas Intel x64 (64 bit) kepada ARM

Gunakan git lagi;
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7
Di sini anda perlu gunakan command "export" untuk mengemaskini kedudukan PATH yang anda ingin;

cd msm
export ARCH=arm
export SUBARCH=arm
najmi@vostro:~$ pwd
/home/najmi/msm
najmi@vostro:~$ export CROSS_COMPILE=$PWD/arm-linux-androideabi-4.7/bin/arm-linux-androideabi-
najmi@vostro:~$ echo $CROSS_COMPILE
/home/najmi/arm-linux-androideabi-4.7/bin/arm-linux-androideabi-
Kemudian dalam direktori "msm" tadi; laksanakan arahan ini, sekiranya Nexus 4, defconfig nya adalah mako, sekiranya Nexus 5, "hammerhead":

make mako_defconfig
Kemudian, berasaskan "core" CPU host komputer anda, gunakan arahan "make" . Nilai "-j" disertakan dengan jumlah "core" yang anda ada.

make -j4
 Kernel: arch/arm/boot/Image is ready
  AS      arch/arm/boot/compressed/head.o
  CC      arch/arm/boot/compressed/misc.o
  CC      arch/arm/boot/compressed/decompress.o
  GZIP    arch/arm/boot/compressed/piggy.gzip
  CC      arch/arm/boot/compressed/string.o
  SHIPPED arch/arm/boot/compressed/lib1funcs.S
  SHIPPED arch/arm/boot/compressed/ashldi3.S
  AS      arch/arm/boot/compressed/lib1funcs.o
  AS      arch/arm/boot/compressed/ashldi3.o
  AS      arch/arm/boot/compressed/piggy.gzip.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
Sekiranya proses compilation tidak mengalami masalah, anda akan dapat satu file yang diperlukan, iaitu zImage. 

2 comments:

  1. Tuan, nak tanye..... ini utk compile base on stock fw mako ke? or boleh gune utk based on aosp,cm?

    ReplyDelete
  2. ini utk AOSP.
    kalo cyanogen lain sikit je.

    instead of
    "make mako_defconfig"

    guna

    "make cyanogen_mako_defconfig

    ReplyDelete