【实战系列】快速使用LineageOS自定义你的手机系统(附小米6固件编译步骤)

118 阅读5分钟

今天分享的是自定义手机操作系统系列的第三次分享,也是LineageOS源码编译的实战系列的第二篇文章,鉴于大家对实际技术的兴致不太高涨,同时该系列也存在一定的操作门槛,因此这也是该系列分享的最后一篇内容,感兴趣的可以留言、私信交流,共同学习~

本次主要内容是如何将真机需要的一些设备树、驱动等文件集成到源码中,然后编译一套适合真机的固件,同时保证真机的功能正常运行。如果你不想编译源码,可以直接使用LineageOS的官方系统进行刷机使用,具体步骤可以参考以下分享内容:

juejin.cn/post/758694…

后文会以编译一份适合我小米6手机使用的固件为例进行分享~

LineageOS编译小米6手机系统

相关依赖

  • LineageOS源码,我这里使用的是LineageOS-20.0,Android13的源码
  • 适配小米6相关的device源码
  • 适配小米6相关的kernel源码
  • 适配小米6相关的vendor源码

LineageOS源码下载

源码如何下载之前有做分享,这里不再赘述,可以查看前期分享:

juejin.cn/post/758734…

其他依赖下载

LinesaOS支持很多手机品牌的设备树和驱动等相关的源码,只要你能在官方检索到你的手机型号,几乎都有源码可以获取,但是他的源码是在github上的,需要你能正常访问github,如何访问网上有很多方法,如果你不能访问可以看看。

这里提供两个仓库供大家检索自己对应手机型号的依赖:

github.com/orgs/Lineag…

github.com/orgs/TheMup…

device依赖下载

这里小米6需要的device涉及到两个device_xiaomi_msm8998-common和device_xiaomi_sagit,对应的仓库地址为:

github.com/LineageOS/a…

github.com/LineageOS/a…

下载后将文件存放在对应目录即可:

  • android_device_xiaomi_sagit存放在device/xiaomi/sagit目录下
  • android_device_xiaomi_msm8996-common存放在device/xiaomi/msm8996-common目录下

kernel依赖下载

kernel针对小米6就只需要kernel_xiaomi_msm8998这一个库就可以,对应仓库地址:

github.com/LineageOS/a…

下载后将文件存放在kernel\xiaomi\msm8998目录下即可。

vendor依赖下载

vendor这里也需要两个库vendor_xiaomi_sagit和vendor_xiaomi_msm8998-common,对应下载地址:

github.com/TheMuppets/…

github.com/TheMuppets/…

下载后将文件存放在对应目录:

  • vendor_xiaomi_sagit存放在vendor\xiaomi\sagit目录
  • vendor_xiaomi_msm8998-common存放在vendor\xiaomi\msm8998-common目录

编译

当所有依赖的设备树文件以及驱动相关文件都下载好并存放在对应目录后,执行以下命令检查拉取一下所需文件是否齐全即可,如果没有问题我们就可以着手编译了:

# 加载编译环境
source build/envsetup.sh

# 检查拉取目标模块的代码, sagit是我小米6的代号,其他型号的具体调整
breakfast sagit

注:这一步如果遇到问题,可以看看后文常见问题处理是否有你遇到的问题。

打包

编译完成后,使用一下命令就可以将系统镜像打包出来刷机使用了:

mka bacon

打包完成文件所在目录在最后会显示,如下图所示:

image.png

刷机

这里的刷机方式和前面分享的方式一致,进入系统Recovery模式后,连接手机到电脑,执行以下命令即可:

adb sideload lineage-20.0-20251209-UNOFFICIAL-sagit.zip

效果展示

image.png

image.png

常见问题

缺少git信息

由于我们不是直接从LineageOS的官方库中直接拉取的代码,没有.git文件,不是有效的git仓库信息,编译会出现以下错误:

HEAD^0' on LineageOS/android_device_xiaomi_msm8998-common failed stderr: fatal: 不是 git 仓库(或者直至挂载点 /mnt 的任何父目录) 停止在文件系统边界(未设置 GIT_DISCOVERY_ACROSS_FILESYSTEM)

处理方式:

  • 使用官方仓库下载代码
  • 在手动拷贝进入的目录下初始化一个空的git仓库信息,具体如下:
# 这里进入每一个手动拷贝的目录
cd device/xiaomi/msm8998-common

# 初始化git信息
git init

# 添加所有文件
git add .

# 提交到本地
git commit -m "Initial local commit"

刷机报错SPL校验失败

如果你是在已经安装LineageOS系统的手机上,刷你所编译好的系统固件时,很有可能会出现以下错误信息:

ERROR:recovery: Denying OTA because it‘s SPL downgrade

问题原因:

这是系统安全限制,校验到你所编译的固件的安全补丁级别低于当前手机系统,处于安全考虑不允许刷机,这时你可以有两种做法:

做法一:

先给手机刷回原生的品牌厂商固件。然后再刷你所编译的固件就行。缺点就是你的数据无法保留。

做法二:

修改系统的SPL时间,重新编译后刷机,具体修改如下:

image.png

image.png

image.png

注:这里可以全局检索这个变量的定义赋值,将你手里源码所有相关点都改掉即可。

最后

自此,使用LineageOS的源码编译手机真机系统的方式就介绍完了,其他手机品牌手机操作方式相同,在操作前可以在代码库中去检索一下是否存在对应的手机型号的代码,可以就完全可以支持的。

当然,如果没有发现你还是想试试也是可以的,我们可以从手机品牌官方提供的ROM固件包去提取相关模块就可以了,这里就不做过多分享了,感兴趣的可以深入研究一下。