zhaoboy666 发表于 2020-7-19 14:44:59

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




目标[*]完成安卓10rom的aosp源码+驱动+内核编译、并完成刷机[*]手机sailfish[*]选择谷歌云的目的
在群里听到乌师傅说谷歌云便宜,cpu多,编译源码几分钟就够了,并且利用免费的300美金可以随便玩,那就动手试试了。致谢
肉丝大佬文章
https://www.anquanke.com/post/id/199898#h3-8
乌师傅
谷歌云和驱动的建议
众多翻阅过的博客文章
选择服务器
http://132.232.11.246/wp-content/uploads/2020/07/2020071810400136.pnghttp://132.232.11.246/wp-content/uploads/2020/07/2020071810412041.pnghttp://132.232.11.246/wp-content/uploads/2020/07/2020071810404633.pnghttp://132.232.11.246/wp-content/uploads/2020/07/2020071810415773.pnghttp://132.232.11.246/wp-content/uploads/2020/07/2020071810431292.pnghttp://132.232.11.246/wp-content/uploads/2020/07/2020071810424913.png最后创建就好了。
[*]出现的问题http://132.232.11.246/wp-content/uploads/2020/07/2020071810443644.png上边这两个问题都是由于配额不够,点击申请配额,然后下一步就,提交申请就可以了,等他们配置。http://132.232.11.246/wp-content/uploads/2020/07/2020071810481064.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[*]安装gitsudo apt-get install git -y
git config --global user.email "your mail"git config --global user.name "your name"[*]安装repo工具mkdir ~/bin
PATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo[*]装个看CPU、内存、缓存的htopapt 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: 这里版本不要选错,不然后面没办法成功刷机.http://132.232.11.246/wp-content/uploads/2020/07/2020071814545370.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已经跑起来了。http://132.232.11.246/wp-content/uploads/2020/07/2020071810575769.pnghtop的cpu使用率为0,则是已经同步完成了。
下载驱动
如果不刷机的话,可以忽略不看。
下载驱动地址
https://developers.google.com/android/drivers
Pixel机型且build id为QP1A.190711.020对应的驱动是下面两个文件
注意: 这里驱动版本不要选错,选错刷机就是板砖了。http://132.232.11.246/wp-content/uploads/2020/07/2020071814575533.pngwget 这个链接即可
下载并解压, 得到两个脚本文件
extract-google_devices-sailfish.sh
extract-qcom-sailfish.sh
http://132.232.11.246/wp-content/uploads/2020/07/2020071814584458.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
            │   ├── [email protected]
            │   └── [email protected]
            ├── pktlogconf
            ├── qcrilhook.jar
            ├── ROW_profiles.xml
            └── VZW_profiles.xml[*]删除之前编译生成的文件(第一次编译忽略)make clobber编译AOSP源码
