当前位置: 华文问答 > 数码

【胎教】从零开始的小米(红米)手机内核编译教程——以红米note5为例

2024-01-13数码

0.0 序

内核编译的难点在于配置环境,不同手机、系统的内核源码版本、编译器版本、依赖项甚至所需系统版本各不相同,给入门带来了极大困难。依托于开源系统lineage,我们可以很便捷的下载到与系统对应的源码,减少不必要的麻烦。

本文将以尽可能普适的步骤,从最核心的环境配置及编译过程开始更新,逐步完善,目标是让零基础选手都能完成整个内核编译流程。(本文待更新的内容均可以百度到详细教程)

注意:请确保自己有环境或能力进入github并从中下载文件,否则将不能完成全过程。日后将更新github加速方法。



0.1 目录

1 解除bl锁、刷入TWRP、 刷入系统ROM 、root

2 安装VMware、创建ubuntu20.04虚拟机

3 在ubuntu中安装所需依赖项

4 下载与手机对应的内核源码、下载编译工具

5 配置环境变量

6 完成第一次编译

7 将内核打包刷入设备

0.2 查询设备代号

在开始前,请在百度查询您手机对应的代号,我使用的红米note5手机,代号为whyred。

图0.1 查询设备代号

1 解除bl锁 、刷入TWRP、刷入系统ROM、root

在本节中,您需要完成标题所示4个步骤。

为了确保成功率,我们使用lineage系统,以便获取到与系统完全对应的内核源码。

系统rom在https://download.lineageos.org/changes中获取,设备代号相同即可下载(同一个代号可能对应多款设备)。上述网址中找不到的,说明已经停止支持,没有最新版本的系统,在https://lineageosroms.com/xiaomi/中查找旧版本即可。

root我使用的是magisk,其他root也可以使用。

详细步骤施工中……



2 安装VMware、创建ubuntu20.04虚拟机

在本节中,您需要安装vmware,并创建一个ubuntu20.04虚拟机(其他发行版应该也可以,未测试)

详细步骤施工中……



3 在ubuntu中安装所需依赖项

在ubuntu虚拟机中,点击图示左侧图标打开文件管理器。(如找不到图标,可以按win键后输入files,点击出现的图标)(记住该操作,下文需要打开文件管理器时不再重复)

图3.1 打开文件管理器

为了演示,我将删除目录下不需要的文件夹,即把除「desktop」以外的文件夹全部删除。

删除后新建一个文件夹,命名为「kernel」,用来存放源码及编译工具。双击「kernel」文件夹进入。(记住新建、删除、重命名的操作方法)

图3.2 删除文件 图3.3 新建文件夹 图3.4 重命名文件

按win键后输入「terminal」,点击出现的图标,打开命令行窗口。(记住该操作,下文需要打开命令行时不再重复)

图3.5 打开命令行 图3.6 命令行窗口

在命令行内一次性输入以下内容并回车(可以复制文字,在命令行内右单击,点「paste」粘贴 ):

sudo apt install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git git-lfs gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev libelf-dev liblz4-tool libncurses5 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev adb fastboot -y

(命令中的空格、「-」符号都不要漏掉,符号个数要完全一致,下同,不再提示 )

会提示输入密码,输入后回车即可。

下载过程中会提示」Do you want to continue? [Y/n]」,直接回车即可,后面如果遇到也一样 。

4 下载与手机对应的内核源码、下载编译工具

4.1 下载内核源码

进入https://wiki.lineageos.org/devices/,在右上角搜索框中查询您的设备代号,并点击进入设备详情页。

图4.1 查询设备 4.2 设备详情页

将设备详情页下滑至最底端,点击 (source code)超链接,进入github源码仓库页面。

在左上角图示处选择系统版本,需要与刚刚刷入的系统版本一致。我刷入的系统版本为18.1,所以此处选择「lineage-18.1」(记住版本号全名,方法二中需要用到) 。

图4.3 选择源码版本

选择好后有两种方法可以下载源码,方法二一般下载更快些,选其中一种执行后就不需要再执行另一种方法。

方法一:

选择好后点击右侧绿色「Code」按钮,点击弹出的「Download ZIP」进行下载。

图4.4 直接下载项目压缩包

下载好后是一个zip压缩文件,将该文件复制到虚拟机中刚刚创建的kernel文件夹内。(复制时ubuntu可能会弹出一个提示框,点击skip all即可)

图4.5 下载好的压缩包 4.6 将压缩包复制到ubuntu

打开命令行。

图4.7 命令行窗口

在其中输入以下命令:

cd ~/kernel

