赞
踩
一、下载对应 设备版本的 Xiaomi Kernel
https://github.com/MiCode/Xiaomi_Kernel_OpenSource/
二、独立编译内核
主机:ubuntu 18.04
手机:小米Max 3
使用的工具链:来自谷歌的aarch64-linux-android-4.9
设置构建环境 我的环境用于构建 aosp 和调试,不仅用于内核
- 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
接下来,让我们编译内核
对于非 dtbo 如 Max3
- git clone --depth=1 https://github.com/MiCode/Xiaomi_Kernel_OpenSource.git -b nitrogen-o-oss nitrogen-o-oss
- $ cd nitrogen-o-oss
- $ git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9 toolchain
- $ mkdir out
- $ export ARCH=arm64
- $ export SUBARCH=arm64
- $ export CROSS_COMPILE=${PWD}/toolchain/bin/aarch64-linux-android-
- make O=out nitrogen_user_defconfig
- make -j$(nproc) O=out 2>&1 | tee kernel.log
对于include-dtbo,比如Mix 3
dtc必须来自aosp源码(pie-release)
- git clone --depth=1 https://github.com/MiCode/Xiaomi_Kernel_OpenSource.git -b perseus-p-oss perseus-p-oss
- $ cd perseus-p-oss
- $ git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9 toolchain
- $ mkdir out
- $ export ARCH=arm64
- $ export SUBARCH=arm64
- $ export DTC_EXT=dtc
- $ export CROSS_COMPILE=${PWD}/toolchain/bin/aarch64-linux-android-
设置CONFIG_BUILD_ARM64_DT_OVERLAY=y
- make O=out perseus_user_defconfig
- make -j$(nproc) O=out 2>&1 | tee kernel.log
对于像小米9这样的msm-4.14
dtc必须来自aosp源码(pie-release) Clang from qcom
- git clone --depth=1 https://github.com/MiCode/Xiaomi_Kernel_OpenSource.git -b cepheus-p-oss cepheus-p-oss
- $ cd cepheus-p-oss
- $ git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9 toolchain
您必须从 qcom 获得 llvm clang。链接:https ://developer.qualcomm.com/download/sdllvm/snapdragon-llvm-compiler-android-linux64-609.tar.gz
- $ tar vxzf snapdragon-llvm-compiler-android-linux64-609.tar.gz
- $ mkdir out
- $ export ARCH=arm64
- $ export SUBARCH=arm64
- $ export DTC_EXT=dtc
- $ export CROSS_COMPILE=${PWD}/toolchain/bin/aarch64-linux-android-
- Set CONFIG_BUILD_ARM64_DT_OVERLAY=y
- make O=out REAL_CC=${PWD}/toolchains/llvm-Snapdragon_LLVM_for_Android_6.0/prebuilt/linux-x86_64/bin/clang CLANG_TRIPLE=aarch64-linux-gnu- cepheus_user_defconfig
- make -j$(nproc) O=out REAL_CC=${PWD}/toolchains/llvm-Snapdragon_LLVM_for_Android_6.0/prebuilt/linux-x86_64/bin/clang CLANG_TRIPLE=aarch64-linux-gnu- 2>&1 | tee kernel.log
对于 violet-p-oss,make vendor/violet-perf_defconfig 而不是 make violet-perf_defconfig
之后可以在out目录下找到很多编译好的文件。您可以在该目录中找到内核。 out/arch/arm64/boot
如果要刷这个,必须解压boot.img,更换内核,重新打包boot.img。有些设备需要 dtbo.img,所以你必须重新打包 dtbo.img。
这里我们只关注编译内核。请到xda或者谷歌搜索如何repack boot.img和repack dtbo.img
有时,如果您发现刷入 boot.img 后 wifi 和音频不工作,您需要编译 wlan 和音频(sdm845)模块
也许你们中的一些人会遇到这样的编译错误 error: msm_isp.h: No such file or directory
在android源码(caf)中,已经是setup environment了。像 O=out/target/product/{TARGET_PRODUCT}/obj/kernel/, toolchain= ARCH=arm64/arm/x86/mips
这根本不是内核的问题!这可以通过按照上述步骤将输出重定向到 out 文件夹来解决
Android Q,Qcom平台,我们使用从链接获取的snapdragon-llvm-compiler-android 8.0或更高版本。 Snapdragon LLVM Compiler - Tools - Qualcomm Developer Network
如果您按照本指南进行操作但仍然遇到一些错误并且您知道这是内核的问题而不是链接到您的 kernel.log 文件(您会在您的内核目录中找到它),您可以使用任何粘贴服务像https://pastebin.com这样上传
--------------------------
强烈推荐再看下这个:
Android 系统编译之内核编译_MX东芝的博客-CSDN博客_android内核编译
make O=output leo_user_defconfig
解释 leo_user_defconfig 是什么鬼 从哪里来?
这个文件 在 桌面/Kernel/arch/arm64/configs/ 下, 里面可能有很多手机代号, 你可以查看你的手机的内核信息, 或者 手机的 system/build.prop里有你的代号
leo_user_defconfig 其中的 leo 就是代表的 小米NotePro ,网上很多文章都是说 make msmxxx_defconfig
…我不太清楚,具体可能要多编译几个 看看哪个正常 , 反正我认为 就是 “代号_user_defconfig” 这样的格式, 不过这只对于小米是这样,其他手机好像是不带 user 直接 代号_defconfig, 或者是什么都没有 就只有cpu型号 那么你只能选择 msmXXXX_defconfig 进行编译. (如果此处有什么误解 望指出)
-----------------
tooldirname=toolchain_new_22
export SUBARCH=arm64
export ARCH=arm64
export ANDROID_AARCH64=${PWD}/$tooldirname/bin
export PATH="${PWD}/bin:${PWD}/$tooldirname/bin:${PWD}/$tooldirname/clang/bin:${PWD}/$tooldirname/clang/lib:${PWD}/$tooldirname/clang/toolchains/llvm-Snapdragon_LLVM_for_Android_6.0/prebuilt/linux-x86_64/bin:${PATH}"
export CROSS_COMPILE=aarch64-linux-android-
export DTC_EXT=dtcmake mrproper
make O=out ginkgo-perf_defconfig
make O=out -j8
其中toolchain_new_22 为android编译工具链目录
编译完成后生成的Image文件(格式为Image: Linux kernel ARM64 boot executable Image)无法直接fastboot 刷入,需要将其打包。
需要使用boot打包解包工具
对原始boot.img解包 替换Image(Kerner)文件,然后打包 即可刷入了!
make headers_install
rm -rf out/
make mrproper
make O=out ginkgo-perf_defconfig
make modules
make modules_install
生成完毕后,在当前系统 就 有/lib/modules/4.14.98-perf 这样的了
将4.14.98-perf 拷贝到其他设备,如果cpu不一致,可能会报错“文件格式错误”之类的,如:“scripts/mod/modpost: Exec format error”
此时就需要重新对scripts编译:
make ginkgo-perf_defconfig
make prepare
make scripts
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。