chromium android 源码编译_在谷歌云上高速编译安卓AOSP ROM、驱动、内核并完成刷机

5e2d40338c293b58faf1c06cc57f1bcb.png

目标

  • 完成安卓10rom的aosp源码+驱动+内核编译、并完成刷机
  • 手机sailfish
  • 选择谷歌云的目的 在群里听到乌师傅说谷歌云便宜,cpu多,编译源码几分钟就够了,并且利用免费的300美金可以随便玩,那就动手试试了。

致谢

肉丝大佬文章 https://www.anquanke.com/post/id/199898#h3-8 乌师傅 谷歌云和驱动的建议 众多翻阅过的博客文章

选择服务器

1f2e0d01ee6dfdc92de4b0f78c3e23d4.png

984fc0cb2bfc37b9e14a74f5486e6c3c.png

e19f2f0c932f976c2ba14013cb31b0df.png

f040887bc88b29b618cc4af05a5be34d.png

c15accab1f63cb84f187f78df98d09f2.png

275d6814d16dc748574357958387c529.png

最后创建就好了。

  • 出现的问题

6a2ef63beb15ddc2282b568737cf386d.png

上边这两个问题都是由于配额不够,点击申请配额,然后下一步就,提交申请就可以了,等他们配置。

cf227ebec627506bb547972571301f32.png

安装工具

  • 更新&&配置
sudo apt-get autoclean
sudo apt-get update
sudo apt-get upgrade
sudo apt-get -u dist-upgrade
sudo dpkg --configure -a
sudo apt-get -f install
  • 安装git
sudo apt-get install git -y
git config --global user.email "your mail"
git config --global user.name "your name"
  • 安装repo工具
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
  • 装个看CPU、内存、缓存的htop
apt install htop -y

同步源码

我们有两种方式同步源码,清华和谷歌,由于我们是在谷歌云操作,就只用谷歌来下载源码。

  • 创建存放源码的文件夹
mkdir android/
cd android/
  • 初始化仓库 从google的服务器同步(国内不可用)
repo init -u https://android.googlesource.com/platform/manifest

也可以指定特定的版本同步源码,记得输入y 选择源码版本 https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds 以Pixel为例, 对应的Android 10源码tag是android-10.0.0_r2, build id是QP1A.190711.020. PS: 这里版本不要选错,不然后面没办法成功刷机.

7fd0b9dcc24298d2757722c152e48289.png
repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r2
  • 同步源码树 下面三行命令其中一行就行。
repo sync
repo sync -j8 #8个线程同步代码
nohup repo sync -j8 >sync.log 2>&1 & #推荐:后台去同步,ssh断开也没事。

可以看到htop下,多个cpu已经跑起来了。

9ed4b2937c38a0ba0c83139b2771cf7a.png

htop的cpu使用率为0,则是已经同步完成了。

下载驱动

如果不刷机的话,可以忽略不看。 下载驱动地址 https://developers.google.com/android/drivers Pixel机型且build id为QP1A.190711.020对应的驱动是下面两个文件 注意: 这里驱动版本不要选错,选错刷机就是板砖了。

3334988e0540981351553c7c82e11bd2.png

wget 这个链接即可 下载并解压, 得到两个脚本文件

extract-google_devices-sailfish.sh
extract-qcom-sailfish.sh

a271ae2d375aa21a87e8a920c4ed8bba.png

执行脚本后一个个确认,最后一步输入"I ACCEPT"。最后会生成一个ventor文件夹里面就是驱动代码,内容如下,ventor需要拷贝到aosp源代码目录。

├── google_devices
│   ├── marlin
│   │   ├── BoardConfigVendor.mk
│   │   └── device-vendor-sailfish.mk
│   └── sailfish
│       ├── android-info.txt
│       ├── BoardConfigPartial.mk
│       ├── device-partial.mk
│       └── proprietary
│           └── vendor.img
└── qcom
    └── sailfish
        ├── BoardConfigPartial.mk
        ├── device-partial.mk
        └── proprietary
            ├── ATT_profiles.xml
            ├── lib64
            │   ├── vendor.qti.atcmdfwd@1.0.so
            │   └── vendor.qti.qcril.am@1.0.so
            ├── pktlogconf
            ├── qcrilhook.jar
            ├── ROW_profiles.xml
            └── VZW_profiles.xml
  • 删除之前编译生成的文件(第一次编译忽略)
make clobber

编译AOSP源码

编译master源码需要安装OpenJDK 8,注意不是SUN JDK1.8,否则编译会报错

  • 安装OpenJDK 8
sudo apt-get install openjdk-8-jdk -y
  • 安装依赖
