Ubuntu18.04编译AOSP10.0r41刷入Pixel3的步骤

背景
已经在aosp 7.1.1 nexus 5x上面实现了修改位置打卡,现在是想在pixel3中继续尝试。
如何选择代码
要选择有对应驱动版本的代码分支,如果没有标明,强行用其他版本的驱动来编译刷机不知道是否可行。
比如我选择的情况是这样的。
这里是查代码分支和驱动版本的网站。
为什么呢?因为我的网盘中的android10代码有这个分支,如果通过repo的方式下载,我网络太差了,容易失败,相信很多人放弃都会卡在这一步,下个代码都下不了。
我们之间下载某个分支的代码就行了,前提是这个分支刚好有驱动。
复制代号:qq3a.200805.001
去驱动的网页上面搜索:
在这里找到你的手机和对应代号的驱动。
android-10.0.0_r41 -> qq3a.200805.001 > pixel 3 binaries for android 10.0.0 (qq3a.200805.001)
关联起来,点击下载那2个文件就行了,先保存起来,到时候参与编译的。
编译环境
ubuntu 1804
安装好openjdk8
和下面一堆东西。
如果安装不了,请切换国内的源,快很多。(怎么切源,自己处理)
sudo apt-get install -y 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 -y tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install -y dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install -y git-core gnupg flex bison gperf build-essential
sudo apt-get install -y zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install -y libc6-dev-i386
sudo apt-get install -y lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install -y libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install -y lib32z1-dev ccache
sudo apt-get install -y bc python flex bison gperf libsdl-dev libesd0-dev build-essential zip curl
sudo apt-get install -y libssl-dev liblz4-tool
sudo apt-get install -y libesd-java libwxgtk3.0-dev squashfs-tools pngcrush schedtool libxml2
sudo apt-get install -y lzop schedtool lib32readline-dev libswitch-perl libssl-dev
创建虚拟机的时候硬盘如果空间足够,尽量给多点比如300g,我给了虚拟机200g。
编译好之后我的虚拟机可用空间剩余20g了。
虚拟机内存至少16g。如果编译过程中遇到oom,内存不够,可以关机了加点,编译的进度会保留的。
准备编译
进入源码根目录,解压驱动。
用7z解压驱动包得到sh,如果安装7z,自己解决。
tar zxvf google_devices-blueline-qq.3a.200805.001-466a3cb1.tgz
tar zxvf qcom-blueline-200805.001-a5511ad3.tgz
解压后得到2个sh文件
extract-开头的。
执行sh文件
./extract-
都是按空格继续,最后要手动输入i accept。两个文件都是一样的流程。
如果开始编译的时候遇到这样的错误
find vendor: permission denied
给驱动文件夹权限。
sudo chmod -r 777 vendor
到此开始编译。
源码根目录输入:
source build/envsetup.sh
回车
lunch
回车
我们的手机pixel3就选择blueline这个产品,userdebug模式刷机完成就打开adb调试,有su。
开始编译:
make -j4
回车
由于配置低就用4线程编译,如果你配置高,就配置多点
开始后你可能会遇到这个错误:
test github.com/google/blueprint/pathtools
failed: out/soong/.bootstrap/blueprint-pathtools/test/test.passed
out/soong/.bootstrap/bin/gotestrunner -p ./build/blueprint/pathtools -f out/soong/.bootstrap/blueprint-pathtools/test/test.passed -- out/soong/.bootstrap/blueprint-pathtools/test/test -test.short
--- fail: testglobescapes (0.02s)
--- fail: testglobescapes/**/* (0.02s)
glob_test.go:562: incorrect matches list:
glob_test.go:562: pattern: **/*
glob_test.go:562: got: []string{a/, b, a/a}
glob_test.go:562: expected: []string{*, **/, ?, a/, b, **/*, **/a, **/b/, **/b/b, a/a}
glob_test.go:562: incorrect deps list:
glob_test.go:562: pattern: **/*
glob_test.go:562: got: []string{., a}
glob_test.go:562: expected: []string{., **, **/b, a}
--- fail: testglobescapes/**/* (0.00s)
glob_test.go:562: incorrect matches list:
glob_test.go:562: pattern: **/\*
glob_test.go:562: got: []string(nil)
glob_test.go:562: expected: []string{*, **/*}
glob_test.go:562: incorrect deps list:
glob_test.go:562: pattern: **/\*
glob_test.go:562: got: []string{., a}
glob_test.go:562: expected: []string{., **, **/b, a}
--- fail: testglobescapes/**/* (0.00s)
glob_test.go incorrect matches list:
glob_test.go pattern: \*\*/*
glob_test.go got: []string(nil)
glob_test.go expected: []string{**/*, **/a, **/b/}
glob_test.go incorrect deps list:
glob_test.go pattern: \*\*/*
glob_test.go got: []string{.}
glob_test.go expected: []string{., **}
--- fail: testglobescapes/**/**/* (0.00s)
glob_test.go incorrect matches list:
glob_test.go pattern: \*\*/**/*
glob_test.go got: []string(nil)
glob_test.go expected: []string{**/*, **/a, **/b/, **/b/b}
glob_test.go incorrect deps list:
glob_test.go pattern: \*\*/**/*
glob_test.go got: []string{.}
glob_test.go expected: []string{., **, **/b}
fail
1813 soong bootstrap failed with: exit status 1
就是把源码根目录下build/blueprint/blueprints pathtools/globtest.go和fstest.go删除了保存就好了,找了几个小时的错误,就这个有用。
继续make -j4。
编译完成。
刷入手机pixel3中
注意条件:
1:pixel3解开bl锁
2:必须退出登录的所有google账号,后果自负(懂的都懂)
3:usb接口已经配置好访问权限。
开始刷机。
手机连接电脑,触发虚拟机选择连接的设备,选择虚拟机就行。
adb devices
检查手机状态,如果已经连接会显示
sfasdfadf devices
我在这里遇到问题,我的手机之前系统是android9,和现在编译的代码版本不一样,而且boot给我修改过的。
如果直接刷机,可能会遇到这样的错误。
fastboot flashall -w
--------------------------------------------
bootloader version...: b4s4-0.1-5613380
baseband version.....: g670-00011-190411-b-5457439
serial number........: xxxxxxxxxx
--------------------------------------------
checking 'product' okay [ 0.057s]
setting current slot to 'a' okay [ 0.372s]
sending 'boot_a' (65536 kb) okay [ 1.850s]
writing 'boot_a' okay [ 0.349s]
sending 'dtbo_a' (8192 kb) okay [ 0.320s]
writing 'dtbo_a' okay [ 0.095s]
sending 'vbmeta_a' (4 kb) okay [ 0.120s]
writing 'vbmeta_a' okay [ 0.066s]
rebooting into fastboot failed (remote: 'unsupported reboot option reboot-fastboot')
fastboot: error: command failed
然后手机就挂了
查了资料,说是引导和当前编译的系统版本的不一样。
下载完成之后,解压zip,然后手机连接电脑,手机开机和音量下一起按住,等待进入bootloader模式。
进入模式之后,电脑如果win,双击flash-all.bat,mac和linux执行./flash-all.sh就行。进入刷机,可能重启数次。
刷机完成之后,打开开发者模式,再次连接电脑,虚拟机连接手机。
进入源码根目录中,配置下fastboot。
cd out/host/linux-x86/bin
执行
sudo chown root:root fastboot && sudo chmod +s fastboot
输入你的虚拟机密码,回车。
回到根目录下
android_product_out=out/target/product/blueline
开始刷机
如果你的手机开机,先重启
adb reboot bootloader
重启到bootloader后
fastboot devices
看看手机连接情况
fastboot flashall -w
手机重启之后,虚拟机选择连接的手机设备就行了,重启多次。
这个时候手机会自动重启。


EIO版本RS485转以太网IO控制器 HP-EIO-088
预计未来几年数据中心交换机的支出将以4%的复合年增长率增长
工业机器人电动伺服系统常见问题汇总
如何提高末制导雷达的测角精度
曝光新一代iPhone的售价,这个售价让我们十分的惊喜
Ubuntu18.04编译AOSP10.0r41刷入Pixel3的步骤
台积电重新调配产能供给增加对全球汽车产业支持
村田高速数据通信用ESD保护装置解决方案
PolySB可阻止静脉导管中的血凝块形成
富士康在美买楼建LCD面板生产线的计划
在MAX-IDE中自动初始化数据段
华硕与EKWB宣布了一项合作伙伴关系
基于FPGA帧ECC逻辑端口描述应用
那么谁才是当下最为“聪明”的手机呢?
小米7传闻刘海屏设计 或搭载结构光人脸识别技术
复亚微电子推出创新直发器卷发器控制方案
时基集成电路组成长延时电路图
联发科g99什么水平 联发科g99和680差距大吗
人工智能普及带来的隐患 解决的主动权掌握在人类自己手中
扭矩传感器在机器人上是怎样应用的