前几天一直在用小米usb type-c带rj45网口的转换器,学校断网后,通过jmusupplicant实现不断网,无奈在我的Mac下安装不了Ubuntu,虚拟机安装之后网卡桥接只有在Ubuntu下上网,而且在虚拟机下显存只有128mb超级卡,后来在Mac上编译jmusupplicant有些.h库文件在Mac上无对应的,因此编译失败,于是突发奇想在Mix2s上将jmusupplicant编译成elf文件运行,然而在运行时wifi0无法发送心跳包导致依然无法上网,最后决定将转换器接上mix2s上网。
环境准备:
- ubuntu 18.04.LTS
- 小米mix2s内核源码 :https://github.com/MiCode/Xiaomi_Kernel_OpenSource
- 交叉编译工具toolchain:
git clone https://bitbucket.org/jonascardoso/toolchain_aarch64_travis
apt install gcc make g++
开始编译:
- 下载并解压
- toolchain:下载下来后toolchain_aarch64_travis文件夹重命名为Toolchain,放进小米kernel的目录下,终端输入 sh aptess.sh选择编译的对象 这里选7

原理其实是选择设备配置文件,arch/arm64/configs这个文件夹里有设备文件夹。
当然可以直接通过 make menuconfig 用界面裁剪配置内核。(比较麻烦23333)
打开终端, 输入sudo gedit /etc/profile 在末尾添加环境变量
vim ~/.bash_profile 并将下面内容添入
export ANDROID_AARCH64=/home/ubuntu/桌面/Toolchain/google_gcc/aarch64-linux-android-4.9/bin/ export ARCH=arm64 export SUBARCH=arm64 export PATH=$PATH:$ANDROID_AARCH64
接下来
source /etc/profile && . /etc/profile
网上文章都是直接开始编译了, 反正我直接make 是不行的
需要重新指定 O=输出目录 才正常 否则编译过程中会报错 无法生成image.gz.dtb 文件 之类的错误
指定make 目录终端输入如下命令进行生成 .config 文件
cd Kernel mkdir output make O=output leo_user_defconfig cd output make O=output
/Kernel/arch/arm64/configs/ 下, 里面可能有很多手机代号, 你可以查看你的手机的内核信息, 或者 手机的 system/build.prop里有你的代号
leo_user_defconfig 其中的 leo 就是代表的 小米NotePro
make O=output 代表重定向输出目录, 并且开始编译 , 也可以使用 make -j3 O=output, j3代表 系统的CPU的线程数,比如我的i7-8700k是12线程,则为 make -j12
刷写boot.img并替换内核
在win下, 使用 Android Image Kitchen (软件请百度,注意分6.x 7.x 8.x 可用版本)
先取出你的手机ROM中的 boot.img 拖到unpackimg.bat去解包, 然后把image.gz-dtb 该文件替换掉原本的内核文件 split_img/boot.img-zImage
然后执行repackimg.bat 得到 image-new.img
执行如下命令 刷入
adb reboot bootloader && fastboot flash boot C:\你的路径\image-new.img && fastboot reboot