Huawei have helpfully released the kernel source for the Honor 7 on their download site. Impressively, the version posted there (3.10.86) actually matches the current release build (B330). However, the download itself is only part of the puzzle - it's important to then know how to compile it and use it. Hence this guide.
Some points to note first of all...
- This guide refers to building on Linux. You can probably build on OSX or whatever too but seriously, it's less pain in the long run to spin up an Ubuntu VM.
- There is a readme file in the kernel download with build instructions. Don't follow it... it won't work. You will end up with a built kernel, but it won't flash to your device due to the size of the file created by the 4.9 toolchain. Strange I know.
- In the download linked above, as well as the kernel, there are some other bits and pieces (some of which are quite bizarre). I've mirrored the kernel to Bitbucket, so you don't need to grab the whole download.
- Open a terminal window on your Linux machine / in your Linux VM. No GUIs here. Change to the directory where you want the kernel / toolchain to live.
- First of all, we're going to clone the toolchain from AOSP.
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8
- Next we're going to clone the kernel source itself from my git repo on bitbucket.
git clone https://bitbucket.org/paulobrien/android_kernel_honor7.git
- We need to add the toolchain location to the path.
- We need to specify that we are cross compiling for arm64.
- Let's create a directory for our output to go in to.
- We've got the kernel downloaded, so let's change to that directory so we're ready to go.
- A bit of cleaning up before we get started...
make ARCH=arm64 O=../out mrproper
- Specify that we're building for PLK (Plank = H7)...
make ARCH=arm64 O=../out hw_PLK_defconfig
- And build it!
make ARCH=arm64 O=../out -j8
Here's how you do it...
- Change out of the kernel directory back to its parent.
- Download tools for manipulating the boot image.
git clone https://github.com/xiaolu/mkbootimg_tools.git
- Download the stock boot image (actually we're using the root ready version for convenience).
wget -O boot.img http://nigella.modaco.com/files/boot.policypatched.b330.img
- Extract the boot image.
mkbootimg_tools/mkboot boot.img boot.extracted
- Copy the new kernel into the extracted boot folder.
cp out/arch/arm64/boot/Image boot.extracted/kernel
- Build a new boot image.
mkbootimg_tools/mkboot boot.extracted boot.newkernel.img