Pixel 6Pro Kernel编译整合KernelSU

前期准备

什么是KernelSU

来源: https://kernelsu.org/zh_CN/guide/what-is-kernelsu.html

KernelSU 的主要特点是它是基于内核的。 KernelSU 运行在内核空间, 所以它可以提供我们以前从未有过的内核接口。 例如,我们可以在内核模式下为任何进程添加硬件断点;我们可以在任何进程的物理内存中访问,而无人知晓;我们可以在内核空间拦截任何系统调用; 等等。

KernelSU 还提供了一个基于 overlayfs 的模块系统,允许您加载自定义插件到系统中。它还提供了一种修改 /system 分区中文件的机制。

判断是否支持

下载对应的KernelSu
https://github.com/tiann/KernelSU/releases

安装KernelSu apk

查看设备是否支持,显示”未安装“,表示当前机器支持 KernelSU

查看设备内核版本,从设备的内核版本来看,设备的KMI ( 7__Android杂项)版本是 5.10-android13-4,相同的KMI的内核版本是兼容的, 在uname -a 查看的信息跟kernelSU里的不一致,不理解为啥会这样。

raven:/ $ uname -a
Linux localhost 5.10.107-android13-4-00020-g02b5dfab573c-ab9358130 #1 SMP PREEMPT Thu Dec 1 18:28:18 UTC 2022 aarch64 Toybox

commitID : 02b5dfab573c

选择GKI版本

https://source.android.com/docs/core/architecture/kernel/gki-android13-5_10-release-builds?hl=zh-cn

下载boot-5.10-lz4.img,然后用010 查看,可以看到对应的内核版本,跟我们的系统版本是一致的。

找到manifest_xxx.xml

然后点击对应的kernel,可以看到对应GKI 构建的目录。

