简体   繁体   English

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

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

So while compiling android kernel for my 1plus phone, after multiples attempts over 3 days, I gave up and give a try to ask here if anyone had this problem before.因此,在为我的 1plus 手机编译 android kernel 时,经过 3 天的多次尝试后,我放弃了,并尝试在这里询问是否有人以前遇到过这个问题。

The bug is a bit obscure to me, but I feel like the problem comes from my recent change to a GNU/Linux distribution (Gentoo), which is somehow overriding the AS environment variable when it shouldn't;这个错误对我来说有点模糊,但我觉得问题来自我最近对 GNU/Linux 发行版 (Gentoo) 的更改,它以某种方式覆盖了不应该的 AS 环境变量; it fails at assembling VDSO, but I've no idea sadly from where the overriding comes.它无法组装 VDSO,但遗憾的是我不知道压倒一切的来源。 (maybe they did a modify the make command in order to allow supporting flags overriding etc..) (也许他们修改了 make 命令以允许支持标志覆盖等。)

Informations (log is too big to put it here):信息(日志太大,放在这里):

https://xutaxkamay.com/cmpl_knrlndrd_nfo.log https://xutaxkamay.com/cmpl_knrlndrd_nfo.log

EDIT, Small version:编辑,小版本:

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

Environment variables:环境变量:

# 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 used: https://github.com/LineageOS/android_kernel_oneplus_sm8250 Kernel 使用: https://github.com/LineageOS/android_kernel_oneplus_sm8250

Any ideas?有任何想法吗?

I use Google's clang prebuilt compiler (could build it myself but in order to gain time) in order to use polly for compiling android kernels since Gentoo LLVM team doesn't apparently have yet a use flag for it.我使用 Google 的 clang 预构建编译器(可以自己构建,但为了赢得时间)以便使用 polly 编译 android 内核,因为 Gentoo LLVM 团队显然还没有使用标志。

At worse I'm thinking to use Ubuntu binutils/automake etc / creating a docker environment in order to compile this kernel but this just doesn't make many sense to me since I should be able to do it on my own host system.更糟糕的是,我正在考虑使用 Ubuntu binutils/automake 等/创建 docker 环境来编译这个 kernel,但我应该能够在我自己的主机系统上做到这一点。

Thank you for your help and your care.感谢您的帮助和关心。

I got it solved.我解决了。 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 which is google's prebuilt. 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 是谷歌预建的。 I'll need to investigate about it further.我需要进一步调查。 I'll edit this post once I found more.一旦我发现更多,我会编辑这篇文章。

I have met the same problem.我遇到了同样的问题。 The root cause is that the CLANG_PATH should add before the PATH.根本原因是 CLANG_PATH 应该在 PATH 之前添加。

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

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

IGNORE忽视

  1. set the cross-compile tool patch correctly正确设置交叉编译工具补丁

The reason is that you do not set the CROSS_COMPILE and the CROSS_COMPILE_ARM32 correctly.原因是您没有正确设置 CROSS_COMPILE 和 CROSS_COMPILE_ARM32。

The aarch64-linux-android-as can not find in PATH. aarch64-linux-android-as 在 PATH 中找不到。 So it uses /usr/bin/as.所以它使用/usr/bin/as。 You should put the cross compile tools into patch or just set the absolute patch like this:您应该将交叉编译工具放入补丁中,或者像这样设置绝对补丁:

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. do not set LD when make deconfig 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

I have changes to this problem in one script but never meet it in another build script.我在一个脚本中对此问题进行了更改,但在另一个构建脚本中从未遇到过。 By diffing the two files, I find the correct one does not set LD=ld.lld in make defconfig.通过比较这两个文件,我发现正确的文件在 make defconfig 中没有设置 LD=ld.lld。

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

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