安卓源码与内核的编译


前言

  直接在虚拟机中编译硬盘耗不起,我扩到了200g编译到一半还是提示空间不足,建议直接上移动硬盘。

  本文主要记录AOSP、lineage OS以及Kernel的编译。

lineage编译

官方wiki

安装必要依赖

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

报错可尝试apt换回原来的源然后

sudo apt install bc bison build-essential ccache curl flex git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev liblz4-tool libncurses5 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev 

少了g++-multilib gcc-multilib lib32z1-dev (不知道是否有影响)

apt-get update && apt-get upgrade && apt-get dist-upgrade

配置platform-tool(可选)

具体参考官方wiki,其实自己安装一下adb和fastboot就可以跳过这一步了

下载repo

参考清华源

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

启用缓存加速(可选)

export USE_CCACHE=1
export CCACHE_EXEC=/usr/bin/ccache

ccache -M 50G
ccache -o compression=true

下载源码

推荐用清华源

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git -b lineage-18.1

先别着急repo sync

提取专有 blob

这一步有不同情况有不同方式:

  • 对于官方支持的机型,可以使用官方wiki的教程中提到的两种方式:从已经刷了lineage的手机中提取,或者从刷机包中提取,具体参考官方wiki。
  • 对于所有机型,将vendor手动下载到根目录或者将其配置到repo中重新sync。

这里只介绍网上教程很少提到的第二种方式,参考如何给Xiaomi 4C编译LineageOS 18.1

  对于小米8se,官方并未支持这台设备,需要民间提供设备配置和vendor,可以在github中找到相关项目

使用方法:
  在“.repo”的目录下,创建local_manifests目录,创建文件:“roomservice.xml”然后把github中的内容复制过去
注意如果原来的文件中使用了fetch=”ssh://git@github.com要将其改成fetch=”https://github.com

repo sync

  顺便记下google设备的vendor

  这种方法在官方wiki中并没有提到,所以知道的人相对少一些,我联系到一个负责维护lineageOS给google设备做适配的contributor,他告诉我这是因为公开这些官方vendor涉及到了法律的灰色地带。使用这种方式的好处是能够刷到最新版本的vendor,而不是从旧版本的lineage中去提取。我想编译一个lineage首先我得有一个现成的编译好的rom,这很怪,就好像我想吃鸡蛋首先我得养只鸡,但是我没有鸡蛋所以我养不出鸡(不太恰当的比喻)。

开始编译

source build/envsetup.sh
breakfast sirius # 换成自己的设备名

croot
brunch sirius # 换成自己的设备名

  注意如果上一步没有完成的话这里直接breakfast sirius会提示找不到相关文件,然后去lineage官网去自动同步,这时候他会去同步sony的sirius机型,而不是小米8se,因为两个设备重名了,而官方只支持sony的机子。如果发生了这个情况可能会污染repo,要去.repo/local_manifests/roomservice.xml里把自动生成的sony的sirius记录给删掉,vendor和device目录下的sony文件夹也要删掉。

  不出意外的话这样就编译完成了

改makefile

source build/envsetup.sh
mgrep BUILD_NUMBER

./vendor/lineage/build/core/main_version.mk
# 把endif下面的全注释

BF_BUILD_NUMBER
./build/make/core/Makefile:342

BUILD_NUMBER
./build/make/core/version_defaults.mk:297:
# 改成9b7fb2d329

./vendor/lineage/config/common.mk:240:    LINEAGE_BUILDTYPE := RELEASE

签名安装包

参考官方文档
签名完成后可能会有故障。

subject='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
mkdir ~/.android-certs
for x in releasekey platform shared media networkstack testkey; do \
    ./development/tools/make_key ~/.android-certs/$x "$subject"; \
done
breakfast <codename>
mka target-files-package otatools
croot
sign_target_files_apks -o -d ~/.android-certs \
    $OUT/obj/PACKAGING/target_files_intermediates/*-target_files-*.zip \
    signed-target_files.zip
ota_from_target_files -k ~/.android-certs/releasekey \
    --block --backup=true \
    signed-target_files.zip \
    signed-ota_update.zip

刷机

  不推荐用twrp的卡刷,可能会出奇奇怪怪的问题,使用twrp或者lineage官方recovery,进入adb sideload模式,然后使用命令

adb sideload rom.zip # 编译完成的rom的路径

如果刷以后出现wifi用不了或者其他什么故障可以尝试先给手机刷个最新版本的bootloader和radio。

aosp编译

环境配置

  主要参考清华镜像源Google官方教程

  首先下载repo

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

也可以从清华源下载

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo

同时将以下内容写入.bashrc

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

重启终端完成源的替换

源码同步

  从这里查找自己的设备以及想要编译的安卓版本,记住”build ID”和”标记”,之后会用到。以pixel2xl为例,设备名为taimen,标记号为”android-11.0.0_r4”的版本支持pixel2xl,”build ID”为”RP1A.201005.004”。创建文件夹”android-11.0.0_r4”并进入该文件夹进行后续工作。

  开始源码同步

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-11.0.0_r4

这步2022/04/01亲测,使用清华源没问题但是使用中科大源或者google源会报一个”stable”啥啥啥的问题,原因没细看。这步完成后

repo sync

开始主要的同步进程,时间长短主要看网速,成功后也多sync几次,防止后续出现错误

下载驱动

  从这里下载对应设备的驱动,搜索”build ID”,找到自己的设备名即可,这里我搜索”RP1A.201005.004”,找”taimen”。

有两个”link”,全部都wget到本地,然后”tar -xzvf”解压后执行就行,阅读一大串文本的时候按”Q”跳过,然后输入”I ACCEPT”开始驱动解压。会解压出一个vendor文件夹,放到”android-11.0.0_r4”目录,如果之前就已经在这个目录了就不需要操作

开始编译

source build/envsetup.sh
lunch

不出意外的话会出来很多选项,输入aosp_taimen-userdebug的编号后回车,自动配置编译选项,然后

make -j20

开始漫长的等待,不出意外就成功了

内核编译

//TODO


文章作者: 大A
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 大A !
评论
  目录