往下找,找到对应的manifest_xxx.xml,并下载。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<manifest>
<remote name="aosp" fetch="https://android.googlesource.com/" review="https://android.googlesource.com/"/>
<default upstream="master-kernel-build-2022" dest-branch="master-kernel-build-2022" remote="aosp" sync-j="4"/>
<superproject name="kernel/superproject" remote="aosp" revision="common-android13-5.10-2022-10"/>
<project path="build/kernel" name="kernel/build" revision="28bec492db207f403d08d88886f86dd1e2984089">
<linkfile dest="tools/bazel" src="kleaf/bazel.sh"/>
<linkfile dest="WORKSPACE" src="kleaf/bazel.WORKSPACE"/>
<linkfile dest="build/build.sh" src="build.sh"/>
<linkfile dest="build/build_abi.sh" src="build_abi.sh"/>
<linkfile dest="build/build_test.sh" src="build_test.sh"/>
<linkfile dest="build/build_utils.sh" src="build_utils.sh"/>
<linkfile dest="build/config.sh" src="config.sh"/>
<linkfile dest="build/envsetup.sh" src="envsetup.sh"/>
<linkfile dest="build/_setup_env.sh" src="_setup_env.sh"/>
<linkfile dest="build/multi-switcher.sh" src="multi-switcher.sh"/>
<linkfile dest="build/abi" src="abi"/>
<linkfile dest="build/static_analysis" src="static_analysis"/>
</project>
<project path="hikey-modules" name="kernel/hikey-modules" revision="8864304543d16b95c9c268e4e156601ef9b499e7" upstream="android13-5.10" dest-branch="android13-5.10"/>
<project path="common" name="kernel/common" revision="19424168db55715a7ba3f00505ac9b9f19fd3705" upstream="android13-5.10-2022-10" dest-branch="android13-5.10-2022-10">
<linkfile dest=".source_date_epoch_dir" src="."/>
</project>
<project path="kernel/tests" name="kernel/tests" revision="42a77670ce44d6e19a6fbb8b93fa0b06f009a3a4"/>
<project path="kernel/configs" name="kernel/configs" revision="b3cc2bc03dab303c54a9ce1f709f8ee315eb311d"/>
<project path="common-modules/virtual-device" name="kernel/common-modules/virtual-device" revision="7d4ffda377b256bdc3a447018b051121772883df" upstream="android13-5.10" dest-branch="android13-5.10"/>
<project path="prebuilts/clang/host/linux-x86" name="platform/prebuilts/clang/host/linux-x86" clone-depth="1" revision="4bb6424cb1615af408ae80871131f4da8c4ddadf"/>
<project path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8" clone-depth="1" revision="007101a451907c5369db5002ddf7b14dcefb7864"/>
<project path="prebuilts/boot-artifacts" name="platform/prebuilts/boot-artifacts" revision="45d30d07ad284018481ebb419b5d01b5de72ed02"/>
<project path="prebuilts/build-tools" name="platform/prebuilts/build-tools" clone-depth="1" revision="f6813860e16b2fa1461a15e7b8a3127dfdee021a"/>
<project path="prebuilts/kernel-build-tools" name="kernel/prebuilts/build-tools" clone-depth="1" revision="67705de48752ea5c9d7d679c737f6ebbc8ba7348"/>
<project path="tools/mkbootimg" name="platform/system/tools/mkbootimg" revision="2208a03d874255af1e4eaf6cf7c156fe1dc98943"/>
<project path="prebuilts/bazel/linux-x86_64" name="platform/prebuilts/bazel/linux-x86_64" clone-depth="1" revision="6162318e6458db65f94eed6671e302c3e894b1ac"/>
<project path="prebuilts/jdk/jdk11" name="platform/prebuilts/jdk/jdk11" clone-depth="1" revision="aee26c8cd89b9abb428f676caba168699cd8662f"/>
<project path="prebuilts/ndk-r23" name="toolchain/prebuilts/ndk/r23" clone-depth="1" revision="93532f3052c14fbb337ff57d5732128dc7481ee6"/>
<project path="external/bazel-skylib" name="platform/external/bazel-skylib" revision="f1fb8167b4ed64feb494fd1ea6a8a619bbb549de"/>
<project path="build/bazel_common_rules" name="platform/build/bazel_common_rules" revision="ddd2d82d10e21fb4137d2db3c1b848d6f1832acc"/>
<project path="external/stardoc" name="platform/external/stardoc" revision="b6ef2c6b6e39087f7396aaeb13c83464dfce4a19"/>
<project path="external/python/absl-py" name="platform/external/python/absl-py" revision="63f98de5b158481877489ca39158ed691f7551e1"/>
</manifest>

初始化manifest&同步代码

把下载的manifest_xxx.xml 复制到你要目录内,初始化
官方文档同步内核代码是

1
2
3
4
repo init -u https://android.googlesource.com/kernel/manifest 
mv <kernel_manifest.xml> .repo/manifests
repo init -m manifest.xml
repo sync

但我在同步的时候,显示找不到 manifest_91.xml,文件,于是把路径补全了,就可以同步了。

1
repo init -m /root/aosp/kernel_android13_5_10_107/manifest_91.xml


同步代码

1
repo sync

同步的时候common 库的代码一直没办法获取。

1
2
3
4
5
kernel/common:
fatal: Couldn't find remote ref refs/heads/android13-5.10-2022-10
kernel/common: sleeping 4.0 seconds before retrying
fatal: Couldn't find remote ref refs/heads/android13-5.10-2022-10
error: Cannot fetch kernel/common from https://android.googlesource.com/kernel/common

由于在manifest.xml 中看到了android13-5.10, 所以直接用git 把 common的源代码同步到目录中

git clone https://android.googlesource.com/kernel/common -b android13-5.10

目录结构

