繁体   English   中英

/usr/bin/as: 无法识别的选项 '-EL'

[英]/usr/bin/as: unrecognized option '-EL'

因此,在为我的 1plus 手机编译 android kernel 时,经过 3 天的多次尝试后,我放弃了,并尝试在这里询问是否有人以前遇到过这个问题。

这个错误对我来说有点模糊,但我觉得问题来自我最近对 GNU/Linux 发行版 (Gentoo) 的更改,它以某种方式覆盖了不应该的 AS 环境变量; 它无法组装 VDSO,但遗憾的是我不知道压倒一切的来源。 (也许他们修改了 make 命令以允许支持标志覆盖等。)

信息(日志太大,放在这里):

https://xutaxkamay.com/cmpl_knrlndrd_nfo.log

编辑,小版本:

make RANLIB=/media/sda2/git/linux-x86/clang-bootstrap/bin/llvm-ranlib CC='/media/sda2/git/linux-x86/clang-bootstrap/bin/clang -fintegrated-as' LD=/media/sda2/git/linux-x86/clang-bootstrap/bin/ld.lld AR=/media/sda2/git/linux-x86/clang-bootstrap/bin/llvm-ar AS=/media/sda2/git/linux-x86/clang-bootstrap/bin/llvm-as NM=/media/sda2/git/linux-x86/clang-bootstrap/bin/llvm-nm OBJCOPY=/media/sda2/git/linux-x86/clang-bootstrap/bin/llvm-objcopy OBJDUMP=/media/sda2/git/linux-x86/clang-bootstrap/bin/llvm-objdump READELF=/media/sda2/git/linux-x86/clang-bootstrap/bin/llvm-readelf OBJSIZE=/media/sda2/git/linux-x86/clang-bootstrap/bin/llvm-size STRIP=/media/sda2/git/linux-x86/clang-bootstrap/bin/llvm-strip
  CC      kernel/bounds.s
  CC      arch/arm64/kernel/asm-offsets.s
In file included from arch/arm64/kernel/asm-offsets.c:25:
In file included from ./include/linux/kvm_host.h:39:
In file included from ./arch/arm64/include/asm/kvm_host.h:42:
In file included from ./include/kvm/arm_pmu.h:21:
In file included from ./include/linux/perf_event.h:57:
In file included from ./include/linux/cgroup.h:28:
./include/linux/cgroup-defs.h:475:16: warning: field 'cgrp' with variable sized type 'struct cgroup' not at the end of a struct or class is a GNU extension [-Wgnu-variable-sized-type-not-at-end]
        struct cgroup cgrp;
                      ^
1 warning generated.
  CALL    scripts/checksyscalls.sh
  LDS     arch/arm64/kernel/vdso/vdso.lds
  VDSOA   arch/arm64/kernel/vdso/gettimeofday.o 
/usr/bin/as: unrecognized option '-EL'
clang-12: error: assembler command failed with exit code 1 (use -v to see invocation)
make[1]: *** [arch/arm64/kernel/vdso/Makefile:57: arch/arm64/kernel/vdso/gettimeofday.o] Error 1
make: *** [arch/arm64/Makefile:201: vdso_prepare] Error 2

环境变量:

# https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/
export PATH='/media/sda2/git/aarch64-linux-android-4.9/bin':${PATH}
export LD_LIBRARY_PATH='/media/sda2/git/aarch64-linux-android-4.9/lib':${LD_LIBRARY_PATH}

# git clone https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86
export PATH='/media/sda2/git/linux-x86/clang-bootstrap/bin':${PATH}
export LD_LIBRARY_PATH='/media/sda2/git/linux-x86/clang-bootstrap/lib':${LD_LIBRARY_PATH}

export ARCH=arm64 
export SUBARCH=arm64
export CROSS_COMPILE='aarch64-linux-android-'
export CROSS_COMPILER=$PATH
export CLANG_TRIPLE='aarch64-linux-gnu-'
export KCFLAGS='-pipe -O3'
export KCPPFLAGS='-pipe -O3'

Kernel 使用: https://github.com/LineageOS/android_kernel_oneplus_sm8250

有任何想法吗?

我使用 Google 的 clang 预构建编译器(可以自己构建,但为了赢得时间)以便使用 polly 编译 android 内核,因为 Gentoo LLVM 团队显然还没有使用标志。

更糟糕的是,我正在考虑使用 Ubuntu binutils/automake 等/创建 docker 环境来编译这个 kernel,但我应该能够在我自己的主机系统上做到这一点。

感谢您的帮助和关心。

我解决了。 After removing LD=/media/sda2/git/linux-x86/clang-bootstrap/bin/ld.lld for the linker, it worked, I suppose the clang linker was using /usr/bin/as by default and not aarch64- linux-android-as 是谷歌预建的。 我需要进一步调查。 一旦我发现更多,我会编辑这篇文章。

我遇到了同样的问题。 根本原因是 CLANG_PATH 应该在 PATH 之前添加。

// have chance to use /usr/bin/as
export PATH=$PATH:$CLANG_PATH // wrong

export PATH=${CLANG_PATH}:${PATH} // correct

忽视

  1. 正确设置交叉编译工具补丁

原因是您没有正确设置 CROSS_COMPILE 和 CROSS_COMPILE_ARM32。

aarch64-linux-android-as 在 PATH 中找不到。 所以它使用/usr/bin/as。 您应该将交叉编译工具放入补丁中,或者像这样设置绝对补丁:

export CROSS_COMPILE=$CROSS/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-
export CROSS_COMPILE_ARM32=$CROSS/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-
  1. make deconfig 时不要设置 LD
- make CC=clang LD=ld.lld HOSTCC=clang AR=llvm-ar NM=llvm-nm OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump STRIP=llvm-strip O=out floral_defconfig
+ make CC=clang HOSTCC=clang AR=llvm-ar NM=llvm-nm OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump STRIP=llvm-strip O=out floral_defconfig

我在一个脚本中对此问题进行了更改,但在另一个构建脚本中从未遇到过。 通过比较这两个文件,我发现正确的文件在 make defconfig 中没有设置 LD=ld.lld。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM