问题描述
我正在尝试使用Android NDK在Windows 10 pc上编译某个Android内核模块。
我尝试使用以下Makefile进行构建:
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 29
EXTRAVERSION =
obj-m := test.o
PWD := $(shell pwd)
default:
$(MAKE) ARCH=arm64 CROSS_COMPILE=/home/AndroidNDK/android-ndk-r21d/toolchains/aarch64-linux- android-4.9/bin/aarch64-linux-android- -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules
clean:
$(MAKE) -C $(KERNEL_PATH) SUBDIRS=$(PWD) clean
但是继续出现此错误:
make ARCH=arm64 CROSS_COMPILE=/home/AndroidNDK/android-ndk-r21d/toolchains/aarch64-linux-android-4.9/bin/aarch64-linux-android- -C SUBDIRS=/cygdrive/c/Project modules
make[1]: *** SUBDIRS=/cygdrive/c/Project: No such file or directory. Stop.
make: *** [Makefile:11: default] Error 2
- 我从github上获取了Makefile,并做了一些改动。
- 模块源文件称为test.c
知道为什么会出现此错误吗?
解决方法
很明显为什么会出现该错误。查看make正在运行的命令:
make ARCH=arm64 CROSS_COMPILE=... -C SUBDIRS=/cygdrive/c/Project modules
请注意,SUBDIRS=/cygdrive/c/Project
选项后面的字符串-C
是如何出现的。 -C
选项是什么?在开始之前,请检查GNU make manual以发现它提供了应该更改为make的目录。
因此,您要告诉make“更改为名为SUBDIRS=/cygdrive/c/Project
的目录”,当然该目录不存在,所以会收到该错误。
那您的命令行为什么会这样?查看您编写的规则:
default:
$(MAKE) ARCH=arm64 CROSS_COMPILE=... -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules
因此,在-C
之后应该是变量KERNEL_DIR
的值。
但是,在您的makefile中,您尚未定义变量KERNEL_DIR
,因此在make扩展时,它会扩展为空字符串。