실패: vmlinux에서 btf 로드: CONFIG_DEBUG_INFO_BTF=y에서 잘못된 매개변수 만들기

실패: vmlinux에서 btf 로드: CONFIG_DEBUG_INFO_BTF=y에서 잘못된 매개변수 만들기

linux-5.14.2.tar.gz방금 컴파일할 때 다음과 같은 오류가 발생했습니다.patch-5.14.2-rt21.patch

 on CONFIG_DEBUG_INFO_BTF=y:

      AS      arch/x86/lib/iomap_copy_64.o
    arch/x86/lib/iomap_copy_64.S: Assembler messages:
    arch/x86/lib/iomap_copy_64.S:13: 警告:found `movsd'; assuming `movsl' was meant
      AR      arch/x86/lib/built-in.a
      GEN     .version
      CHK     include/generated/compile.h
      LD      vmlinux.o
    ld: warning: arch/x86/power/hibernate_asm_64.o: missing .note.GNU-stack section implies executable stack
    ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
      MODPOST vmlinux.symvers
      MODINFO modules.builtin.modinfo
      GEN     modules.builtin
      LD      .tmp_vmlinux.btf
    ld: warning: arch/x86/power/hibernate_asm_64.o: missing .note.GNU-stack section implies executable stack
    ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
    ld: warning: .tmp_vmlinux.btf has a LOAD segment with RWX permissions
      BTF     .btf.vmlinux.bin.o
      LD      .tmp_vmlinux.kallsyms1
    ld: warning: .btf.vmlinux.bin.o: missing .note.GNU-stack section implies executable stack
    ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
    ld: warning: .tmp_vmlinux.kallsyms1 has a LOAD segment with RWX permissions
      KSYMS   .tmp_vmlinux.kallsyms1.S
      AS      .tmp_vmlinux.kallsyms1.S
      LD      .tmp_vmlinux.kallsyms2
    ld: warning: .btf.vmlinux.bin.o: missing .note.GNU-stack section implies executable stack
    ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
    ld: warning: .tmp_vmlinux.kallsyms2 has a LOAD segment with RWX permissions
      KSYMS   .tmp_vmlinux.kallsyms2.S
      AS      .tmp_vmlinux.kallsyms2.S
      LD      vmlinux
    ld: warning: .btf.vmlinux.bin.o: missing .note.GNU-stack section implies executable stack
    ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
    ld: warning: vmlinux has a LOAD segment with RWX permissions
      BTFIDS  vmlinux

    failed: load btf from vmlinux: invalid argument make:
    make: *** [Makefile:1176: vmlinux] Error 255
    make: *** Deleting file 'vmlinux'

CONFIG_DEBUG_INFO_BTF로 설정 하면 컴파일 시 오류가 보고되지 않는다는 것을 알고 있지만 로 설정 n하고 싶지는 않습니다 .CONFIG_DEBUG_INFO_BTFn

~에서이 문제, 가상 메모리가 너무 작은 것 같은데, 이 문제의 시작자는 가상 머신을 사용하고 있으며 저는 물리적 머신 Debian12입니다. 어떻게 해야 합니까?

~/kernel/5.14.2/linux-5.14.2$ free -h
               total        used        free      shared  buff/cache   available
内存:         7.7Gi       508Mi       3.4Gi       1.2Mi       4.1Gi       7.2Gi
交换:         976Mi          0B       976Mi

답변1

pahole이는 1.24 이상 및 "이전" 커널 버전을 사용하고 있기 때문일 수 있습니다 . 바라보다https://lore.kernel.org/bpf/Ywkq61Lhyf11SsSa@krava/T/#m008baf5c6d4f252dc74cefcd4105295cf08bfd52

즉, pahole시스템의 최신 버전은 생성된 BTF 정보를 사용 BTF_KIND_ENUM64하지만 libbpf이전 커널 버전에서 사용된 버전은 이 BTF 유형을 지원하지 않습니다.

pahole버전 1.23으로 다운그레이드 하거나 pahole빌드에서 호출되는 위치를 찾아 --skip_encoding_btf_enum64플래그를 전달할 수 있습니다.

나중에 유사한 오류가 발생하는 경우 pr_debug도구 호출 시 유용한 정보가 보고되며 resolve_btfids실제로 인쇄되도록 로그 수준을 높이면 문제를 파악하는 데 도움이 된다는 점을 참고하세요.

소스에서 빌드하여 다운그레이드하려는 경우 저장소는 다음과 같습니다.https://git.kernel.org/pub/scm/devel/pahole/pahole.git/

답변2

커널 버전을 변경하여 이 문제를 해결했습니다.

리눅스-6.4.tar.gz그리고패치-6.4.6-rt8.patch.

관련 정보