clang으로 vdso를 컴파일할 때 ld 오류가 발생합니다.

clang으로 vdso를 컴파일할 때 ld 오류가 발생합니다.

커널을 컴파일하려고 하는데 항상 다음 오류가 반환됩니다.

LD      arch/arm64/kernel/vdso/built-in.o
ld.lld: error: cannot find linker script -r
make[2]: *** [scripts/Makefile.build:507: arch/arm64/kernel/vdso/built-in.o] Error 1
make[1]: *** [scripts/Makefile.build:647: arch/arm64/kernel/vdso] Error 2
make: *** [Makefile:1239: arch/arm64/kernel] Error 2

vdso의 소스 코드, 스크립트 및 Makefile을 확인했지만 운이 없습니다.

누구든지 이 문제를 조사할 수 있는 방법과 위치를 알려줄 수 있습니까? 또는 이 문제에 대한 자세한 내용을 표시하려면 어떻게 해야 합니까?

인사

편집: 우분투 20.04에서 처음으로 llvm을 사용하여 Android 커널을 빌드하려고 하는데 clang17 및 gcc가 설정되어 있을 수 있다고 생각합니다. 하지만 gcc로 컴파일해도 같은 오류가 발생합니다.

구성 설정은 다음과 같습니다.

CLANG_HOME=/usr/lib/llvm-17
export PATH=$CLANG_HOME/bin:$CLANG_HOME/lib:${PATH}
export CLANG_TRIPLE=/usr/bin/aarch64-linux-gnu-
export CROSS_COMPILE=/usr/bin/aarch64-linux-gnu-
export CROSS_COMPILE_ARM32=/opt1/android/toolchain/clang/proton-clang-v13.0.0/arm-linux-gnueabi/bin/arm-linux-gnueabi-
export CC=$CLANG_HOME/bin/clang
export REAL_CC=$CLANG_HOME/bin/clang
export LD=$CLANG_HOME/bin/ld.lld
export AR=$CLANG_HOME/bin/llvm-ar
export NM=$CLANG_HOME/bin/llvm-nm
export OBJCOPY=$CLANG_HOME/bin/llvm-objcopy
export OBJDUMP=$CLANG_HOME/bin/llvm-objdump
export READELF=$CLANG_HOME/bin/llvm-readelf
export STRIP=$CLANG_HOME/bin/llvm-strip
export LLVM=1 && export LLVM_IAS=1
export KALLSYMS_EXTRA_PASS=1
export ARCH=arm64 && export SUBARCH=arm64

-j1 -V1 오류를 만드세요

make -f ./scripts/Makefile.build obj=arch/arm64/kernel/vdso
  /usr/lib/llvm-17/bin/llvm-objcopy -S  arch/arm64/kernel/vdso/vdso.so.dbg arch/arm64/kernel/vdso/vdso.so
  /usr/lib/llvm-17/bin/clang -Wp,-MD,arch/arm64/kernel/vdso/.vdso.o.d  -nostdinc -isystem /usr/lib/llvm-17/lib/clang/17/include -I./arch/arm64/include -I./arch/arm64/include/generated/uapi -I./arch/arm64/include/generated  -I./include -I./drivers/kernelsu/include -I./arch/arm64/include/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/kconfig.h -D__KERNEL__ -Qunused-arguments -mlittle-endian -Qunused-arguments -D__ASSEMBLY__ --target=aarch64-linux-gnu -DCC_USE_CLANG --prefix=/usr/bin/aarch64-linux-gnu-
--gcc-toolchain=/usr -Werror=unknown-warning-option -fno-PIE -DCONFIG_AS_LSE=1 -DCONFIG_VDSO32=1   -c -o arch/arm64/kernel/vdso/vdso.o arch/arm64/kernel/vdso/vdso.S
   /usr/lib/llvm-17/bin/ld.lld   -EL  -maarch64elf -O3 -shared -nostdlib -soname=linux-vdso.so.1 --hash-style=sysv --build-id -n -T
-r -o arch/arm64/kernel/vdso/built-in.o arch/arm64/kernel/vdso/vdso.o
ld.lld: error: cannot find linker script -r
make[2]: *** [scripts/Makefile.build:507: arch/arm64/kernel/vdso/built-in.o] Error 1
make[1]: *** [scripts/Makefile.build:647: arch/arm64/kernel/vdso] Error 2
make: *** [Makefile:1239: arch/arm64/kernel] Error 2

edit2: 다른 clang을 사용해 보았지만 여전히 vdso 콘텐츠를 컴파일하는 데 문제가 있습니다. 위에서 언급한 가장 일반적인 오류 - 링커 스크립트를 찾을 수 없어 build.o가 성공적으로 컴파일되지 않았습니다.

관련 정보