Compile our own Android Kernel in 5 Simple Steps

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:

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:
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    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
    chevron_right
    
    
  3. Download Required Files:
    • Clone the device source on local disk:
      filter_none

      edit
      close

      play_arrow

      link
      brightness_4
      code

      mkdir mykernel
        git clone {link to your device kernel source}
      chevron_right
      
      
    • Download a compatible GCC toolchain. In this article, AOSP’s GCC is used.
      filter_none

      edit
      close

      play_arrow

      link
      brightness_4
      code

      cd mykernel
         git clone https://android.googlesource.com/platform/
                   prebuilts/gcc/linux-x86/aarch64/
                   aarch64-linux-android-4.9
         toolchain
      chevron_right
      
      
    • 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:
      filter_none

      edit
      close

      play_arrow

      link
      brightness_4
      code

      tar vxzf linux-x86-android-9.0.0_r48-clang-4691093.tar.gz
      chevron_right
      
      
  4. Compiling The Kernel:
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    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
    chevron_right
    
    

    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:
      filter_none

      edit
      close

      play_arrow

      link
      brightness_4
      code

      fastboot flash boot mykernel.img
      chevron_right
      
      
  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.

Attention reader! Don’t stop learning now. Get hold of all the important Java and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready.





Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :
Practice Tags :