【发布时间】:2016-09-16 00:28:48
【问题描述】:
我尝试按照 Google 在this page 上的说明为 Nexus 5X 构建新内核
- 构建系统:Ubuntu 14.04 x86_64
- 目标系统:MTC19T/bullhead(实际上是 5X 上的任何棉花糖版本)
- 工具链:android-6.0.1_r25/prebuilts/gcc/linux-x86/aarch64/
我执行的命令的确切顺序是:
$ git clone https://android.googlesource.com/kernel/msm
$ export ARCH=arm64
$ export CROSS_COMPILE=aarch64-linux-android-
$ cd msm
$ git checkout -b android-msm-bullhead-3.10-marshmallow-mr1 origin/android-msm-bullhead-3.10-marshmallow-mr1
$ make bullhead_defconfig
$ make
在最后一个命令之后,我收到以下错误:
Makefile:796: *** multiple target patterns. Stop.
调查:
现在makefile中的第796行是:
vmlinux: scripts/link-vmlinux.sh $(vmlinux-deps) FORCE
和其他相关行是:
vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_INIT) $(KBUILD_VMLINUX_MAIN)
export KBUILD_VMLINUX_INIT := $(head-y) $(init-y)
export KBUILD_VMLINUX_MAIN := $(core-y) $(libs-y) $(drivers-y) $(net-y)
export KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.lds
我发现如果我从$(KBUILD_VMLINUX_MAIN) 中删除$(libs-y),这个错误就会消失,并且构建会继续一段时间。我相信我稍后会发现一些或其他问题,所以我决定进一步调试。
免责声明:其余部分对我来说有点灰色
$(libs-y) 定义为:
libs-y := lib/
libs-y1 := $(patsubst %/, %/lib.a, $(libs-y))
libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y))
libs-y := $(libs-y1) $(libs-y2)
所以我用参数lib/lib.a lib/built-in.o FORCE 调用了scripts/link-vmlinux.sh 并收到了这个错误:
gps@gps-HP-ProBook-4540s:~/andsrc/kernel/msm$ ./scripts/link-vmlinux.sh lib/lib.a lib/built-in.o FORCE
trap: SIGHUP: bad trap
因为这个输出有:,这个可能解释了原来的make错误。
现在,禁用包含陷阱的行没有帮助,我们得到另一个错误:
gps@gps-HP-ProBook-4540s:~/andsrc/kernel/msm$ ./scripts/link-vmlinux.sh lib/lib.a lib/built-in.o FORCE
LD vmlinux.o
./scripts/link-vmlinux.sh: 44: ./scripts/link-vmlinux.sh: -r: not found
我不太确定接下来要尝试什么。任何帮助表示赞赏。
【问题讨论】:
-
您介意告诉我您是如何解决 $(LD) 问题的吗?
标签: android build kernel android-source