apt install bison tree
dpkg --add-architecture i386
apt update
apt install libc6:i386 libncurses5:i386 libstdc++6:i386
apt install libxml2-utils
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential  
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache
  • 初始化编译环境
source build/envsetup.sh
  • 选择设备 选择自己的设备
lunch

27237347c3cf8ae988934a254e133768.png

我这里是选择16 如果你这里提示如下图

01b2f538e5a53637bb3615e86b7b78c1.png

请在初始化编译环境哪里,执行如下命令

cd build
source benvsetup.sh
lunch #选择自己的设备
cd .. #进入源码文件夹
  • 开始编译
export LC_ALL=C #recipe for target 'run_soong_ui' failed 解决方案二
#下面两行命令其中一行就行
make -j60 #这个60是cpu核心个数*2,我这是30个cpu
nohup make -j 60 >>123.log 2>&1 & #推荐这个命令,后台运行。

cpu跑满了

d33fd84621626cee4c6b3e69d10ccbfb.png

等待编译完成,谷歌云这里100个cpu的话,只需要5分钟左右,泡面即可。 可以先去配置下载刷机包的依赖啦。

6ebe0aa8f1a65ce5a3d49f16d381d8cf.png

编译完成。 编译完成的系统镜像位于当前目录的out/target/product/sailfish/下,各类img就是

遇到的错误

  • recipe for target 'run_soong_ui' failed*解决方案一 增加swap空间 增加办法: 增加4个G的交换空间
 cd /
 sudo dd if=/dev/zero of=/swp bs=10M count=400
 sudo mkswap /swp
 sudo swapon /swp

下载刷机包

  • 打包刷机镜像 tar zcvf sailfish.tar.gz sailfish 打包文件如下图所示

4505a8a667e4d6790b59b34850c48107.png
  • 利用NodeJs的served来做文件服务器
  • 超级快的下载文件服务器(web还不错的) served支持断点续传和多线程下载
apt install npm nodejs-legacy
npm install -g served curl
served 8000 #在要下载的文件的目录下运行

9ef04c21e5bd7d007de6f30225f637d9.png

b52480d3d86c17961f64b0b2b6b8dde2.png
  • 开始下载

a3ce4dfacb19a37de29b4638ff710cb7.png

4240b6045c9753da87776155dd82f6d1.png

刷机

我这里是mac

  • 设置ANDROID_PRODUCT_OUT路径,
export ANDROID_PRODUCT_OUT=/Users/zxc/Downloads/sailfishimg
echo ${ANDROID_PRODUCT_OUT}

21f535548dcca4db4d247d91e30e462a.png
  • 刷机
adb reboot bootloader
 fastboot flashall -w

dbceea58f3efa0a2f667470d25258d7b.png
  • 开机

d1a267c28ad17bad69e0978f66af07de.png

编译内核

现在的内核版本是3.18,分支是g382d7256ce44

fcc582b1a3fc303d99bc3e9cc917b411.png
  • 选择内核 根据自己手机型号选择的

3506b600a9713fac99e770319ebb03d5.png

这里选择我们内核版本

269fc882da6791ad27302b8e8408b112.png

我们去切到分支 https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-marlin-3.18-android10

git clone https://android.googlesource.com/kernel/msm.git
cd msm
git checkout android-msm-marlin-3.18-pi-qpr1
  • 配置环境 安装依赖
sudo apt install bc #/bin/sh: 1: bc: not found
sudo apt-get install liblz4-tool #lz4c: not found

开始编译

source build/envsetup.sh
lunch aosp_sailfish-userdebug
#上边命令需要在源码文件夹进行操作。
export PATH=$PATH:/root/android/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin #这里是在源码里面
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-android-
export SUBARCH=arm64
make marlin_defconfig
make -j60

编译完成后,生成的文件在:

ls arch/arm64/boot/

fb0b4ef3f65259d92eb7ed83638a515a.png
  • 生成新的boot.img
export TARGET_PREBUILT_KERNEL=/root/android/msm/arch/arm64/boot/Image.lz4-dtb
rm out/target/product/sailfish/boot.img &&  make -j60 bootimage

img编译完成

f62bc4b420bb11ae4fdea6007f16f8d8.png

时间已经更新

79e0a602d6641864b22cf8bc901428ae.png
  • 刷入内核
adb reboot bootloader
fastboot flash boot boot.img

最后这个内核版本已经改变

3f9fc36c37bbe8adbd58cf03a23e185c.png

总结

这个刷机编译搞了两天,遇到坑有很多,最重要的还是编译速度。谷歌云可以申请100+的cpu,这样make起来很快。 源码编译的很多坑都是因为环境依赖问题,耐心点总会解决。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值