最终可以看到完整的kernel 目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
total 48
drwxr-xr-x 12 root root 4096 Jan 4 07:03 .
drwxr-xr-x 8 root root 4096 Jan 3 09:54 ..
drwxr-xr-x 7 root root 4096 Jan 3 10:28 .repo
lrwxrwxrwx 1 root root 6 Jan 3 10:35 .source_date_epoch_dir -> common
lrwxrwxrwx 1 root root 34 Jan 3 10:28 WORKSPACE -> build/kernel/kleaf/bazel.WORKSPACE
drwxr-xr-x 4 root root 4096 Jan 3 10:28 build
drwxr-xr-x 27 root root 4096 Jan 4 07:10 common
drwxr-xr-x 3 root root 4096 Jan 3 10:28 common-modules
drwxr-xr-x 5 root root 4096 Jan 3 10:28 external
drwxr-xr-x 3 root root 4096 Jan 3 10:28 hikey-modules
drwxr-xr-x 4 root root 4096 Jan 3 10:28 kernel
drwxr-xr-x 6 root root 4096 Jan 4 07:11 out
drwxr-xr-x 10 root root 4096 Jan 3 10:29 prebuilts
drwxr-xr-x 3 root root 4096 Jan 3 10:30 tools

开始构建

Linux Kernel 是 Android 系统运行的基础,而Linux Kernel 的源码 在AOSP 中并不存在,通常存在的是与构建的内核映像,如果想对内核做一些定制化的修改,就需要下载代码并构建,Linux Kernel 像AOSP 有各种各样的分支,并不是随便选择一个分支构建就可以正常运行。编译AOSP对应的Linux Kernel版本才能避免构建过程走很多弯路。每一个AOSP构建目标都预置了预编译的内核映像,可以从内核影像中获取相应版本的蛛丝马迹。

需要说明的是Android的内核项目同样是由repo(android.googlesource.com/kernel/mani…) 管理的,其中Linux Kernel的源码存在于kernel/common(android.googlesource.com/kernel/comm…) 目录下,其他目录是与构建相关的工具链或者脚本等,在之前旧版本Linux Kernel构建中可以直接下载kernel/common的代码使用make直接编译出内核镜像,但是随着Android GKI的推出,这套方法就行不通了。

编译

由于我的pixel 6Pro 是 arrch64 架构的,所以直接按照官网里的来

LTO=thin BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh

如果自己的不一样,要自己指定对应的GKI内核架构,在common 文件夹内可以找到大部分的内核。

