KERNEL_Makefile.modpos.doc

本文详细解析了模块编译过程中的依赖关系,包括如何通过modpost生成所需的*.mod.c文件,以及如何从模块编译第一阶段生成的endpointdd.mod文件中提取模块名,并最终生成目标对象文件endpointdd.ko。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//默认目标的第一依赖对象__modpost,为第二个依赖对象生成所需要的*.mod.c文件,其中

//第二依赖对象就是我们最终需要的endpointdd.ko文件

_modpost:__modpost


includeinclude/config/auto.conf

includescripts/Kbuild.include

includescripts/Makefile.lib


//从模块编译第一阶段中(就是执行KERNEL_make_modules)生成的endpointdd.mod文件

//中提取模块名,则 modules =endpointdd.ko

__modules:= $(sort $(shell grep -h '\.ko' /dev/null $(wildcard$(MODVERDIR)/*.mod)))

modules := $(patsubst %.o,%.ko, $(wildcard $(__modules:.ko=.o)))


//默认目标的第二依赖对象endpointdd.ko,就是我们所需要的最终对象文件

_modpost:$(if $(KBUILD_MODPOST_NOFINAL), $(modules:.ko:.o),$(modules))


//modpost的主处理过程,其中modpost是一个可执行程序,生成第二依赖对象所需要的

//*.mod.c文件

modpost= scripts/mod/modpost \

$(if$(CONFIG_MODVERSIONS),-m) \

$(if$(CONFIG_MODULE_SRCVERSION_ALL),-a,) \

$(if$(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \

$(if$(KBUILD_EXTMOD),-I $(modulesymfile)) \

$(if$(KBUILD_EXTRA_SYMBOLS), $(patsubst %, -e %,$(KBUILD_EXTRA_SYMBOLS)))\

$(if$(KBUILD_EXTMOD),-o $(modulesymfile)) \

$(if$(CONFIG_DEBUG_SECTION_MISMATCH),,-S) \

$(if$(CONFIG_MARKERS),-K $(kernelmarkersfile)) \

$(if$(CONFIG_MARKERS),-M $(markersfile)) \

$(if$(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w) \

$(if$(cross_build),-c)


//modpost命令

cmd_modpost= $(modpost) -s


//$(modules:.ko=.o) = endpointdd.o,在模块编译第一阶段已经生成了

//这里执行第一依赖对象的编译

__modpost:$(modules:.ko=.o) FORCE

//执行处理,最终是使用modpost生成所需要的*.mod.c文件

$(callcmd,modpost) $(wildcard vmlinux) $(filter-out FORCE,$^)


//endpointdd.mod.o文件生成,其中依赖的*.mod.cmodpost生成

$(modules:.ko=.mod.o):%.mod.o: %.mod.c FORCE

//使用gcc生成*.mod.o文件

$(callif_changed_dep,cc_o_c)


//第二依赖最终的目标对象endpointdd.ko,这里依赖endpointdd.mod.o文件

$(modules):%.ko :%.o %.mod.o FORCE

//使用ld命令生成最终的endpointdd.ko文件

$(callif_changed,ld_ko_o)

fs/btrfs/free-space-tree.o: warning: objtool: convert_free_space_to_bitmaps.cold.14()+0x0: frame pointer state mismatch fs/btrfs/free-space-tree.o: warning: objtool: convert_free_space_to_extents.cold.15()+0x0: frame pointer state mismatch fs/btrfs/free-space-tree.o: warning: objtool: remove_from_free_space_tree.cold.16()+0x0: frame pointer state mismatch fs/btrfs/free-space-tree.o: warning: objtool: add_to_free_space_tree.cold.17()+0x0: frame pointer state mismatch fs/btrfs/free-space-tree.o: warning: objtool: btrfs_create_free_space_tree.cold.18()+0x0: frame pointer state mismatch fs/btrfs/free-space-tree.o: warning: objtool: btrfs_clear_free_space_tree.cold.19()+0x0: frame pointer state mismatch fs/btrfs/free-space-tree.o: warning: objtool: add_block_group_free_space.cold.20()+0x0: frame pointer state mismatch fs/btrfs/free-space-tree.o: warning: objtool: remove_block_group_free_space.cold.21()+0x0: frame pointer state mismatch LD [M] fs/btrfs/btrfs.o CC kernel/delayacct.o kernel/relay.o: warning: objtool: relay_hotcpu_callback.cold.18()+0x0: frame pointer state mismatch kernel/relay.o: warning: objtool: relay_close.cold.19()+0x0: frame pointer state mismatch make: *** [fs] Error 2 CC kernel/taskstats.o CC kernel/tsacct.o kernel/rcutree.o: warning: objtool: rcu_check_callbacks.cold.59()+0x0: frame pointer state mismatch CC kernel/tracepoint.o CC kernel/elfcore.o CC kernel/irq_work.o CC kernel/user-return-notifier.o kernel/tracepoint.o: warning: objtool: tracepoint_add_probe.cold.12()+0x0: frame pointer state mismatch CC kernel/padata.o CC kernel/crash_dump.o CC kernel/jump_label.o CC kernel/iomem.o CC kernel/memremap.o LD kernel/built-in.o
最新发布
07-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值