在下面这个代码中KBUILD_MODNAME是在哪里定义的呢
static struct virtio_driver virtio_iommu_drv = {
.driver.name = KBUILD_MODNAME,
.driver.owner = THIS_MODULE,
.id_table = id_table,
.feature_table = features,
.feature_table_size = ARRAY_SIZE(features),
.probe = viommu_probe,
.remove = viommu_remove,
.config_changed = viommu_config_changed,
};
可以参考下面patch的实现
https://patchwork.kernel.org/patch/10060825/
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index 5fbc46d..9f9a7df 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -86,8 +86,7 @@ subdir-ym := $(addprefix $(obj)/,$(subdir-ym))
# differ in different configs.
name-fix = $(squote)$(quote)$(subst $(comma),_,$(subst -,_,$1))$(quote)$(squote)
basename_flags = -DKBUILD_BASENAME=$(call name-fix,$(basetarget))
-modname_flags = $(if $(filter 1,$(words $(modname))),\
- -DKBUILD_MODNAME=$(call name-fix,$(modname)))
+modname_flags = -DKBUILD_MODNAME=$(call name-fix,$(if $(word 2,$(modname)),$(basetarget),$(modname)))
原来是在Makefile.lib中定义KBUILD_MODNAME 这个宏
举个例子
obj-m += foo.o
obj-m += bar.o
在这个makefile中KBUILD_MODNAME就会是foo后者bar
这样在编译的过程中产生的cmd文件中可以看到这个宏
kernel/events/.core.o.cmd:1:cmd_kernel/events/core.o := aarch64-linux-gnu-gcc -Wp,-MD,kernel/events/.core.o.d -nostdinc -isystem /home/tiantao/toolchain/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/include -I./arch/arm64/include -I./arch/arm64/include/generated -I./include -I./arch/arm64/include/uapi -I./arch/arm64/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/kconfig.h -include ./include/linux/compiler_types.h -D__KERNEL__ -mlittle-endian -DKASAN_SHADOW_SCALE_SHIFT=3 -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration -Werror=implicit-int -Wno-format-security -std=gnu89 -mgeneral-regs-only -DCO