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。
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/,在右上角搜索框中查询您的设备代号,并点击进入设备详情页。
将设备详情页下滑至最底端,点击 (source code)超链接,进入github源码仓库页面。
在左上角图示处选择系统版本,需要与刚刚刷入的系统版本一致。我刷入的系统版本为18.1,所以此处选择「lineage-18.1」(记住版本号全名,方法二中需要用到) 。
图4.3 选择源码版本
选择好后有两种方法可以下载源码,方法二一般下载更快些,选其中一种执行后就不需要再执行另一种方法。
方法一:
选择好后点击右侧绿色「Code」按钮,点击弹出的「Download ZIP」进行下载。
图4.4 直接下载项目压缩包
下载好后是一个zip压缩文件,将该文件复制到虚拟机中刚刚创建的kernel文件夹内。(复制时ubuntu可能会弹出一个提示框,点击skip all即可)
打开命令行。
图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」。
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
详细步骤施工中……