Guest PaulOBrien Posted April 22, 2016 Report Posted April 22, 2016 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. Got that? OK, so here's a step by step on how to build the kernel! I strongly recommend building stock first and testing that works for you, then you can start adding your tweaks in. I'm interested to hear what you add / change! 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. export PATH=$(pwd)/aarch64-linux-android-4.8/bin:$PATH We need to specify that we are cross compiling for arm64. export CROSS_COMPILE=$(pwd)/aarch64-linux-android-4.8/bin/aarch64-linux-android- Let's create a directory for our output to go in to. mkdir out We've got the kernel downloaded, so let's change to that directory so we're ready to go. cd android_kernel_honor7 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 When this process completes, we can check the '../out' directory and you should find the file arch/arm64/boot/Image. This is the kernel that you've just built! You can't flash it as is though, you need to put it into a boot image first. Here's how you do it... Change out of the kernel directory back to its parent. cd .. 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 You now have a new boot image (boot.newkernel.img). All that's left is to flash it to your device! Reboot to bootloader (either using 'adb reboot bootloader' or by powering on with volume down held), flash using 'fastboot flash boot boot.newkernel.img' and then reboot using 'fastboot reboot'. Job done! In the About screen of settings you should see the date of the new kernel and details of your build machine.
Guest PaulOBrien Posted April 22, 2016 Report Posted April 22, 2016 A quick note on building with the 4.9 toolchain - basically, the boot image that gets created is too big. This can be resolved by deleting unnecessarily PNGs in ramdisk/res/images/charger. P
Guest PaulOBrien Posted April 25, 2016 Report Posted April 25, 2016 I've patched the kernel from .86 to .101. All working well so this is likely to be in the next release. P
Guest PaulOBrien Posted April 25, 2016 Report Posted April 25, 2016 I've patched the kernel from .86 to .101. All working well! :) P
Guest PinoHaru Posted May 4, 2016 Report Posted May 4, 2016 (edited) make ARCH=arm64 O=../out hw_PLK_defconfig In Step 9, I have a warning, it may affect the further assembly? log http://www10.zippyshare.com/v/PB6IZHYJ/file.html Quote HOSTCC scripts/basic/fixdep GEN /home/user/Projects/myShitCoding/kitchen/out/Makefile HOSTCC scripts/kconfig/conf.o SHIPPED scripts/kconfig/zconf.tab.c SHIPPED scripts/kconfig/zconf.lex.c SHIPPED scripts/kconfig/zconf.hash.c HOSTCC scripts/kconfig/zconf.tab.o HOSTLD scripts/kconfig/conf warning: (ARCH_HI3XXX) selects ARM_CCI which has unmet direct dependencies (ARM) warning: (ARCH_HI3XXX) selects ARM_CCI which has unmet direct dependencies (ARM) # # configuration written to .config # Edited May 4, 2016 by PinoHaru
Guest PinoHaru Posted May 4, 2016 Report Posted May 4, 2016 (edited) A few hours later I was able to gather from the folder "Kernel" PLK.kernel. [Android6.0sch Here is the result, if I put myself and get a brick, I can restore it back? Sorry for my English Edited May 4, 2016 by PinoHaru
Guest arocs Posted June 3, 2016 Report Posted June 3, 2016 Hi Paul , I have follow your tutorial , but i get some errors .. a) First of all in the line git clone https://bitbucket.org/paulobrien/android_kernel_honor7.git i have to change with this one git clone https://bitbucket.org/paulobrien/android_kernel_honor_7.git if not can not download ... This has been solved ... ;) b) When i compiled the kernel point 10.) i get one error ... when compiling ... i can not remove .. LD net/sunrpc/auth_gss/built-in.o CC net/netfilter/xt_pkttype.o LD net/sunrpc/built-in.o CC net/netfilter/xt_policy.o CC net/netfilter/xt_qtaguid_print.o CC net/netfilter/xt_qtaguid.o CC net/netfilter/xt_quota.o CC net/netfilter/xt_quota2.o CC net/netfilter/xt_socket.o CC net/netfilter/xt_state.o CC net/netfilter/xt_statistic.o CC net/netfilter/xt_string.o CC net/netfilter/xt_time.o CC net/netfilter/xt_u32.o LD net/netfilter/netfilter.o LD net/netfilter/built-in.o LD net/built-in.o make: *** [sub-make] Error 2 I am using Linux Mint 17.3 , maybe dependences problem ? Also i would like to know if it possible to make a AOSP Android version ? Thanks a lot ...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now