0

Samsung Note 3 (SM-N900A) 用のカーネルを構築しようとしています。リンカー エラーが発生しています。

LD init/mounts.o: 致命的なエラー: 入力ファイルがありません

init/mounts.o ファイルがないことを意味することは理解していますが、これは事実です...ファイルはありませんが、理由はわかりません。いつ生成されることになっていますか?

Android ndk クロスコンパイラ (android-ndk-r10d) を使用しています。

カーネル ディレクトリの Makefile に次の変数を設定します。

CROSS_COMPILE=arm-linux-androideabi- and ARCH=arm

次のコマンドを使用してカーネルを構築しました。

$ make msm8974_sec_defconfig VARIANT_DEFCONFIG=msm8974_sec_hlteatt_defconfig SELINUX_DEFCONFIG=selinux_defconfig TIMA_DEFCONFIG=tima_defconfig
$ make

init/mounts.o をリンクしようとしている部分をコメントアウトすると、次のエラーが発生します。

LD init/built-in.o: fatal error: no input files

すべて同じ問題の一部である可能性があると思いますが、これらのファイルが存在しない理由や、いつ生成されるのかわかりません。

何が起こっているのかについて何かアイデアがあれば、ぜひ聞きたいです。詳細が必要な場合はお知らせください。提供いたします。

ご協力いただきありがとうございます。

編集:

ここに私のビルド出力全体があります...

mweiss@mweiss-VirtualBox:~/Documents/Android/SharedFolder/SM-N900A_NA_JB_Opensource/kernel$ make
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
 make[1]: 'include/generated/mach-types.h' is up to date.
  CC      kernel/bounds.s
  GEN     include/generated/bounds.h
  CC      arch/arm/kernel/asm-offsets.s
  GEN     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  CC      scripts/mod/empty.o
  MKELF   scripts/mod/elfconfig.h
  HOSTCC  scripts/mod/file2alias.o
  HOSTCC  scripts/mod/modpost.o
  HOSTCC  scripts/mod/sumversion.o
  HOSTLD  scripts/mod/modpost
  CC      init/main.o
  CHK     include/generated/compile.h
  CC      init/version.o
  CC      init/do_mounts.o
  CC      init/do_mounts_rd.o
  CC      init/do_mounts_initrd.o
  LD      init/mounts.o
arm-linux-androideabi-ld.gold: fatal error: no input files
scripts/Makefile.build:429: recipe for target 'init/mounts.o' failed
make[1]: *** [init/mounts.o] Error 1
Makefile:959: recipe for target 'init' failed
make: *** [init] Error 2

Makefile (カーネル内) の 959 行目 Makefile が非常に長い:

# build vmlinux.o first to catch section mismatch errors early
ifdef CONFIG_KALLSYMS
  .tmp_vmlinux1: vmlinux.o
endif

これは、scripts/Makefile.build の 429 行目です。

$(multi-used-y) : %.o: $(multi-objs-y) FORCE
    $(call if_changed,link_multi-y)

これは init/ の Makefile です

obj-y := main.o version.o mounts.o

ifneq ($(CONFIG_BLK_DEV_INITRD),y)
  obj-y                          += noinitramfs.o
else
  obj-$(CONFIG_BLK_DEV_INITRD)   += initramfs.o
endif
obj-$(CONFIG_GENERIC_CALIBRATE_DELAY) += calibrate.o

mounts-y            := do_mounts.o
mounts-$(CONFIG_BLK_DEV_RAM)    += do_mounts_rd.o
mounts-$(CONFIG_BLK_DEV_INITRD) += do_mounts_initrd.o
mounts-$(CONFIG_BLK_DEV_MD) += do_mounts_md.o

# dependencies on generated files need to be listed explicitly
$(obj)/version.o: include/generated/compile.h

# compile.h changes depending on hostname, generation number, etc,
# so we regenerate it always.
# mkcompile_h will make sure to only update the
# actual file if its content has changed.

       chk_compile.h = :
 quiet_chk_compile.h = echo '  CHK     $@'
 silent_chk_compile.h = :
 include/generated/compile.h: FORCE
    @$($(quiet)chk_compile.h)
    $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@ \
    "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)" "$(CC)        $(KBUILD_CFLAGS)"

他に役立つ情報があれば、お知らせください。

ご協力いただきありがとうございます。

4

0 に答える 0