由于我的计算机是64G 的,所以就没有加上 LTO=thin。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
root@4cd0e87f2387:~/aosp/kernel_android13_5_10_107# BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh
========================================================
Setting up for build
+ cd common
+ make LLVM=1 DEPMOD=depmod DTC=/root/aosp/kernel_android13_5_10_107/build/kernel/build-tools/path/linux-x86/dtc O=/root/aosp/kernel_android13_5_10_107/out/android13-5.10/common mrproper
make[1]: Entering directory '/root/aosp/kernel_android13_5_10_107/out/android13-5.10/common'
rm -f ./crypto/fips140.ko.rela.*
make[1]: Leaving directory '/root/aosp/kernel_android13_5_10_107/out/android13-5.10/common'
+ set +x
+ cd common
+ make LLVM=1 DEPMOD=depmod DTC=/root/aosp/kernel_android13_5_10_107/build/kernel/build-tools/path/linux-x86/dtc O=/root/aosp/kernel_android13_5_10_107/out/android13-5.10/common gki_defconfig
make[1]: Entering directory '/root/aosp/kernel_android13_5_10_107/out/android13-5.10/common'
GEN Makefile
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
YACC scripts/kconfig/parser.tab.[ch]
HOSTCC scripts/kconfig/preprocess.o
HOSTCC scripts/kconfig/symbol.o
HOSTCC scripts/kconfig/util.o
HOSTCC scripts/kconfig/lexer.lex.o
HOSTCC scripts/kconfig/parser.tab.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config
#
make[1]: Leaving directory '/root/aosp/kernel_android13_5_10_107/out/android13-5.10/common'
+ set +x
========================================================
Running pre-make command(s):
+ eval check_defconfig
++ check_defconfig
++ cd /root/aosp/kernel_android13_5_10_107/out/android13-5.10/common
++ make LLVM=1 DEPMOD=depmod DTC=/root/aosp/kernel_android13_5_10_107/build/kernel/build-tools/path/linux-x86/dtc O=/root/aosp/kernel_android13_5_10_107/out/android13-5.10/common savedefconfig
GEN Makefile
++ '[' arm64 = x86_64 -o arm64 = i386 ']'
++ RES=0
++ [[ -f common/arch/arm64/configs/gki_defconfig ]]
++ diff -u common/arch/arm64/configs/gki_defconfig /root/aosp/kernel_android13_5_10_107/out/android13-5.10/common/defconfig
++ '[' 0 -ne 0 ']'
++ return 0
+ set +x
========================================================
Copying abi definition to /root/aosp/kernel_android13_5_10_107/out/android13-5.10/dist/abi.xml
~/aosp/kernel_android13_5_10_107/common ~/aosp/kernel_android13_5_10_107
~/aosp/kernel_android13_5_10_107
========================================================
Generating ABI symbol list definition in /root/aosp/kernel_android13_5_10_107/out/android13-5.10/dist/abi_symbollist
Generating ABI symbol report /root/aosp/kernel_android13_5_10_107/out/android13-5.10/dist/abi_symbollist.report
~/aosp/kernel_android13_5_10_107/common ~/aosp/kernel_android13_5_10_107
GEN Makefile
#
# configuration written to .config
#
~/aosp/kernel_android13_5_10_107
========================================================
Building kernel
+ cd /root/aosp/kernel_android13_5_10_107/out/android13-5.10/common
+ make O=/root/aosp/kernel_android13_5_10_107/out/android13-5.10/common LLVM=1 DEPMOD=depmod DTC=/root/aosp/kernel_android13_5_10_107/build/kernel/build-tools/path/linux-x86/dtc Image modules Image.lz4 Image.gz
SYNC include/config/auto.conf.cmd
GEN Makefile

...

die__process_unit: DW_TAG_label (0xa) @ <0x15dcf6> not handled!
die__process_unit: DW_TAG_label (0xa) @ <0x15de2f> not handled!
die__process_unit: DW_TAG_label (0xa) @ <0x15de4c> not handled!
die__process_unit: DW_TAG_label (0xa) @ <0x15df85> not handled!
die__process_unit: DW_TAG_label (0xa) @ <0x15df9f> not handled!
die__process_unit: DW_TAG_label (0xa) @ <0x15dfb9> not handled!
LD .tmp_vmlinux.kallsyms1
KSYMS .tmp_vmlinux.kallsyms1.S
AS .tmp_vmlinux.kallsyms1.S
LD .tmp_vmlinux.kallsyms2
KSYMS .tmp_vmlinux.kallsyms2.S
AS .tmp_vmlinux.kallsyms2.S
LD vmlinux
BTFIDS vmlinux
SORTTAB vmlinux
SYSMAP System.map
OBJCOPY arch/arm64/boot/Image
LZ4 arch/arm64/boot/Image.lz4
GZIP arch/arm64/boot/Image.gz
MODPOST modules-only.symvers
GEN Module.symvers
+ set +x
========================================================
Checking the list of modules:
========================================================
Comparing the KMI and the symbol lists:
+ gki_modules_list=/root/aosp/kernel_android13_5_10_107/common/android/gki_system_dlkm_modules
++ sed 's/\.ko$//' /root/aosp/kernel_android13_5_10_107/common/android/gki_system_dlkm_modules
++ tr '\n' ' '
+ KMI_STRICT_MODE_OBJECTS='vmlinux '
+ /root/aosp/kernel_android13_5_10_107/build/abi/compare_to_symbol_list /root/aosp/kernel_android13_5_10_107/out/android13-5.10/common/Module.symvers /root/aosp/kernel_android13_5_10_107/out/android13-5.10/common/abi_symbollist.raw
+ set +x
========================================================
Installing kernel modules into staging directory
DEPMOD 5.10.198-android13-4-00014-g4fb32a1f29a6
========================================================
Generating gki_certification_tools.tar.gz
========================================================
Generating test_mappings.zip
========================================================
Copying files
arch/arm64/boot/Image
vmlinux
System.map
vmlinux.symvers
modules.builtin
modules.builtin.modinfo
arch/arm64/boot/Image.lz4
arch/arm64/boot/Image.gz
========================================================
Installing UAPI kernel headers:
make: Entering directory '/root/aosp/kernel_android13_5_10_107/out/android13-5.10/common'
INSTALL /root/aosp/kernel_android13_5_10_107/out/android13-5.10/kernel_uapi_headers/usr/include
make: Leaving directory '/root/aosp/kernel_android13_5_10_107/out/android13-5.10/common'
Copying kernel UAPI headers to /root/aosp/kernel_android13_5_10_107/out/android13-5.10/dist/kernel-uapi-headers.tar.gz
========================================================
Copying kernel headers to /root/aosp/kernel_android13_5_10_107/out/android13-5.10/dist/kernel-headers.tar.gz
~/aosp/kernel_android13_5_10_107/common ~/aosp/kernel_android13_5_10_107
~/aosp/kernel_android13_5_10_107
========================================================
Creating system_dlkm image
========================================================
Files copied to /root/aosp/kernel_android13_5_10_107/out/android13-5.10/dist
Creating boot-img.tar.gz for gki-info.txt boot.img boot-gz.img boot-lz4.img

