闲话:
其实这篇文档本应该是新年前发出,记录当时操作的笔记也已经写好了,但马上就要度蜜月了,就拖到了现在。结果趁着新年一口气去了七个城市,还差点回不来,简直要了我的老命(放过我一个平底足吧!),对象要出片嘎嘎拍照,精力旺盛的我根本吃不消(女人在拍照这件事上就是无敌的,最后打败她的还得是她的经期)。好,接下来回归正题:
虫老当初发过一个安卓13的P6的eBPF环境搭建,但都过去了这么久了,版本都更新了,所以教练,我想在安卓15上试试,于是有了如下操作(包看包会)
1、同步P6设备内核分支
链接:6a5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6L8%4g2J5j5$3g2Q4x3X3g2S2L8X3c8J5L8$3W2V1i4K6u0W2j5$3!0E0i4K6u0r3k6r3!0U0M7#2)9J5c8Y4y4W2N6s2g2H3i4K6u0r3j5Y4g2A6L8r3c8Q4x3V1k6T1N6h3W2D9k6r3W2F1k6#2)9J5k6s2m8A6P5r3g2D9i4K6u0V1K9$3g2J5L8X3g2D9M7#2)9K6c8X3S2D9i4K6y4p5k6h3&6Q4x3U0y4H3K9i4S2W2L8q4)9J5k6r3N6C8K9g2)9J5k6r3E0W2M7X3&6W2L8q4)9J5k6r3u0J5j5h3&6U0K9r3g2K6i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1^5i4@1u0r3i4K6V1&6i4@1f1%4i4K6S2q4i4@1p5&6i4@1f1$3i4K6R3@1i4K6S2r3i4@1f1@1i4@1t1^5i4K6R3H3i4@1f1#2i4@1q4q4i4K6W2m8i4@1f1^5i4@1p5$3i4K6R3I4i4@1f1%4i4K6W2o6i4K6S2n7i4@1f1^5i4K6S2n7i4@1t1I4i4@1f1$3i4K6V1$3i4K6R3%4i4@1f1%4i4K6R3&6i4K6R3^5i4@1g2r3i4@1u0o6i4K6R3^5k6h3&6Q4c8e0g2Q4b7e0g2Q4b7V1c8Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0k6Q4z5f1u0Q4b7U0c8Q4c8e0k6Q4z5e0k6Q4b7U0m8Q4c8e0g2Q4b7V1k6Q4b7f1u0Q4c8f1k6Q4b7V1y4Q4z5p5y4@1M7Y4g2K6N6l9`.`. me),我当前的测试机位于安卓15的最后一个版本(BP1A.250505.005,内核为andorid14-6.1,属于版本只能上去不能下去的尴尬地位,在刷上去就完犊子的状态),所以当前要选用的分支就是android-gs-raviole-6.1-android16,

最初选用的是android-gs-raviole-6.1-android15-qpr2-beta,当初一看内核版本对,安卓版本也对,虽然是beta版本,但应该没啥问题,就它了。结果嘛,你们也都能猜出来了,刷入的时候根本就一直卡在谷歌logo上转圈圈(所以一定是它太爱我了)
2、修改内核配置选项
同步上述分支代码之后,打开/aosp/arch/arm64/configs 目录下的 gki_defconfig,添加如下配置选项,如下图所示:

关闭 /aosp/build.config.gki 中的配置检查,如下图所示

你看,要修改的东西很少吧,所以我为什么一直拖到现在才动手(懒狗不得好死)
3、编译
需要注意的是,该版本的也会有预制内核,而且并不向以前的5.10一样存放到本地(位于/prebuilts/boot-artifacts/kernel路径下),可以通过添加参数 BUILD_AOSP_KERNEL=1来强行编译本地内核,而是在编译的时候直接联网下载预制内核,这也就是我刷机中最卡手的点,所以如何让内核配置生效并强制生成本地内核就成了我最先要处理的问题。
查阅完诸多的资料后,发现了好心人的一篇《通过 KGDB 调试 Pixel 8 内核》笔记中存在破解之法,链接如下:070K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6^5j5h3W2J5P5g2)9J5k6h3W2G2i4K6u0r3j5i4u0@1K9h3y4D9k6i4y4Q4x3V1k6H3K9i4S2W2L8q4)9J5k6r3E0Y4k6r3u0Q4x3U0y4Q4x3X3c8K6k6i4c8@1K9h3&6Y4i4K6u0V1N6i4m8Q4x3X3c8C8k6$3c8T1i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1#2i4K6W2o6i4@1p5^5i4@1f1^5i4@1q4r3i4@1p5#2i4@1f1%4i4@1q4r3i4K6R3%4i4@1f1%4i4@1q4o6i4K6V1@1i4@1f1^5i4@1q4q4i4@1t1H3i4@1f1@1i4@1t1^5i4@1q4p5i4@1f1$3i4K6W2o6i4K6R3&6i4@1f1^5i4@1q4r3i4@1t1@1i4@1f1$3i4K6V1^5i4K6S2q4i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1#2i4@1p5$3i4K6R3J5i4@1f1@1i4@1t1^5i4K6S2n7i4@1f1#2i4K6W2n7i4@1u0q4i4@1f1$3i4K6R3&6i4K6R3H3i4@1f1%4i4@1p5@1i4@1u0m8i4@1g2r3i4@1u0o6i4K6W2m8

但使用--config=pixel_debug_common参数进行编译生成后内核时还是使用了联网下载的预制内核,所以可以查看该参数来源的private/devices/google/common/debug/debug.bazelrc文件,一看一下就破案了,需要使用的参数为--config=function_tracer,如下图所示:

所以最后的编译命令为:./build_raviole.sh --kernel_package=@//aosp --config=function_tracer --lto=thin,生成的文件放置在out/raviole/dist/目录下
4、刷机
需要注意的是这是设备内核而不是通用内核,需要刷入多个镜像文件,如下图安卓官网所示:

需要刷入这么的镜像文件,不仅是设备内核需要也是添加的配置选项破坏了KMI (CONFIG_DYNAMIC_FTRACE=y 和 CONFIG_FTRACE_SYSCALLS=y )
还需注意的是p7、8需要刷入的是五个镜像,而P6至需要刷入4个

还有一点是P6对BP11.241025.006版本前后处理vendor_boot的方式也是不同的(本文的版本比它高所以使用的是第一种方式),如下所示:

刷机命令如下(下述的镜像文件都在out/raviole/dist/下):
./fastboot oem disable-verification
./fastboot -w
./fastboot flash boot boot.img
./fastboot flash dtbo dtbo.img
./fastboot flash --dtb dtb.img vendor_boot:dlkm initramfs.img
./fastboot reboot fastboot
./fastboot flash vendor_dlkm vendor_dlkm.img
./fastboot reboot
还是闲话
剩下的集成KernelSU、APatch、sukisu ultra、REsukisu,这些root框架的事大家都会,所以我就不添油加醋了,还有一点要说,这两年波动频繁整个人上不上去,下又不想下去(老孔乙己了)导致VMP那块也鸽了,好得现在稍微稳定了些,看看新的一年会如何发展吧,再次,谢过观看的各位了(原本想提供刷机所需要的镜像文件,但太大了放不下,有需要直接联系我)。
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!