编译master源码需要安装OpenJDK 8,注意不是SUN JDK1.8,否则编译会报错
[*]安装OpenJDK 8sudo 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
http://132.232.11.246/wp-content/uploads/2020/07/2020071813554021.png我这里是选择16
如果你这里提示如下图http://132.232.11.246/wp-content/uploads/2020/07/2020071810152613.png请在初始化编译环境哪里,执行如下命令
cd buildsource benvsetup.sh
lunch #选择自己的设备cd .. #进入源码文件夹[*]开始编译export LC_ALL=C #recipe for target 'run_soong_ui' failed 解决方案二#下面两行命令其中一行就行make -j60 #这个60是cpu核心个数*2,我这是30个cpunohup make -j 60 >>123.log 2>&1 & #推荐这个命令,后台运行。
cpu跑满了http://132.232.11.246/wp-content/uploads/2020/07/2020071812005574.png等待编译完成,谷歌云这里100个cpu的话,只需要5分钟左右,泡面即可。
可以先去配置下载刷机包的依赖啦。http://132.232.11.246/wp-content/uploads/2020/07/2020071813284684.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打包文件如下图所示http://132.232.11.246/wp-content/uploads/2020/07/2020071901515351.png
[*]
利用NodeJs的served来做文件服务器
[*]
超级快的下载文件服务器(web还不错的)
served支持断点续传和多线程下载
apt install npm nodejs-legacy
npm install -g served curl
served 8000 #在要下载的文件的目录下运行
http://132.232.11.246/wp-content/uploads/2020/07/2020071813055123.pnghttp://132.232.11.246/wp-content/uploads/2020/07/2020071813102953.png
[*]开始下载http://132.232.11.246/wp-content/uploads/2020/07/2020071813430317.pnghttp://132.232.11.246/wp-content/uploads/2020/07/2020071813422097.png刷机
我这里是mac
[*]设置ANDROID_PRODUCT_OUT路径,export ANDROID_PRODUCT_OUT=/Users/zxc/Downloads/sailfishimgecho ${ANDROID_PRODUCT_OUT}http://132.232.11.246/wp-content/uploads/2020/07/2020071901554913.pngfile[*]刷机adb reboot bootloader
 fastboot flashall -whttp://132.232.11.246/wp-content/uploads/2020/07/2020071901564837.pngfile[*]开机http://132.232.11.246/wp-content/uploads/2020/07/2020071901572893.png编译内核
现在的内核版本是3.18,分支是g382d7256ce44http://132.232.11.246/wp-content/uploads/2020/07/2020071902001931.png
[*]选择内核
根据自己手机型号选择的http://132.232.11.246/wp-content/uploads/2020/07/2020071902064835.png这里选择我们内核版本http://132.232.11.246/wp-content/uploads/2020/07/2020071904580435.png我们去切到分支
https://android.googlesource.com/kernel/msm/+/refs/heads/android-msm-marlin-3.18-android10git clone https://android.googlesource.com/kernel/msm.gitcd msm
git checkout android-msm-marlin-3.18-pi-qpr1[*]配置环境
安装依赖sudo apt install bc #/bin/sh: 1: bc: not foundsudo 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=arm64export CROSS_COMPILE=aarch64-linux-android-export SUBARCH=arm64
make marlin_defconfig
make -j60
编译完成后,生成的文件在:
ls arch/arm64/boot/http://132.232.11.246/wp-content/uploads/2020/07/2020071905113656.pngfile[*]生成新的boot.imgexport TARGET_PREBUILT_KERNEL=/root/android/msm/arch/arm64/boot/Image.lz4-dtb
rm out/target/product/sailfish/boot.img &&  make -j60 bootimage
img编译完成http://132.232.11.246/wp-content/uploads/2020/07/2020071905194518.png时间已经更新http://132.232.11.246/wp-content/uploads/2020/07/2020071905222426.png
[*]刷入内核adb reboot bootloader
fastboot flash boot boot.img
最后这个内核版本已经改变http://132.232.11.246/wp-content/uploads/2020/07/2020071905271016.png
总结
这个刷机编译搞了两天,遇到坑有很多,最重要的还是编译速度。谷歌云可以申请100+的cpu,这样make起来很快。
源码编译的很多坑都是因为环境依赖问题,耐心点总会解决。

花儿谢了 发表于 2020-7-19 18:25:48

牛b

thunder 发表于 2020-7-20 09:35:29

牛b

loco 发表于 2020-7-21 17:55:14

牛b,白嫖谷歌云的100核CPU编译可还行

cao4coolman 发表于 2021-1-20 00:54:25

牛b,白嫖谷歌云的100核CPU编译可还行
-------------------------------------
作者: zhaoboy666
来源: 夜幕爬虫安全论坛
原文链接: http://bbs.nightteam.cn/thread-610.htm
版权声明: 若无额外声明,本帖为作者原创帖,转载请附上帖子链接!
页: [1]
查看完整版本: 在谷歌云上高速编译安卓AOSP ROM、驱动、内核并完成刷机