How to Build Linux Kernel with Android
This guide shows how to build Linux on a Android Device and was made for people that doesn't have s Computer.
- 4GB of free space (2GB if delete the temp files)
- Android 5.0
You need to install Termux from Google Play Store. Now we will download the Kernel so we need WGET:
apt-get update &&
apt-get --assume-yes install wget &&
cd ~ &&
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.6.tar.xzThe next step is decompress that tarball with UNXZ and TAR (integrated with Termux):
unzx -d linux-5.4.6.tar.xz &&
tar -xf linux-5.4.6.tar(Optional) Delete the Linux tarball:
rm linux-5.4.6.tarNow we have the Linux Source on our Android, lets compile!
In Android, compile is a terror for Linux Kernel. First we need to create a config file.
If you had an Linux PC you could simply do this:
cp /boot/config-$(uname -r) linux-5.4.6/.configBut you dont have, so we need to do this:
If you have a Rooted Potato Phone you can simply:
cp /proc/config.gz ~ &&
gzip -d config.gz &&
mv config linux-5.4.6/.config &&
cd linux-5.46If else, first you need to download it from our repository:
wget https://eduapps-cdg.github.io/kernel-configs/raw/master/android/$(getprop | grep -i ro.product.model | sed "s/\[ro.product.model\]: //" | sed "s/\[//" | sed "s/\]//").gz &&
mv $(getprop | grep -i ro.product.model | sed "s/\[ro.product.model\]: //" | sed "s/\[//" | sed "s/\]//").gz config.gz &&
gzip -d config.gz &&
mv config linux-5.4.6/.config &&
cd linux-5.46If the file was not found, you must generate it. It has only one command, but this command is the worst! It's the best choice if you are developing a new device. Complete the first command of Building and type:
make menuconfigOnce solved the dilemma, you will not need to do it again. the next step is install the compilers:
apt-get install build-essential ncurses bison flex openssl libelf clangThis command will setup to build the Kernel with full power, if you have a single core device, it doesn't help so much but works:
make -j $(nproc)
make modules_install
make install
And finally, the Last Step is: Enjoy the building time and drink a coffee!
I modified the above guide to fit my device. Hopefully this helps someone, such as @cursedastronaut
January 2025 update: I was able to compile a LineageOS kernel for android on Windows using Ubuntu WSL by following these steps:
Step 1: https://xdaforums.com/t/my-unsuccessful-journey-in-compiling-an-android-kernel-for-the-moto-g-power-2021.4714492/post-89917726
Step 2: https://xdaforums.com/t/my-unsuccessful-journey-in-compiling-an-android-kernel-for-the-moto-g-power-2021.4714492/post-89914796
How to Build a Linux Kernel on Android
I am not responsible for anything that happens. Bricked devices, etc. Use at your own risk.
edit: Before you begin, please backup your stock rom using a tool like Motorola Software Fix or https://mirrors.lolinet.com/
Install F-Droid
Install Termux through F-Droid
January 2025 update: I suggest using Ubuntu chroot instead of Alpine chroot.
Termux:
acquire wakelock through the notification, and then:
Enter new password:
Retype new password:
Within the file, find
#Port 8022uncomment it and put any port you want.
Within the file, find
#ListenAddress 0.0.0.0uncomment it
ctrl o to write file
ctrl x to exit nano
My ip is 192.168.1.166
Windows: Download putty and ssh into phone via internal ip
example: 192.168.1.166 port 8022
Putty:
$ pkg install screenedit the 2nd line so that it says ./bin/sh instead of /bin/sh
$ nano start.sh$ nano continue.shalpine chroot:
last build for linux kernel 5.x according to: https://en.wikipedia.org/wiki/Linux_kernel_version_history
make config options can be found here: https://docs.kernel.org/kbuild/kconfig.html
options are such as: make defconfig, make allmodconfig, make allyesconfig, etc
I found borneo-defaultconfig for my phone in kernel-msm-MMI-RZBS31.Q2-143-27-13\arch\arm64\configs\vendor\ext_config\borneo-default.config and was able to cp it to borneo_defconfig in necessary folders. https://github.com/MotorolaMobilityLLC/kernel-msm/releases/tag/MMI-RZBS31.Q2-143-27-13
Similar config files options exist for other phones in kernel repositories for those phones.
use arrow keys, space to highlight, and enter to confirm
$ exit# to return to termux outside of alpine$ nano build.shdo not replace image_name with an image name, instead leave it as is.
save and close nano with:
ctrl o
ctrl x
ctrl a d to close screen and let it run in the background
screen -xS kernelMaketo get back into the kernel making script
DO NOT USE KERNEL FLASHER APP TO FLASH YOUR KERNEL OR YOU MIGHT BRICK YOUR DEVICE.
ONLY USE IT FOR KERNEL BACKUPS
$ cp Image.gz ~/workingdirOpen Ex Kernel Manager App on your android phone
Go to tools -> Kernel backup
Backup your active boot img to your Download folder
Name it flashedboot.img or something
Go back to putty or termux:
This guide helped me find my ramdisk offsets and such:
https://xdaforums.com/t/tutorial-kernel-post-compilation-guide-how-to-turn-kernel-into-img.3604083/
When using Android Image Kitchen, I found it easier to use on windows than on linux. And transfer files with localsend.
$ cp boot-new.img ~/storage/shared/DownloadMove the file boot-new.img from your Android smartphone to your Windows desktop.
Reboot your phone into fastboot mode (device specific, google for instructions)
Install adb tools on your windows desktop and add C;/tools/adb to your windows system environment variables path.
cmd.exe
I had to use:
Your boot_a and boot_b partition names might vary and which img to use for which one might vary.
To unbrick:
Troubleshooting:
module.order error:
submake error:
gimple build error:
bcmp or memcmp error:
no operating system found:
verify kernel version:
$ uname -mrs