分类 安卓 下的文章

Mix2S的内核编译以及添加驱动

前几天一直在用小米usb type-c带rj45网口的转换器,学校断网后,通过jmusupplicant实现不断网,无奈在我的Mac下安装不了Ubuntu,虚拟机安装之后网卡桥接只有在Ubuntu下上网,而且在虚拟机下显存只有128mb超级卡,后来在Mac上编译jmusupplicant有些.h库文件在Mac上无对应的,因此编译失败,于是突发奇想在Mix2s上将jmusupplicant编译成elf文件运行,然而在运行时wifi0无法发送心跳包导致依然无法上网,最后决定将转换器接上mix2s上网。

环境准备:

  • ubuntu 18.04.LTS

  • 交叉编译工具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