想在pixel4XL上,下载安装,Android 11
Android source(有三个版本,因为在factory 标志:11.0.0 (RP1A.200720.009, Sep 2020))
因此下载branch:
repo init -u https://android.googlesource.com/platform/manifest -b android-11.0.0_r1
kernel:
先没有下载,不修改kernel,使用系统自带的ko 文件
=======================================================================
Pixel4 xl手机机是google 做的手机,其factory image , kernel , android 已经发布,branch:android-10.0.0_r25,细分版本:QQ1D.200105.002
1,下载image,build android ,kernel .
2,使用工具遇到的问题总结
1,下载image,build android ,kernel
google android:
repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r25
repo sync -c --no-tags --no-clone-bundle -j4
google kernel:
repo init -u https://android.googlesource.com/kernel/manifest -b android-msm-coral-4.14-android10-c2f2
repo sync -c --no-tags --no-clone-bundle -j4
android-msm-coral-4.14-android10-c2f2---》已经验证,可以使用
实际待确认branch Pixel4 XL:
android-msm-coral-4.14-android10-qpr1
BUILD android:
上面的文件都进行了下载后,如果有pixel4 xl 手机,那个就可以fastboot 刷机了,factory image 是刷机的原始image .
1, 下载的google vendor drivers 放到下载google android的根目录
$tar xvzf google_devices-coral-qq1d.200105.002-8d8621e3.tgz -C ./
$extract-google_devices-coral.sh
这个就可以看到vendor 下有google_devices
$ source build/envsetup.sh
$lunch aosp_coral-userdebug
$make -j8
BUILD kernel:
kernel 部分,可以放在goog android 根目录kernel 下面,也可以单独放。我的kernel放在 android 跟目录
下载后kernel 文件夹list :
build build.config prebuilts prebuilts-master private
把上面说有的文件及文件夹copy到android/kernel/ 下,覆盖所有
cp kernel/out/android-msm-floral-4.14/dist/* device/google/coral-kernel
kernel build:
$cd android/kernel
$build/build.sh
成功的log :
..............
android/kernel/private/msm-google android/kernel
android/kernel
=============================================
Files copied to android/kernel/out/android-msm-floral-4.14/dist
Android build 完成后如何制作烧写
#!/bin/bash
echo "start copy build out imge"
cp pixel-source/out/target/product/coral/boot.img ./update/ -rf
cp pixel-source/out/target/product/coral/dtbo.img ./update/ -rf
cp pixel-source/out/target/product/coral/product.img ./update/ -rf
cp pixel-source/out/target/product/coral/super_empty.img ./update/ -rf
cp pixel-source/out/target/product/coral/system.img ./update/ -rf
cp pixel-source/out/target/product/coral/system_other.img ./update/ -rf
cp pixel-source/out/target/product/coral/vbmeta.img ./update/ -rf
cp pixel-source/out/target/product/coral/vbmeta_system.img ./update/ -rf
cp pixel-source/out/target/product/coral/vendor.img ./update/ -rf
echo "end copy build out imge"
把上面的android build out 目前下的img , copy 到一个目录
cd update
zip -r update.zip *
mv update.zip image-coral-qq1d.200105.002.zip
上面就做成了image-coral-qq1d.200105.002.zip 替换原来下载的google factoryimag, 进行烧写就可以了
2,使用工具遇到的问题总结
2.1下载 repo
Repo 是一款工具,可让您在 Android 环境中更轻松地使用 Git,首先需要安装 Git:
sudo apt-get install git
创建 bin,并加入 path:
mkdir ~/bin
PATH=~/bin:$PATH
下载 repo: repo 也可以放到别的目录,指定运行就可以
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
repo 可以执行:
chmod a+x ~/bin/repo
如何验证 repo 安装成功
输入命令repo, 提示下面表示成功:
error: repo is not installed. Use "repo init" to install it here.
下载源码
建立文件夹
mkdir android-10.0.0_r25
cd android-10.0.0_r25
初始化仓库,下载:
./repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r25
./repo sync -c --no-tags --no-clone-bundle -j4
2.2 下载遇到的问题
1:
error.GitError: manifests var:
*** 请告诉我你是谁。
运行
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
来设置您账号的缺省身份标识。
如果仅在本仓库设置身份标识,则省略 --global 参数。
没有设置身份,要使用 Gerrit 代码审核工具,您需要电子邮件地址:
git config --global user.email "xxx@163.com"
git config --global user.name "xxx"
2:
fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
fatal: error [Errno 101] Network is unreachable
因为 repo 运行过程中会尝试访问官方的 git 源更新自己,如果想使用 tuna 的镜像源进行更新,将如下内容复制到你的~/.bashrc里,然后重启终端模拟器。
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
3:
curl: (22) The requested URL returned error: 404 Not Found
Server does not provide clone.bundle; ignoring.
为什么会出现此种 log ?
在通过 Git 的 HTTP 协议下载最新数据之前,Repo 尝试下载预先打包的捆绑文件以引导每个 git。
原文:Repo attempts to download a prepackaged bundle file to bootstrap each git prior to downloading the most recent data via Git’s HTTP protocol.
如果捆绑文件不可用(如本例所示),Repo 将忽略它并继续进行,换句话说,不要注意这一点。
原文:If a bundle file isn’t available (like in this case), Repo will ignore it and proceed anyway. In other words, don’t pay any attention to this.
最后,如何取消 download clone.bundle ?
只需要 在repo 添加一个参数 –no-clone-bundle,如下:
可通过 repo -h 获得参数 –no-clone-bundle 的说明
repo init --no-clone-bundle
repo sync --no-clone-bundle
图片.png
图片.png
下载方式可以通过下面方式,也可以在google 官网下载
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r25
提示以下,即 init 成功:
repo has been initialized .......
图片.png
4:
如果没有指定版本,如何知道下载好的 Android是什么版本?
找到build/make/core/version_defaults.mk文件打开,搜索PLATFORM_SDK_VERSION,找到了 PLATFORM_SDK_VERSION := 29,从 SDK 版本可以知道 版本是 10.0
5:
在下载时候,我没有使用-f
repo sync -c -f --no-tags --no-clone-bundle -j4
-c 或者--current-branch表示只拉取当前分支代码,坑爹啊,我在init指定了分支,同步的时候,你却悄悄给我拉些没用的。
--no-tags 不拉取tags,tag虽然不大,但架不住多
--no-clone-bundle 不使用clone.bundle,clone.bundle是git bundle一样的打包文件,使用bundle文件可以做cdn下载的分流,cdn听上去不错,但是如果cdn到google的服务器,或者clone.bundle本来就占空间,不是很划算,所以不使用clone.bundle
-f 如果sync失败,继续同步(想想当年LZ写了一个while循环解决同步失败终止问题的)
--force-sync 如果文件目录有差异,强制覆盖掉
-j 开启多少个job , 上面开启4个, 这个跟下载服务器性能有关
6:
repo sync -d
上面指令可以将所有git 仓库的HEAD重置为manifest文件的指定版本。同时,处于暂存或者修改的目录变化不会被重置。
当然,-d 重置版本的妙用就是回滚,结合以下命令,可以让被指飞的git仓库门,全部恢复成干净的代码。
repo sync -d
repo forall -c 'git reset --hard' # Remove all working directory (and staged) changes.
repo forall -c 'git clean -f -d' # Clean untracked files
图片.png
图片.png
图片.png
图片.png
OTHER:
1.repo forall命令
# repo forall -help
# repo forall -c: 此命令遍历所有的git仓库,并在每个仓库执行-c所指定的命令,被执行的命令不限于git命令,而是任何被系统支持的命令,比如:ls, git log, git status等
2.repo forall -c使用
# 切换分支
# repo forall -c git checkout dev_test
# 删除分支
# repo forall -c git branch -D dev_test
# 丢弃分支
# repo forall -c git git reset --hard 提交ID(或最原始:HEAD)
# repo forall -r framework/base/core -c git reset --hard 提交ID(或最原始HEAD)
图片.png