make 尝试在先前规则中使用 -C 选项指定的目录下查找包含文件。为什么?
make tries to find include file under a directory specified with -C option in a previous rule. why?
生成文件:
export KDIR:=linux-5.4.188
all:
make ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KDIR) M=$(PWD) modules
cp axpu_ldd_kc.ko /srv/tftp/.
clean:
make ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KDIR) M=$(PWD) clean
rm -f axpu_ldd_kc.ko
%: %.c
$(CROSS_COMPILE)gcc -fmax-errors=2 $^ -o $@
include Makefile.qemu
Makefile.qemu :
q_kernel_g :
${QEMU} -machine ab21q,gic-version=max,secure=off,virtualization=true -cpu max -kernel ${LINUX_DIR}/arch/arm64/boot/Image -m 2G -nographic -netdev user,id=vnet,hostfwd=:127.0.0.1:0-:22,tftp=/srv/tftp -device virtio-net-pci,netdev=vnet -machine iommu=smmuv3 --append "root=/dev/ram init=/init nokaslr earlycon ip=dhcp hugepages=16" -s -S
g_kernel :
pid=`ps aux | grep qemu-system | awk 'NR==1{print }'`
aarch64-none-elf-gdb linux-5.4.188/vmlinux $pid -x gdb_script
当我执行 make
时,它给了我这个错误。
make[1]: Entering directory '/home/ckim/ProjX/QEMU/qemu_test/test_ldd_540/linux-5.4.188'
/home/ckim/ProjX/QEMU/qemu_test/test_ldd_540/Makefile:35: Makefile.qemu: No such file or directory
make[2]: *** No rule to make target 'Makefile.qemu'. Stop.
我不知道为什么 make 试图在 linux-5.4.188 目录下找到 Makefile.qemu。如果我将 Makefile.qemu 复制到 linux-5.4.188 下,一切正常。要创建目标 all
,它会更改到目录 linux-5.4.188,但为什么它期望 Makefile.qemu 在那儿?
我相信 Linux 内核 Makefile 将包含您的 Makefile,并且由于这是从不同的目录完成的,因此会出现错误。您可以分离仅与常规 Makefile 调用相关而不与内核构建相关的部分,如 documentation:
中所述
ifeq ($(KERNELRELEASE),)
include Makefile.qemu
endif
生成文件:
export KDIR:=linux-5.4.188
all:
make ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KDIR) M=$(PWD) modules
cp axpu_ldd_kc.ko /srv/tftp/.
clean:
make ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KDIR) M=$(PWD) clean
rm -f axpu_ldd_kc.ko
%: %.c
$(CROSS_COMPILE)gcc -fmax-errors=2 $^ -o $@
include Makefile.qemu
Makefile.qemu :
q_kernel_g :
${QEMU} -machine ab21q,gic-version=max,secure=off,virtualization=true -cpu max -kernel ${LINUX_DIR}/arch/arm64/boot/Image -m 2G -nographic -netdev user,id=vnet,hostfwd=:127.0.0.1:0-:22,tftp=/srv/tftp -device virtio-net-pci,netdev=vnet -machine iommu=smmuv3 --append "root=/dev/ram init=/init nokaslr earlycon ip=dhcp hugepages=16" -s -S
g_kernel :
pid=`ps aux | grep qemu-system | awk 'NR==1{print }'`
aarch64-none-elf-gdb linux-5.4.188/vmlinux $pid -x gdb_script
当我执行 make
时,它给了我这个错误。
make[1]: Entering directory '/home/ckim/ProjX/QEMU/qemu_test/test_ldd_540/linux-5.4.188'
/home/ckim/ProjX/QEMU/qemu_test/test_ldd_540/Makefile:35: Makefile.qemu: No such file or directory
make[2]: *** No rule to make target 'Makefile.qemu'. Stop.
我不知道为什么 make 试图在 linux-5.4.188 目录下找到 Makefile.qemu。如果我将 Makefile.qemu 复制到 linux-5.4.188 下,一切正常。要创建目标 all
,它会更改到目录 linux-5.4.188,但为什么它期望 Makefile.qemu 在那儿?
我相信 Linux 内核 Makefile 将包含您的 Makefile,并且由于这是从不同的目录完成的,因此会出现错误。您可以分离仅与常规 Makefile 调用相关而不与内核构建相关的部分,如 documentation:
中所述ifeq ($(KERNELRELEASE),)
include Makefile.qemu
endif