unzip 你下载的zip文件名 (记得带后缀,例如unzip android_kernel_xiaomi_sdm660-lineage-18.1.zip)

图4.8 执行unzip解压命令完成

此时查看文件管理器,kernel目录下将解压出一个文件夹,为了方便,将该文件夹重命名为「src」。

图4.9 重命名完成的文件夹

至此源码下载完毕。

方法二:

在github页面中点击右侧Code按钮,点击一串网址后的方块图标,复制该项目地址。记住您选择的版本全名,比如我选择的是「lineage-18.1」。

图4.10 复制项目地址

ubuntu虚拟机中打开命令行窗口。

图4.11 命令行窗口

在出现的窗口中输入以下命令:

cd ~/kernel

git clone 刚刚复制的网址,输入完前面的字后右单击粘贴即可 -b 选择的版本全名 --depth 1

(例如我的命令应该是 git clone https://github.com/LineageOS/android_kernel_xiaomi_sdm660.git -b lineage-18.1 --depth 1)

待下载完后,「kernel」文件夹内将出现一个源码文件夹,为了方便操作,将其重命名为「src」。此时源码下载完成。

图4.12 执行git clone命令完成

4.2 下载编译工具

我们选择的工具是「Proton Clang」,github页面是https://github.com/kdrag0n/proton-clang。安装方法与下载源码的两种方法相同,且不需要选择版本。

方法一:

点击右侧Code按钮,再点击Download Zip,下载压缩包。将压缩包复制到Ubuntu中的「kernel」文件夹内(复制时ubuntu可能会弹出一个提示框,点击skip all即可)。打开命令行,输入下面的命令进行解压:

cd ~/kernel

unzip 压缩文件名 (例如unzip proton-clang-master.zip)

解压完成后,将解压出的文件夹重命名为「toolchains」。至此编译工具下载完成。

方法二:

ubuntu中打开命令行,输入如下命令:

cd ~/kernel

git clone https://github.com/kdrag0n/proton-clang.git

将新下载下来的文件夹重命名为「toolchains」。至此编译工具下载完成。

图4.13 内核源码及编译工具下载完毕

下载完毕后,「kernel」文件夹中应存在src和toolchains两个文件夹。如果使用方法一下载,还会留有zip压缩包,不必理会即可。

5 配置环境变量

ubuntu中打开命令行,依次输入如下命令(注意第二、三行末尾都是一个「-」号 ):

export PATH=$PATH:~/kernel/toolchains/bin

export CROSS_COMPILE=aarch64-linux-gnu-

export CROSS_COMPILE_ARM32=arm-linux-gnueabi-

export ARCH=arm64

export CC=clang

图5.1 配置环境变量

本节所述操作,每次打开命令行之后都需要重新执行一次。

6 完成第一次编译

6.1 编译默认配置

命令行里输入以下命令:

cd ~/kernel/src

ls ~/kernel/src/arch/arm64/configs

在显示出来的配置文件里找出带有您设备代号的一项,比如我需要找到的配置文件名称为「whyred_defconfig」。记住该名称。

图6.1 查找设备对应的默认配置文件

输入命令:

make ARCH=arm64 CC=clang O=out 配置文件名称 (比如我的命令是make ARCH=arm64 O=out whyred_defconfig)

此时可以看到编译器在运行,src文件夹下生成了一个out文件夹。

继续输入命令:

make ARCH=arm64 O=out CC=clang -j线程数(线程数通常为cpu核心数乘2,我设置为8,则命令为make ARCH=arm64 O=out CC=clang -j8)

此时开始进行编译,屏幕上闪过编译信息,等待几分钟后出现「CA T arch/arm64/boot/Image.gz-dtb」字样,编译就完成了。

图6.2 编译完成

编译完成后的内核文件会保存在out/arch/arm64/boot文件夹中,名称为Image.gz-dtb。

6.2 修改配置

输入如下命令:

cd ~/kernel/src/out

make menuconfig

图6.3 配置页面

即可进入配置页面,在该页面中选择需要开启的选项。配置完毕后,方向键左右选择「Save」,回车。然后选择「Exit」退出,返回命令行页面。

输入命令:

cd ../

make ARCH=arm64 O=out CC=clang -j线程数

即可按新配置进行编译。



7 将内核打包刷入设备

在本节中,您需要使用打包工具将内核刷入设备。

我使用的是AIK,项目地址为https://github.com/ndrancs/AIK-Linux-x32-x64

还可以使用AnyKernel3进行打包,地址为https://github.com/osm0sis/AnyKernel3,教程地址https://github.com/tiann/KernelSU/discussions/952

详细步骤施工中……