Open In App

Compile our own Android Kernel in 5 Simple Steps

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

The Android kernel helps the applications to communicate with the hardware components of the device.

For example:

  1. Most of us are familiar with game mode. What it does is instructs the processor and the graphics processing unit to run at their maximum frequencies.
  2. Another example is power saver mode. It instructs the processor and the graphics processing unit to run at their minimum frequencies.

Need to compile our own kernel: Compiling our own kernel might prove very useful as:

  • The user experience can be further optimized as per the need using our own kernel
  • It can also help in Open Source Development.

Steps to compile our own kernel:

  1. Prerequisites: Below are the prerequisites required to compile our own Android Kernel:

    Note: This article is for a device with a 64bit Snapdragon SOC

  2. Install Dependencies Open the terminal and paste the following:




    sudo apt-get install
         git ccache automake flex lzop bison \
         gperf build-essential zip curl
             zlib1g-dev zlib1g-dev:i386 \
         g++-multilib python-networkx 
             libxml2-utils bzip2 libbz2-dev \
         libbz2-1.0 libghc-bzlib-dev 
             squashfs-tools pngcrush \
         schedtool dpkg-dev liblz4-tool 
             make optipng maven libssl-dev \
         pwgen libswitch-perl policycoreutils 
             minicom libxml-sax-base-perl \
         libxml-simple-perl bc
             libc6-dev-i386 lib32ncurses5-dev \
         x11proto-core-dev libx11-dev 
             lib32z-dev libgl1-mesa-dev xsltproc unzip

    
    

  3. Download Required Files:
    • Clone the device source on local disk:




      mkdir mykernel
        git clone {link to your device kernel source}

      
      

    • Download a compatible GCC toolchain. In this article, AOSP’s GCC is used.




      cd mykernel
         git clone https://android.googlesource.com/platform/
                   prebuilts/gcc/linux-x86/aarch64/
                   aarch64-linux-android-4.9
         toolchain

      
      

    • Download a compatible CLANG toolchain. In this article, AOSP’s CLANG is used.
    • Move the downloaded file in the mykernel folder and then extract using the following command:




      tar vxzf linux-x86-android-9.0.0_r48-clang-4691093.tar.gz

      
      

  4. Compiling The Kernel:




    cd mykernel
    rm -rf out
    mkdir out
    export ARCH=arm64
    export SUBARCH=arm64
    export DTC_EXT=dtc
      
    make O=out ARCH=arm64 {device defconfig}
      
    PATH="${PWD}/bin:${PWD}/toolchain/bin:${PATH}" \
    make -j$(nproc --all) O=out \
                          ARCH=arm64 \
                          CC=clang \
                          CLANG_TRIPLE=aarch64-linux-gnu- \
                          CROSS_COMPILE=aarch64-linux-android-
                          | tee kernel.log

    
    

    Here, replace the {device defconfig} with the name of your config file. You can find it in /arch/arm64/configs folder.

  5. Booting The Compiled Kernel:
    • Browse to /out/arch/arm64/boot and find the Image-dtb file (compiled zImage) and copy the file.
    • Download Android Image Kitchen and decompile your stock boot image. Once you decompile it you’ll find the stock zImage in the decompiled folder. Replace it with the one you copied earlier and recompile the boot image.
    • Flash via fastboot using the following command:




      fastboot flash boot mykernel.img

      
      

  6. Dealing with the encountered errors: A kernel.log file will be generated in mykernel folder. Find the line which says error and search for the solution. Also please don’t forget to attach the log file when posting in forums for help.

This will be the basic kernel, and more features can be added once it boots successfully.



Last Updated : 23 Feb, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads