type
status
date
slug
summary
tags
category
icon
password
首先参考Pixel6Pro安卓内核源码编译这篇文章,确保能编译出内核。此文章作为后续。
注意目前我所编译的5.10.189内核 该驱动大部分功能都不可用!简单的修复见这篇文章.
1.从GitHub下载源码
下载后移动到aosp文件夹内的driver目录中
2.适配
首先设置一个比较大的swap分区
第一步:禁用/swapfile
sudo swapoff /swapfile
第二步:修改swap 空间的大小(16G)
sudo dd if=/dev/zero of=/swapfile bs=2G count=8
第三步:设置文件为swap file类型
sudo mkswap /swapfile
第四步:启用swap.img
sudo swapon /swapfile
在
aosp/drivers/Makefile
中最后添加下面的两行,-m代表以内核模块方式编译。原因是查看rwProcMem33目录内的makefile会发现,它默认就是-m作为模块编译的。原因是作者在最新版本里用到了__this_module
__this_module是一个struct module变量,代表当前模块,跟current有几分相似,只有-m作为模块的才能使用。

添加动态加载支持,默认是开启的,检查即可

• 在编译rwProcMem33中硬件断点的内核模块时,由于内核编译时会将警告视为错误导致编译内核停止,但我们不希望修改整个makefile忽略所有警告导致的错误,因为上游给我们的代码肯定是干净的。所以我们要修改
aosp/drivers/rwProcMem33/hwBreakpointProcModule/hwBreakpointProc/Makefile
,增添一个ccflags-y := -w
,这参数仅对当前模块有效,来忽视这一个模块的warning
。加上一个-w
参数修改
aosp/drivers/rwProcMem33/ver_control.h
,启用页表计算物理地址,并且选择内核5.10.43
前者默认开启,后者根据我们在谷歌官网看到的版本号



修改硬件断点驱动的版本控制文件
rwProcMem33/hwBreakpointProcModule/hwBreakpointProc/ver_control.h
,添加当前版本号。
3.编译
直接
BUILD_AOSP_KERNEL=1 ./build_slider.sh
开始编译,发现产生两个报错。有报错
- 文件:
aosp/drivers/rwProcMem33/phy_mem.h
- 第 175 行和第 176 行需要修复。
两个print的第二个参数都是错的,疑似多写了pgd_val

按照原来的命令编译,报错module list

执行报错内的命令,再来一次

abi验证报错。
更新symbol_list
无论你是哪一个分支 都要按照下方教程更新一次
按照官网更新abi的指令,执行
具体参考https://source.android.com/docs/core/architecture/kernel/howto-abi-monitor#update-abi
跟安卓版本没关系,而在于是否使用
build.sh
编译内核,显然我们是用的build_slider.sh,所以在这里就使用以上的命令。如果是新版本的,用的kleaf编译的,没使用.sh,则使用
速度非常 非常之慢 很久都在这 等候。这里需要一个逆天之大的swap分区不然会kill。实测17G物理内存+2G swap会kill。实测17G+20G能编译过。

会两次出现LTO vmlinux.o。一直等到第二次编译完成。


需要重新commit一下,因为有两个文件被修改了。
commit后,使用一开始的编译命令再执行一
随后可以再运行一次update脚本

这个编译脚本的名称应该根据你本来使用的sh来。我一开始用的是build_slider,并且我修改的内容都在aosp文件夹内,所以我也运行update_symbol_list_slider_aosp.sh即可。

运行完这个脚本,应该会提示使用这一条命令进行内核编译
这是比编译abi要快的多的多的方式。
随后输出文件将在out/mixed/dist中,即使有报错也会输出boot.img和驱动KO文件。

和内核.img输出的同一个目录有俩KO,分别是hwBreakpointProc1.ko和rwProcMem37.ko,这俩我们要push到手机

4.上手
两个ko文件push到手机,并且刷入magisk修补后的新内核之后,insmod直接加载

接下来要编译一下测试工具。先编译HWBPClient,运行在电脑上直接编译就可以

接下来编译Server。Server的编译需要NDK,用Android Studio安装。
在SDK manager→ SDK Tools里面

装好后设置环境变量

在Server项目目录下jni文件夹内执行编译命令

编译后的文件在
rwProcMem33\hwBreakpointProcModule\testHwBpServer\libs
中,选择对应手机架构的ELF,push
到手机中运行即可
注意拷贝到/data/local/tmp下,chmod 777运行,如果在sdcard运行会报错权限不足。手动输入手机的ip和默认端口3370连接


- Author:Lynnette177
- URL:https://next.lynnette.uk/article/rwProcMem_on_Pixel
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts