当前位置:   article > 正文

小米linux内核(Xiaomi_Kernel_OpenSource)编译指南_小米内核编译

小米内核编译

一、下载对应 设备版本的 Xiaomi Kernel

https://github.com/MiCode/Xiaomi_Kernel_OpenSource/

二、独立编译内核

主机:ubuntu 18.04

手机:小米Max 3

使用的工具链:来自谷歌的aarch64-linux-android-4.9

设置构建环境 我的环境用于构建 aosp 和调试,不仅用于内核

  1. sudo apt-get install git ccache automake flex lzop bison \
  2. gperf build-essential zip curl zlib1g-dev zlib1g-dev:i386 \
  3. g++-multilib python-networkx libxml2-utils bzip2 libbz2-dev \
  4. libbz2-1.0 libghc-bzlib-dev squashfs-tools pngcrush \
  5. schedtool dpkg-dev liblz4-tool make optipng maven libssl-dev \
  6. pwgen libswitch-perl policycoreutils minicom libxml-sax-base-perl \
  7. libxml-simple-perl bc libc6-dev-i386 lib32ncurses5-dev \
  8. x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev xsltproc unzip

接下来,让我们编译内核

对于非 dtbo 如 Max3

  1. git clone --depth=1 https://github.com/MiCode/Xiaomi_Kernel_OpenSource.git -b nitrogen-o-oss nitrogen-o-oss
  2. $ cd nitrogen-o-oss
  3. $ git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9 toolchain
  4. $ mkdir out
  5. $ export ARCH=arm64
  6. $ export SUBARCH=arm64
  7. $ export CROSS_COMPILE=${PWD}/toolchain/bin/aarch64-linux-android-
  1. make O=out nitrogen_user_defconfig
  2. make -j$(nproc) O=out 2>&1 | tee kernel.log

对于include-dtbo,比如Mix 3

dtc必须来自aosp源码(pie-release)

  1. git clone --depth=1 https://github.com/MiCode/Xiaomi_Kernel_OpenSource.git -b perseus-p-oss perseus-p-oss
  2. $ cd perseus-p-oss
  3. $ git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9 toolchain
  4. $ mkdir out
  5. $ export ARCH=arm64
  6. $ export SUBARCH=arm64
  7. $ export DTC_EXT=dtc
  8. $ export CROSS_COMPILE=${PWD}/toolchain/bin/aarch64-linux-android-

设置CONFIG_BUILD_ARM64_DT_OVERLAY=y

  1. make O=out perseus_user_defconfig
  2. make -j$(nproc) O=out 2>&1 | tee kernel.log

对于像小米9这样的msm-4.14

dtc必须来自aosp源码(pie-release) Clang from qcom

  1. git clone --depth=1 https://github.com/MiCode/Xiaomi_Kernel_OpenSource.git -b cepheus-p-oss cepheus-p-oss
  2. $ cd cepheus-p-oss
  3. $ 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

  1. $ tar vxzf snapdragon-llvm-compiler-android-linux64-609.tar.gz
  2. $ mkdir out
  3. $ export ARCH=arm64
  4. $ export SUBARCH=arm64
  5. $ export DTC_EXT=dtc
  6. $ export CROSS_COMPILE=${PWD}/toolchain/bin/aarch64-linux-android-
  7. Set CONFIG_BUILD_ARM64_DT_OVERLAY=y
  1. 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
  2. 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。

注意:如果您编译的内核无法启动,请使用 clang >= 6.0.9

这里我们只关注编译内核。请到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 文件夹来解决

关于 LLVM 工具

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 进行编译. (如果此处有什么误解 望指出)
 

-----------------

①、本人编译小米note8 (ginkgo) 内核:

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=dtc

make 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

③、编译生成 内核头modules,如/lib/modules/4.14.98-perf  这样的(可选步骤)

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/69391
推荐阅读
相关标签
  

闽ICP备14008679号