我正在尝试为三星 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)"
如果有更多有用的信息,请告诉我。
谢谢你的帮助。