使用KernelSU构建内核

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
root@4cd0e87f2387:~/aosp/kernel_android13_5_10_107# curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -
++ pwd
+ GKI_ROOT=/root/aosp/kernel_android13_5_10_107
+ echo '[+] GKI_ROOT: /root/aosp/kernel_android13_5_10_107'
[+] GKI_ROOT: /root/aosp/kernel_android13_5_10_107
+ test -d /root/aosp/kernel_android13_5_10_107/common/drivers
+ DRIVER_DIR=/root/aosp/kernel_android13_5_10_107/common/drivers
+ test -d /root/aosp/kernel_android13_5_10_107/KernelSU
+ git clone https://github.com/tiann/KernelSU
Cloning into 'KernelSU'...
remote: Enumerating objects: 12723, done.
remote: Counting objects: 100% (120/120), done.
remote: Compressing objects: 100% (66/66), done.
remote: Total 12723 (delta 53), reused 98 (delta 39), pack-reused 12603
Receiving objects: 100% (12723/12723), 12.04 MiB | 552.00 KiB/s, done.
Resolving deltas: 100% (7655/7655), done.
+ cd /root/aosp/kernel_android13_5_10_107/KernelSU
+ git stash
No local changes to save
++ git status
++ grep -Po 'v\d+(\.\d+)*'
++ head -n1
+ '[' '' ']'
+ git pull
Already up to date.
+ '[' -z '' ']'
++ git describe --abbrev=0 --tags
+ git checkout v0.7.2
Note: checking out 'v0.7.2'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

git checkout -b <new-branch-name>

HEAD is now at afefe20 ci: fix clippy
+ cd /root/aosp/kernel_android13_5_10_107
+ echo '[+] GKI_ROOT: /root/aosp/kernel_android13_5_10_107'
[+] GKI_ROOT: /root/aosp/kernel_android13_5_10_107
+ echo '[+] Copy kernel su driver to /root/aosp/kernel_android13_5_10_107/common/drivers'
[+] Copy kernel su driver to /root/aosp/kernel_android13_5_10_107/common/drivers
+ cd /root/aosp/kernel_android13_5_10_107/common/drivers
+ test -d /root/aosp/kernel_android13_5_10_107/common/drivers
+ ln -sf ../../KernelSU/kernel kernelsu
+ cd /root/aosp/kernel_android13_5_10_107
+ echo '[+] Add kernel su driver to Makefile'
[+] Add kernel su driver to Makefile
+ DRIVER_MAKEFILE=/root/aosp/kernel_android13_5_10_107/common/drivers/Makefile
+ DRIVER_KCONFIG=/root/aosp/kernel_android13_5_10_107/common/drivers/Kconfig
+ grep -q kernelsu /root/aosp/kernel_android13_5_10_107/common/drivers/Makefile
+ printf 'obj-$(CONFIG_KSU) += kernelsu/\n'
+ grep -q kernelsu /root/aosp/kernel_android13_5_10_107/common/drivers/Kconfig
+ sed -i '/endmenu/i\source "drivers/kernelsu/Kconfig"' /root/aosp/kernel_android13_5_10_107/common/drivers/Kconfig
+ echo '[+] Done.'
[+] Done.

