Jimmy Chen

A Programmer

(原创)使用AOSP源码为Google Pixel编译系统镜像

源码准备

  要想使用AOSP的源码,为Google Pixel编译镜像,第一步当然是下载AOSP的源码啦(当然开发环境得先搭建好,具体搭建请自行百度),问题是AOSP网站我们是上不去的,就更不用说下载源码了,不过好在我们有清华大学镜像源(https://mirrors.tuna.tsinghua.edu.cn/ ), 具体下载可以参考上面的网址,当然也可以按照我的博客来进行操作。
– 首先是下载repo工具,请下载,并执行chmod a+x repo,为repo添加可执行权限

  • 通过mkdir aosp创建文件夹,将repo工具放到soap文件夹下

  • 查看下面的tag截图,我们下载Branch为android-8.1.0_r10的源码

    《(原创)使用AOSP源码为Google Pixel编译系统镜像》

  • 首先执行export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/',然后在通过./repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r10完成初始化

  • 接下来repo sync就可以了,但是因为考虑到网络的原因,sync的过程中可能会意外断开,我们不可能一直守着看的,所以通过下面的脚本来完成代码的下载。将下面的内容保存为start_repo.sh,然后该脚本执行权限chmod a+x start_repo.sh,然后就是等待了,推荐网上睡觉扔在那里下载,第二天就可以用了

  源码下载完毕了,但是要想适配Google Pixel手机,还需要下载硬件支持包,下载地址如下:

  • Google支持包:链接: https://pan.baidu.com/s/1mjbQW6O 密码: tv98
  • qcom支持包:链接: https://pan.baidu.com/s/1ggNyp95 密码: 5pg1夹

下载完上面两个压缩包后,解压到aosp所在的文件夹,得到两个shell脚本,分别是extract-google_devices-sailfish.sh 和 extract-qcom-sailfish.sh,分别执行这两个shell脚本,按回车阅读条款,需要注意在最后需要输入 I ACCEPT后才会解压相应的文件。解压后会在更目录下多出一个vendor文件里面有google_devices和qcom文件夹就代表已经解压成功了。

编译

  既然源码已经有了,那么接下来就是编译了,编译就相对简单多了:

  • source build/envsetup.sh
  • 然后执行lunch,选择aosp_sailfish-userdebug
  • 最后执行 make -j4 2>&1 | tee build.log

userdebug、user和eng版本的区别请自行百度了解啦,这里博主就不展开了。

因为上面-j4表示使用4个线程进行编译,如果CPU支持的线程比较多,可以进行相应的修改,接下来就是漫长的等待了,CPU为I7 4790,使用8个线程进行编译,需要两个小时左右,编译完成后相应的镜像会在out/target/product/sailfish 路径下。

刷机

  为了保险期间,建议更新bootloader到相应的版本,如果使用的是r10的源码,可以到:链接: https://pan.baidu.com/s/1smLHWpZ 密码: gmb6 这里下载该版本的bootloader和radio文件。

  刷机前,需要特别注意在setting->User & accounts中将Google account remove掉,否则刷完机后会要求登录刷机前的Google账户才允许进入launcher界面。这一点是需要特别注意的。

将下载到的文件解压到任意目录,进入到该目录,将已经开机的手机连到电脑中,执行:

  • adb reboot bootloader,如果提示adb或者下面的fastboot没有找到的话,请检查adb或者fastboot的路径有没有包含到环境变量中,如果adb和fastboot都配置好了,但是无论如何都提示没有授权,可以选择执行sudo -i,使用root用户来刷机,当然切换到root用户后,也需要将adb和fastboot的路径配置到root用户的环境变量中
  • 经过上面一步后,手机现在进入到fastboot模式了,然后执行./flash-base.sh即可更行bootloader和radio了
  • 然后将路径切换到out/target/product/sailfish下,下面我们刷入其他镜像文件
    • 首先是boot.img,执行fastboot flash boot_a boot.imgfastboot flash boot_b boot.img
    • 接下来是system.img,执行fastboot flash system system.imgfastboot flash system_b system_other.img
    • 最后是vendor.img,执行fastboot flash vendor vendor.img
    • 当然如果你有自己定义,例如破解电信4G的modem,可以执行fastboot flash modem modem.img
  • 最后通过fastboot reboot,重启手机

到这里就完成刷机过程了,这个过程中因为没有执行双清,所以可能重启后会有一些其他的问题,例如下面的图片,其实也可以等到重启后出问题了,再到setting中进行factory reset解决。

《(原创)使用AOSP源码为Google Pixel编译系统镜像》

下面欣赏一下刷完机后的Home Screen吧

《(原创)使用AOSP源码为Google Pixel编译系统镜像》

也许有的朋友可能会感觉到奇怪,为什么我的截图里面还会有Google套件,例如play store和chrome等,这就是因为前面我没有执行双清的缘故,所以会有这些APP的图标,但是其实就算有图标,其实也是用不了的,点击就会删退,所以还是老老实实在刷机的时候执行fastboot erase cachefastboot erase userdata吧,如果没有执行,那开机后到setting进行factory reset也行。

编译内核

  通过上面的方法编译的镜像中使用的内核是事先已经编译好了的,如果想修改内核相关内容就需要自行下载内核源码进行编译了。我们也是通过清华大学镜像源进行下载啦。进入到源码根目录下的kernel文件夹中执行git clone https://aosp.tuna.tsinghua.edu.cn/kernel/msm,就可以下载到相应msm的内核源码了,进入msm文件夹中,通过git checkout remotes/origin/android-msm-marlin-3.18-oreo-mr1-preview2获取到源码

  下面我们修改内核目录下的Makefile文件,修改内容如下:

然后记得在aosp目录上进行source,lunch操作,否则会导致找不到交叉编译链的。首先执行make marlin_defconfig,得到.config文件后,直接执行make -j4即可。

在编译过程中出现如下错误:

显然是lz4c没有找到,应该就是有依赖工具没有安装,通过sudo apt-get install liblz4-tool 安装即可,继续make -j4编译,最后得到arch/arm64/boot/Image.lz4-dtb

将上面编译得到的Image.lz4-deb文件复制到aosp源码目录下的device/google/marlin-kernel路径即可,然后到aosp源码根目录下执行make bootimage。最后按照前面所写的内容,使用fastboot刷写boot_a和boot_b分区即可。如下截图可以看到kernel是使用jimmy@jimmy的机器编译的

《(原创)使用AOSP源码为Google Pixel编译系统镜像》

OK,基本的编译内容就到这里了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注