android atcmdfwd,在谷歌云上高速编译安卓AOSP ROM , 我的编程学习之路

目标

完成安卓10rom的aosp源码+驱动+内核编译、并完成刷机

手机sailfish

选择谷歌云的目的

在群里听到乌师傅说谷歌云便宜,cpu多,编译源码几分钟就够了,并且利用免费的300美金可以随便玩,那就动手试试了。

致谢

选择服务器

c6d71d1abf455bc4dd1fc748e7486f8b.png

26766d8e37811072a0899811f458bc4b.png

dc178eed3738ffd13b7767496b709b51.png

c8036510e6c28300e4296fd688b0705a.png

ffd5f0c176ac554db0e4a3d8fcf0cf29.png

e0b6b408f1e684db43d72f2e365dbdb5.png

最后创建就好了。

出现的问题

a9482c9f84f39dd326cad3f91a69dff6.png

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

c535ce8f28effa00d21292b0c81ac303.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: 这里版本不要选错,不然后面没办法成功刷机.

0943c1f832e8d31e05fbd13b4da7e2c1.png

repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r2 --depth=1

同步源码树

下面三行命令其中一行就行。

repo sync

repo sync -j8 #8个线程同步代码

nohup repo sync -j8 >sync.log 2>&1 & #推荐:后台去同步,ssh断开也没事。

断点续传脚本

#!/bin/bash

repo sync -j8

while [ $? -ne 0 ]

do

repo sync -j8

done

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

6fecd548635f6324cfe65b81fd5f1c2e.png

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

下载驱动

如果不刷机的话,可以忽略不看。

下载驱动地址

https://developers.google.com/android/drivers

Pixel机型且build id为QP1A.190711.020对应的驱动是下面两个文件

注意: 这里驱动版本不要选错,选错刷机就是板砖了。

92b75aeb7018bcee2cf41cac1318f190.png

wget 这个链接即可

下载并解压, 得到两个脚本文件

#tar xvf *.tgz

extract-google_devices-sailfish.sh

extract-qcom-sailfish.sh

41d6437fde0984381b7e9e136e5f0675.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 -y

apt install libxml2-utils -y

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib -y

sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 -y

sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 -y

sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev -y

sudo apt-get install git-core gnupg flex bison gperf build-essential -y

sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib -y

sudo apt-get install libc6-dev-i386 -y

sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev -y

sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4 -y

sudo apt-get install lib32z-dev ccache -y

初始化编译环境

source build/envsetup.sh

选择设备

选择自己的设备

lunch

3eacafedb9c4da8c27d4158e864b55f6.png

我这里是选择16

如果你这里提示如下图

5a05b6e972b2f7ebc38431a4a9b3aaa8.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跑满了

86b90c6ca607c13d9b18173b609f142c.png

等待编译完成,谷歌云这里100个cpu的话,只需要5分钟左右,泡面即可。

可以先去配置下载刷机包的依赖啦。

700f71fc5e130e74b856a55f73f2af03.png

编译完成。

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

遇到的错误

recipe for target 'run_soong_ui' failed*解决方案一

增加swap空间

增加办法:

增加4个G的交换空间

cd /

sudo dd if=/dev/zero of=/boot/swapfile bs=1024 count=4194304

sudo mkswap -v1 /boot/swapfile

sudo swapon /boot/swapfile

'make CONFIG_DEBUG_SECTION_MISMATCH=y'

使用

```

'make -j16 CONFIG_DEBUG_SECTION_MISMATCH=y' android

```

下载刷机包

打包刷机镜像

tar zcvf sailfish.tar.gz sailfish

打包文件如下图所示

5318128af884571e2adcba3c60521bae.png

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

超级快的下载文件服务器(web还不错的)

served支持断点续传和多线程下载

apt install npm nodejs-legacy

npm install -g served curl

served 8000 #在要下载的文件的目录下运行

621862b7eba2ecb528ceffa60a52938b.png

64780e4560bc3817962618c4237ba1ea.png

开始下载

5db7381dd5683ecddb30902d7fa5e85f.png

1e737fdc3aca3fa4168b35622dbeab3c.png

刷机

我这里是mac

设置ANDROID_PRODUCT_OUT路径,

export ANDROID_PRODUCT_OUT=/Users/zxc/Downloads/sailfishimg

echo ${ANDROID_PRODUCT_OUT}

a439ac9ca673e214c7b3f470486ccb48.png

刷机

adb reboot bootloader

fastboot flashall -w

```

017dc76996804b68699e5e3fdd2c6fd1.png

开机

74aec6ff2bf6bbfa19bab37f92b496a8.png

编译内核

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

66ec19a4bb47a32de0555c680a440188.png

选择内核

根据自己手机型号选择的

5134e9f1eca6badc6def6b724f0e83ee.png

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/

2858f68ab66b7a7808e805ec31558445.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编译完成

ae00a19c7e1c353ab3dd6209fdd7e96b.png

时间已经更新

6411d699273409d5884548fa8ee89da2.png

刷入内核

adb reboot bootloader

fastboot flash boot boot.img

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

edddaf7855498760e17d0958dad4b0fe.png

总结

这个刷机编译搞了两天,遇到坑有很多,最重要的还是编译速度。谷歌云可以申请100+的cpu,这样make起来很快。

源码编译的很多坑都是因为环境依赖问题,耐心点总会解决。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值