重新编译一遍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
  LZ4     arch/arm64/boot/Image.lz4
GZIP arch/arm64/boot/Image.gz
MODPOST modules-only.symvers
GEN Module.symvers
+ set +x
========================================================
Checking the list of modules:
========================================================
Comparing the KMI and the symbol lists:
+ gki_modules_list=/root/aosp/kernel_android13_5_10_107/common/android/gki_system_dlkm_modules
++ sed 's/\.ko$//' /root/aosp/kernel_android13_5_10_107/common/android/gki_system_dlkm_modules
++ tr '\n' ' '
+ KMI_STRICT_MODE_OBJECTS='vmlinux '
+ /root/aosp/kernel_android13_5_10_107/build/abi/compare_to_symbol_list /root/aosp/kernel_android13_5_10_107/out/android13-5.10/common/Module.symvers /root/aosp/kernel_android13_5_10_107/out/android13-5.10/common/abi_symbollist.raw
+ set +x
========================================================
Installing kernel modules into staging directory
DEPMOD 5.10.198-android13-4-00014-g4fb32a1f29a6-dirty
========================================================
Generating gki_certification_tools.tar.gz
========================================================
Generating test_mappings.zip
========================================================
Copying files
arch/arm64/boot/Image
vmlinux
System.map
vmlinux.symvers
modules.builtin
modules.builtin.modinfo
arch/arm64/boot/Image.lz4
arch/arm64/boot/Image.gz
========================================================
Installing UAPI kernel headers:
make: Entering directory '/root/aosp/kernel_android13_5_10_107/out/android13-5.10/common'
INSTALL /root/aosp/kernel_android13_5_10_107/out/android13-5.10/kernel_uapi_headers/usr/include
make: Leaving directory '/root/aosp/kernel_android13_5_10_107/out/android13-5.10/common'
Copying kernel UAPI headers to /root/aosp/kernel_android13_5_10_107/out/android13-5.10/dist/kernel-uapi-headers.tar.gz
========================================================
Copying kernel headers to /root/aosp/kernel_android13_5_10_107/out/android13-5.10/dist/kernel-headers.tar.gz
~/aosp/kernel_android13_5_10_107/common ~/aosp/kernel_android13_5_10_107
~/aosp/kernel_android13_5_10_107
========================================================
Creating system_dlkm image
========================================================
Files copied to /root/aosp/kernel_android13_5_10_107/out/android13-5.10/dist
Creating boot-img.tar.gz for gki-info.txt boot.img boot-gz.img boot-lz4.img

编译结果out

