Skip to content

Patch Failed (xiaomi pad6) (4.19.246) #285

Description

@bcggxx

使用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_markers4 字节 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/

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions