机型代号:
红米 note 7 pro(代号:violet)
红米 note 9 pro(代号:gauguin)
近来电脑愈发派不上用场,
正好原用的 violet 退役,
想添加一个 cifs 支持方便挂载路由器硬盘,
用手上这台主力机 gauguin 编译内核。
gauguin 用 magisk 给 boot.img 打补丁并刷入,
获取根权限后使用 linuxdeploy 部署 Ubuntu。
交叉编译工具链
内核版本 4.14+ 需要 clang 编译,
选用 tc-build 工具链,
最新 clang+llvm+binutils。
地址:【点击访问】。
或使用 llvm 官网预编译包(推荐),
地址:【点击访问】。
编译 tc-build 项目
- 安装环境
apt install bc \
bison \
ca-certificates \
ccache \
clang \
wget \
cmake \
curl \
file \
flex \
gcc \
g++ \
git \
vim \
zip \
libelf-dev \
libssl-dev \
make \
ninja-build \
python3 \
texinfo \
u-boot-tools \
xz-utils \
zlib1g-dev -y
- 克隆代码
git clone --depth=1 https://github.com/ClangBuiltLinux/tc-build.git
- 升级 cmake
cmake项目地址:【点击访问】。
1.下载 cmake 源码包
wget https://hub.fastgit.org/Kitware/CMake/releases/download/v3.20.0/cmake-3.20.0.tar.gz
2.解压、编译、安装
tar -xzvf cmake-3.20.0.tar.gz
cd cmake-3.20.0
mkdir build && cd build && cmake ..
make -j4 && make install
- 编译工具链及 binutils
注:编译工具链耗时约 4-6
小时,需物理降温,
同时编译脚本可使用 -h
参数查看更多帮助信息。
cd tc-build
./build-llvm.py
./build-binutils -t aarch64-linux-gnu
可指定并行编译及链接线程,
降低手机发热,减少内存占用,同时增加编译时长。
./build-llvm.py -D \
LLVM_PARALLEL_COMPILE_JOBS=6 \
LLVM_PARALLEL_LINK_JOBS=4 \
--lto thin
编译工具链和内核时均可使用 ccache,
可加快二次编译速度。
安装ccache
apt install ccache -y
启用及路径配置写入 .bashrc
# 启用ccache
export USE_CCACHE=1
# 改变ccache缓存路径
export CCACHE_DIR=~/.ccache
shell 指定 ccache 缓存大小
ccache -M 10G
重新连接会话或 source 资源使配置生效
. ~/.bashrc
编译内核
可选用官方或以下内核源码:
地址:【点击访问】
- 克隆内核源码
git clone --depth=1 https://github.com/Panchajanya1999/msm-4.14.git -b R violet
- 添加 cifs 支持
挂载路由器硬盘或电脑共享目录需要 cifs 支持,
编辑: vendor/violet-perf_deconfig:
cd violet
vim arch/arm64/configs/vendor/violet-perf_defconfig
修改以下项并保存
CONFIG_CIFS=y
- 额外工作
通常开启 lto 会提升程序性能并减小体积,
但有时会导致无法开机。
vim arch/arm64/configs/vendor/violet-perf_defconfig
修改以下项并保存
CONFIG_LTO_NONE=y
# CONFIG_LTO is not set
# CONFIG_THIN_LTO is not set
# CONFIG_LTO_CLANG is not set
# CONFIG_CFI_CLANG is not set
# CONFIG_CFI is not set
内核有 vDSO 支持,需安装 32 位交叉编译工具链:
apt install gcc-arm-linux-gnueabi -y
- 构建编译脚本
建立脚本 run.sh 并执行编译。
vim run.sh
添加内容并保存
#!/bin/bash
starttime=`date +'%Y-%m-%d %H:%M:%S'`
export ARCH=arm64
export SUBARCH=arm64
TC_DIR="/root/tc-build"
MPATH="$TC_DIR/install/bin/:$PATH"
rm -f out/arch/arm64/boot/Image.gz-dtb
make O=out vendor/violet-perf_defconfig
PATH="$MPATH" make -j6 O=out \
NM=llvm-nm \
OBJCOPY=llvm-objcopy \
LD=ld.lld \
CROSS_COMPILE=aarch64-linux-gnu- \
CROSS_COMPILE_ARM32=arm-linux-gnueabi- \
CC=clang \
AR=llvm-ar \
OBJDUMP=llvm-objdump \
STRIP=llvm-strip
2>&1 | tee error.log
endtime=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date=" $starttime" +%s);
end_seconds=$(date --date="$endtime" +%s);
echo Start: $starttime.
echo End: $endtime.
echo "Build Time: "$((end_seconds-start_seconds))"s."
cp out/arch/arm64/boot/Image.gz-dtb .
给脚本增加执行权限
chmod +x run.sh
执行编译
./run.sh
这样我们在本目录得到了内核文件 Image.gz-dtb。
打包内核
使用 anykernel3 项目对内核打包,
地址:【点击访问】。
- 克隆项目
cd
git clone https://github.com/osm0sis/AnyKernel3.git anykernel
- 修改配置文件
参考文章:『论如何优雅的刷入内核』。
cd ankernel
vim anykernel.sh
修改并保存
#包名
kernel.string=Violet-q-Kernel
#不检查机型
do.devicecheck=0
#刷入位置
block=/dev/block/bootdevice/by-name/boot;
ramdisk 内容用不到全部删除,
也可以找其他刷机包解压改一下再重新压缩。
- 构建压缩包脚本
将刚才编译的内核放入本目录,
并构建压缩脚本:
vim build.sh
添加内容并保存
#!/bin/sh
echo compressing...
zip -r kernel.zip \
anykernel.sh \
Image.gz-dtb \
LICENSE \
META-INF \
tools
echo done.
添加执行权限并执行压缩
chmod +x build.sh
./build.sh
这样就得到了内核包 kernel.zip,
使用 twrp 备份原 boot、dtbo 分区并刷入新内核,
注意刷入内核后选择清除 cache 并重启。
补充说明
Github 代理加速
有时克隆代码过慢,
可通过透明代理瞬间跑满带宽:
git config --global url."https://hub.fastgit.xyz".insteadOf https://github.com
或
git config --global url."https://github.com.cnpmjs.org".insteadOf https://github.com
配置文件为 ~/.gitconfig。
小米官方内核源码
小米官方内核开源库:『点击访问』。
小米官方内核编译WIKI:『点击访问』。
编译方法类似,不过总有一些问题需要修改。
常见问题参考:『点击访问』。
使用手机刷机
首先使用电脑对手机进行解锁 bootloader。
注:解锁及跨版本线刷会清除全部数据。
使用 gauguin 对 violet 进行刷机:
准备一条双头 Type-c 数据线,
violet 按上音量+关机键进入 fastboot 模式,
gauguin 本机 Ubuntu 安装工具:
apt install android-tools-adb android-tools-fastboot -y
将 violet 线刷包放入 gauguin 容器内并解压,
修改刷机脚本删除第一行的验证内容并开始刷入:
vim flash_all_except_data_storage.sh
fastboot $* getvar product 2>&1 | grep "^product: *violet$"
修改为
fastboot $* getvar product 2>&1
执行线刷
./flash_all_except_data_storage.sh
刷完重启会自动进入官方 rec,
选择清除全部数据并重启进入系统。
激活设备并设置锁屏密码方可正常解密 data。
注:Termux、Magisk 也可安装 adb、fastboot 工具。
Twrp
刷入 Twrp 步骤跟线刷类似,
准备 Twrp 镜像 twrp.img 及 misc.bin,
gauguin 执行命令刷入后,
violet 进入 Twrp 解密 data,
然后进行刷入 magisk 等操作。
fastboot flash recovery twrp.img
fastboot flash misc misc.bin
fastboot reboot
无 Twrp 获取 root
提取当前版本卡刷包 boot.img,
使用 magisk app 给 boot.img 打补丁,
并进入 fastboot 模式刷入:
fastboot flash boot magisk_patched.img
fastboot reboot
开机进入 magisk 即可获得 root。
END
本作品采用“CC BY-SA 4.0”进行许可。
如果你觉得本文对你有帮助,请我喝杯咖啡吧。