编译后的目录,可以看到多了一个out 目录和KernelSU目录,内核二进制文件、模块和相应的映像位于 out/android13-5.10/dist 目录下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@4cd0e87f2387:~/aosp/kernel_android13_5_10_107# ls -al
total 56
drwxr-xr-x 13 root root 4096 Jan 4 03:35 .
drwxr-xr-x 8 root root 4096 Jan 3 09:54 ..
drwxr-xr-x 7 root root 4096 Jan 3 09:50 .repo
lrwxrwxrwx 1 root root 6 Jan 3 09:25 .source_date_epoch_dir -> common
drwxr-xr-x 10 root root 4096 Jan 4 03:35 KernelSU
lrwxrwxrwx 1 root root 34 Jan 3 09:18 WORKSPACE -> build/kernel/kleaf/bazel.WORKSPACE
drwxr-xr-x 4 root root 4096 Jan 3 09:18 build
drwxr-xr-x 27 root root 4096 Jan 3 14:47 common
drwxr-xr-x 3 root root 4096 Jan 3 09:18 common-modules
drwxr-xr-x 5 root root 4096 Jan 3 09:18 external
drwxr-xr-x 3 root root 4096 Jan 3 09:18 hikey-modules
drwxr-xr-x 4 root root 4096 Jan 3 09:18 kernel
-rw-r--r-- 1 root root 3823 Jan 3 08:44 manifest_91.xml
drwxr-xr-x 5 root root 4096 Jan 4 03:05 out
drwxr-xr-x 10 root root 4096 Jan 3 09:19 prebuilts
drwxr-xr-x 3 root root 4096 Jan 3 09:19 tools

在out目录内,可以看到

刷入到手机内

1
2
3
4
5
6
7
8
9
10
E:\file\KernelSU>adb reboot bootloader

E:\file\KernelSU>fastboot flash boot boot.img
Sending 'boot_a' (65536 KB) OKAY [ 2.135s]
Writing 'boot_a' OKAY [ 0.081s]
Finished. Total time: 2.228s

E:\file\KernelSU>fastboot reboot
Rebooting OKAY [ 0.001s]
Finished. Total time: 0.007s

查看KernelSU

开启root

root检测(检测不出来)

查看内核

1
2
3
4
5
6
7
E:\file\KernelSU>adb shell
raven:/ $ uname -a
Linux localhost 5.10.198-android13-4-00014-g4fb32a1f29a6-dirty #1 SMP PREEMPT Wed Dec 27 01:56:34 UTC 2023 aarch64 Toybox
raven:/ $ su
/system/bin/sh: su: inaccessible or not found
127|raven:/ $ su
raven:/ #

查看 ro.debuggable

KernelSU模块

其他思考

INFO 1

在GKI 源码目录common 内,看到有debug的文件,猜测是不是编译的时候加入这个选项,就可以开启内核调试了。


GTP 回答

build.config.gki-debug.aarch64build.config.gki.aarch64是Android内核构建过程中使用的两个不同的配置文件。它们的区别在于构建选项和调试功能的开启程度。
build.config.gki.aarch64是用于构建GKI(Generic Kernel Image)的配置文件,它是一个精简的、通用的内核映像。这个配置文件主要用于生产环境中构建内核,通常会关闭一些调试相关的选项,以提高性能和减小内核映像的大小。
相比之下,build.config.gki-debug.aarch64是用于构建调试版本的GKI的配置文件。它在构建过程中包含了更多的调试选项,以支持开发和调试工作。这些调试选项可以帮助开发者进行内核的故障排除和性能分析。
具体来说,build.config.gki-debug.aarch64可能会打开一些额外的调试选项,如内核符号表的生成、动态跟踪功能的启用、内核调试器(如KGDB)的支持等。这些选项会增加内核映像的大小,并且可能会对性能产生一些影响,但可以提供更丰富的调试信息和功能。
因此,选择使用哪个配置文件取决于你的需求。如果你正在进行生产环境的构建,并追求最佳性能和较小的内核映像大小,那么你可以使用build.config.gki.aarch64。如果你需要进行开发、调试或故障排除工作,并且对调试功能和信息更感兴趣,那么你可以选择build.config.gki-debug.aarch64
请注意,在使用这些配置文件之前,你需要确认它们是否适用于你的构建环境和项目需求,并根据实际情况进行相应的配置和调整

参考

官方guide
https://kernelsu.org/zh_CN/guide/installation.html

https://source.android.com/docs/setup/build/building-kernels?hl=zh-cn


Pixel 6Pro Kernel编译整合KernelSU
https://tig3rhu.github.io/2024/02/29/19__KernelSU搞机/
Author
Tig3rHu
Posted on
February 29, 2024
Licensed under