我正试图使用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手册,发现它提供了一个make应该在启动前更改的目录。
所以,你告诉make"改变到名为CCD_ 4"的目录;当然那个目录不存在,所以你会得到那个错误。
为什么你的命令行是这样的?看看你写的规则:
default:
$(MAKE) ARCH=arm64 CROSS_COMPILE=... -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules
因此,在假定-C
是变量KERNEL_DIR
的值之后。
但是,在makefile中,您还没有定义变量KERNEL_DIR
,所以当make展开它时,它会展开为空字符串。