使用Apatch修补Boot失败,以下是报错片段
Backing boot.img
Patching kernel
./kptools -p -i kernel.ori -S jjjj0000l -k kpimg -o kernel
[-] /home/runner/work/KernelPatch/KernelPatch/tools/patch.c:392/patch_update_img(); analyze_kallsym_info error
[+] kernel image_size: 0x02680018
[+] kernel uefi header: false
[+] kernel load_offset: 0x00080000
[+] kernel kernel_size: 0x031d5000
[+] kernel page_shift: 12
[+] new kernel image ...
[+] linux_banner 1: Linux version 4.19.246-N0-kernel+ (github@bcggxx) (Android (13290119, +pgo, +bolt, +lto, +mlgo, based on r547379) clang version 20.0.0, LLD 20.0.0 (/mnt/disks/build-disk/src/android/llvm-r547379-release/out/llvm-project/llvm b718bcaf8c198c82f3021447d943401e3ab5bd54)) merge dev #1 SMP PREEMPT Thu Jul 23 20:48:35 UTC 2026
[+] linux_banner offset: 0x1c6afbe
[+] kernel version major: 4, minor: 19, patch: 246
[+] kallsyms_token_table offset: 0x01a5fe00
[+] endian: little
[+] kallsyms_token_index offset: 0x01a60200
[+] arm64 relocation kernel_va: 0xffffff8010000000
[+] arm64 relocation table range: [0x020df0d8, 0x02420fd0), count: 0x00022bf5
[?] bad rela offset: 0xffffff801269ce68
[+] kallsyms_markers range: [0x01a5f9f8, 0x01a5fdd8), count: 0x0000007b
[+] approximate kallsyms_offsets range: [0x019528d8, 0x0198fe8c) count: 0x0000f56d
[-] /home/runner/work/KernelPatch/KernelPatch/tools/kallsym.c:618/find_names(); find kallsyms_names error
[+] kallsyms_markers range: [0x01a5f9f8, 0x01a5fdd8), count: 0x0000007b
[+] approximate kallsyms_offsets range: [0x019528d8, 0x0198fe8c) count: 0x0000f56d
[-] /home/runner/work/KernelPatch/KernelPatch/tools/kallsym.c:618/find_names(); find kallsyms_names error
patch_rc=1
set +x
Patch kernel error: 1
Write patched boot.img failed
本来以为是没开CONFIG_KALLSYMS CONFIG_KALLSYMS_ALL的问题,但是在 bcggxx/android_kernel_xiaomi_n0_pipa@d8de689 提交过后,还是无法修补,之后去掉Droidspaces,ReKernel,还是一样(单Droidspaces和ReKernel测试过了,一样)
Image文件(无Droidspaces,ReKernel):
Image.zip
以下是AI给出的结论,不知道可不可以作为参考:
核心结论:这不是"偏移错了"的问题
你给的报错 find kallsyms_names error 不是 任何符号偏移失效。kptools 也没有 手动喂 kallsyms 的选项(-K 是嵌入 kpatch 二进制,不是给 kallsyms 的)。真相是 kptools 自己的 bug ,已用实测证明:
你的内核 kallsyms_markers 是 4 字节 unsigned int (scripts/kallsyms.c:440 .long、kernel/kallsyms.c:49 unsigned int)。
kptools 的 get_markers_elem_size 对 4.19 内核(4==4 && 19<20)返回 asm_PTR_size=8,按 8 字节 读 markers。
8 字节扫描在 4 字节数据上产生假阳性 (你日志里 count=0x7b=123),不回退,用垃圾 marker 值校验 names → find_names 失败。
实测对比(同一 Image) :
markers count
num_syms
names
结果
旧 kptools(你日志)
0x7b=123 ✗
—
find_names error
失败
修复版 kptools
0xf5=245 ✓
0xf563=62819 ✓
0x01990100 ✓
成功 dump 全部符号
245 ≈ 62819/256 是正确 marker 数;123 正好是一半。patch_update_img(patch.c:548) 与 dump_kallsym(patch.c:915) 走同一个 analyze_kallsym_info,所以 dump 成功 = -p 打补丁也会成功。
使用的内核源码: https://github.com/bcggxx/android_kernel_xiaomi_n0_pipa
使用的Apatch版本: 11142
AI修改的KernelPatch: https://github.com/bcggxx/KernelPatch/
使用Apatch修补Boot失败,以下是报错片段
[-] /home/runner/work/KernelPatch/KernelPatch/tools/patch.c:392/patch_update_img(); analyze_kallsym_info error
[+] kernel image_size: 0x02680018
[+] kernel uefi header: false
[+] kernel load_offset: 0x00080000
[+] kernel kernel_size: 0x031d5000
[+] kernel page_shift: 12
[+] new kernel image ...
[+] linux_banner 1: Linux version 4.19.246-N0-kernel+ (github@bcggxx) (Android (13290119, +pgo, +bolt, +lto, +mlgo, based on r547379) clang version 20.0.0, LLD 20.0.0 (/mnt/disks/build-disk/src/android/llvm-r547379-release/out/llvm-project/llvm b718bcaf8c198c82f3021447d943401e3ab5bd54)) merge dev #1 SMP PREEMPT Thu Jul 23 20:48:35 UTC 2026
[+] linux_banner offset: 0x1c6afbe
[+] kernel version major: 4, minor: 19, patch: 246
[+] kallsyms_token_table offset: 0x01a5fe00
[+] endian: little
[+] kallsyms_token_index offset: 0x01a60200
[+] arm64 relocation kernel_va: 0xffffff8010000000
[+] arm64 relocation table range: [0x020df0d8, 0x02420fd0), count: 0x00022bf5
[?] bad rela offset: 0xffffff801269ce68
[+] kallsyms_markers range: [0x01a5f9f8, 0x01a5fdd8), count: 0x0000007b
[+] approximate kallsyms_offsets range: [0x019528d8, 0x0198fe8c) count: 0x0000f56d
[-] /home/runner/work/KernelPatch/KernelPatch/tools/kallsym.c:618/find_names(); find kallsyms_names error
[+] kallsyms_markers range: [0x01a5f9f8, 0x01a5fdd8), count: 0x0000007b
[+] approximate kallsyms_offsets range: [0x019528d8, 0x0198fe8c) count: 0x0000f56d
[-] /home/runner/work/KernelPatch/KernelPatch/tools/kallsym.c:618/find_names(); find kallsyms_names error
Write patched boot.img failed
本来以为是没开CONFIG_KALLSYMS CONFIG_KALLSYMS_ALL的问题,但是在 bcggxx/android_kernel_xiaomi_n0_pipa@d8de689 提交过后,还是无法修补,之后去掉Droidspaces,ReKernel,还是一样(单Droidspaces和ReKernel测试过了,一样)
Image文件(无Droidspaces,ReKernel):
Image.zip
以下是AI给出的结论,不知道可不可以作为参考:
核心结论:这不是"偏移错了"的问题
你给的报错
find kallsyms_names error不是任何符号偏移失效。kptools 也没有手动喂 kallsyms 的选项(-K是嵌入 kpatch 二进制,不是给 kallsyms 的)。真相是 kptools 自己的 bug,已用实测证明:kallsyms_markers是 4 字节unsigned int(scripts/kallsyms.c:440.long、kernel/kallsyms.c:49unsigned int)。get_markers_elem_size对 4.19 内核(4==4 && 19<20)返回asm_PTR_size=8,按 8 字节读 markers。count=0x7b=123),不回退,用垃圾 marker 值校验 names →find_names失败。实测对比(同一 Image):
245 ≈ 62819/256 是正确 marker 数;123 正好是一半。
patch_update_img(patch.c:548) 与dump_kallsym(patch.c:915) 走同一个analyze_kallsym_info,所以 dump 成功 =-p打补丁也会成功。使用的内核源码: https://github.com/bcggxx/android_kernel_xiaomi_n0_pipa
使用的Apatch版本: 11142
AI修改的KernelPatch: https://github.com/bcggxx/KernelPatch/