首页
论坛
课程
招聘
在谷歌云上高速编译安卓AOSP ROM、驱动、内核并完成刷机
2020-7-19 13:51 4579

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

2020-7-19 13:51
4579

原贴地址

原贴地址

目标

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

致谢

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

选择服务器

file
file
file
file
file
file
最后创建就好了。

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

    安装工具

  • 更新&&配置
    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: 这里版本不要选错,不然后面没办法成功刷机.
    file
    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已经跑起来了。
    file
    htop的cpu使用率为0,则是已经同步完成了。

    下载驱动

    如果不刷机的话,可以忽略不看。
    下载驱动地址
    https://developers.google.com/android/drivers
    Pixel机型且build id为QP1A.190711.020对应的驱动是下面两个文件
    注意: 这里驱动版本不要选错,选错刷机就是板砖了。
    file
    wget 这个链接即可
    下载并解压, 得到两个脚本文件
    extract-google_devices-sailfish.sh
    extract-qcom-sailfish.sh
    
    file
    执行脚本后一个个确认,最后一步输入"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
    
    file
    我这里是选择16
    如果你这里提示如下图

    请在初始化编译环境哪里,执行如下命令
    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跑满了
    file
    等待编译完成,谷歌云这里100个cpu的话,只需要5分钟左右,泡面即可。
    可以先去配置下载刷机包的依赖啦。
    file
    编译完成。
    编译完成的系统镜像位于当前目录的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
    打包文件如下图所示
    file

  • 利用NodeJs的served来做文件服务器

  • 超级快的下载文件服务器(web还不错的)
    served支持断点续传和多线程下载
    apt install npm nodejs-legacy
    npm install -g served curl
    served 8000 #在要下载的文件的目录下运行
    
    file
    file
  • 开始下载
    file

    刷机

    我这里是mac
  • 设置ANDROID_PRODUCT_OUT路径,
    export ANDROID_PRODUCT_OUT=/Users/zxc/Downloads/sailfishimg
    echo ${ANDROID_PRODUCT_OUT}
    

file

  • 刷机
    adb reboot bootloader
    fastboot flashall -w
    

file

  • 开机
    file

编译内核

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

  • 选择内核
    根据自己手机型号选择的
    file
    ```

这里选择我们内核版本
file
我们去切到分支
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/

file

  • 生成新的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编译完成
    file
    时间已经更新
    file
  • 刷入内核
    adb reboot bootloader
    fastboot flash boot boot.img
    
    最后这个内核版本已经改变
    file

    总结

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

[看雪官方]《安卓高级研修班》线下班,网课(12月)班开始同步招生!!

最后于 2020-7-21 13:59 被mb_aoooaosd编辑 ,原因:
收藏
点赞1
打赏
分享
最新回复 (12)
雪    币: 5093
活跃值: 活跃值 (3229)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
浅笑不语 活跃值 2020-7-20 08:46
2
0
感谢分享
雪    币: 2385
活跃值: 活跃值 (90)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bjhrwzh 活跃值 2020-7-20 10:16
3
0
支持下,教程都比较详细
雪    币: 202
活跃值: 活跃值 (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pkiot 活跃值 2020-7-20 10:44
4
0
赞,谢谢
雪    币: 5201
活跃值: 活跃值 (172)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
NightGuard 活跃值 1 2020-7-20 17:07
5
0
好奇下,这么用300美金不知道可以编译几次
雪    币: 3456
活跃值: 活跃值 (267)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
smartdon 活跃值 1 2020-7-21 09:42
6
0
我有朋友在google云上编译aosp,然后被警告说存在攻击行为,后面号被封了
雪    币: 6432
活跃值: 活跃值 (231)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tDasm 活跃值 2020-7-21 09:51
7
0
你这是搭5元的士去买白菜,结果只便宜了5毛钱。
雪    币: 530
活跃值: 活跃值 (173)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
小调调 活跃值 2020-7-21 22:40
8
0
可以可以,总比本地编译来的爽,本地编译那个痛苦
雪    币: 45
活跃值: 活跃值 (114)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
endlif 活跃值 1 2020-7-21 23:55
9
0
smartdon 我有朋友在google云上编译aosp,然后被警告说存在攻击行为,后面号被封了
你那个朋友是你吧
雪    币: 3456
活跃值: 活跃值 (267)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
smartdon 活跃值 1 2020-7-22 08:27
10
0
endlif 你那个朋友是你吧[em_10]
无中生友
雪    币: 366
活跃值: 活跃值 (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xdnice 活跃值 2020-7-30 10:17
11
0
谢谢你的分享
雪    币: 16
活跃值: 活跃值 (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Healer月 活跃值 2020-7-30 11:57
12
0
学到了,不过有几个问题。
1. 10.0rom的aosp源码是不是适应所有10.0的支持aosp的Android机
2. 只要驱动+内核是否可以在谷歌找到。
3. 国内有没有下载对应源代码的镜像网页,毕竟翻墙下载太慢
雪    币: 216
活跃值: 活跃值 (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiaozhu头 活跃值 2020-7-30 13:20
13
0
这么编译一遍,价格也不便宜吧。 你这aosp的流量就挺多钱的了。。
游客
登录 | 注册 方可回帖
返回