android 4.4.2 aosp,[原创]实操篇- pixel 2 刷8.0.0/8.1.0 AOSP +4.4 Kernel (重点解决刷完触屏失灵问题)...

前面这些版本源码资源以及vendor资源大家应该刷过机的都知道怎么去找和下载,网上也有很多比较详细的教程,不赘述。本文重点对整个编译脚本进行注解,以及解决一部分人遇到的触屏失灵问题。

1.AOSP对应版本:android-8.0.0_r34

2.kernel对应版本:remotes/origin/android-msm-wahoo-4.4-oreo-dr1

3.image+bootloader版本:walleye-opd3.170816.023-factory-f269631e

4.vendor:Pixel 2 binaries for Android 8.0.0 (OPD3.170816.023)

5.刷机脚本:

6.刷机脚本重的一些关键知识Image.lz4-dtb

Image.lz4-dtb是内核的设备树描述文件,通过此文件编译内核时不会编译冗余的代码,所以要编译某个版本的内核时,应该先将生产的设备树文件拷贝到内核编译前查询的目录:

Image.lz4-dtb是Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pain in the ass”,引发ARM Linux社区的地震,随后ARM社区进行了一系列的重大修正。在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data。读者有兴趣可以统计下常见的s3c2410、s3c6410等板级目录,代码量在数万行。

社区必须改变这种局面,于是PowerPC等其他体系架构下已经使用的Flattened Device Tree(FDT)进入ARM社区的视野。Device Tree是一种描述硬件的数据结构,它起源于 OpenFirmware (OF)。在Linux 2.6中,ARM架构的板极硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx,采用Device Tree后,许多硬件的细节可以直接透过它传递给Linux,而不再需要在kernel中进行大量的冗余编码。

可能出现的问题(我自己遇到的问题,坑的一头雾水那种)

如果每次更换内核版本的时候不能直接在msm下git checkoout 版本来切换,因为会有很多已经生成的文件在下一次编译的时候不会再进行编译,会出错,

一种比较保险的方式就是,git checkout .丢弃本地没有提交的所有修改,返回到最初版本。

此外,另一种最保险的方法是重新

然后checkout到干净的分支,再进行编译。优点是之前一些找不到原因的问题可能会在下次正常操作后不再出现,但是缺点是浪费时间。

建议

脚本中编译内核部分没有对编译内核失败进行报错,因此首次编译内核生成dtb文件的时候最好手动编译。或者单独写个脚本编译;

7.触屏失灵原因及解决办法:本文重点解决的大家比较关心的安装大多数网上方法刷完机后触屏失灵问题:

pixel 2的刷机和别的google系列的手机差别并不大,不过值得注意的是如果只替换boot.img,会导致有几个htc驱动的version magic和内核的version magic不一致,从而使得这几个驱动在boot时,不能被insmod,所以刷完之后就会有触摸屏幕没有反应的状况。所以,在pixel 2刷机之前,首先要对内核做一些修改,去掉这个version magic的校验机制:

方法一,去除内核校验函数:1.在walleye_defconfig里面,注释掉:

2.在kernel/module.c文件里的check_modinfo函数,注释掉返回失败的选项:

方法二,改掉自身编译的内核的version magic, 使得和原本userdebug 版本相匹配:

1.在include/generated/utsrelease.h 里将UTS_RELEASE替换成自己的userdebug版本的uts_release号

(可通过uname -a查看)

2.在scripts/setlocalversion里,在scm_version函数里加上:

3.在module.c里,注释掉check_verion函数:

上述两种方法都可以解决我们要修改的的目标不是htc的那几个驱动,如果目标是那几个驱动怎么办呢?

最好的办法是能够自己解包然后打包vendor.img,然后把自己编译出来的htc驱动包进去,这是完美的方案,但是由于解包打包vendor.img没有现成的方案也就不这样做了(哈哈哈哈哈,喷我吧)。好在,我们还可以自己insmod:

这种方法就不要更改内核所有的签名版本config之类的,就要它不能insmod原来的驱动。然后我们把自己编译的驱动adb push 进去,再手动insmod,注意下顺序:

最后:

我自己在实践中发现pixel 2刷其他版本时也遇到类似的问题,同样的方式解决就行。nexus 6p不存在这样的问题。

最后于 2020-12-15 16:30

被koozxcv编辑

,原因:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值