gpt4 book ai didi

c - linux内核中具有相同签名的函数

转载 作者:太空宇宙 更新时间:2023-11-04 01:45:49 24 4
gpt4 key购买 nike

考虑函数 setup_per_cpu_areas。体系结构特定代码中有一个定义:https://elixir.bootlin.com/linux/v4.14/source/arch/x86/kernel/setup_percpu.c#L166 .这里还有一个在体系结构独立代码中定义的:https://elixir.bootlin.com/linux/v4.14/source/mm/percpu.c#L2665或此处:https://elixir.bootlin.com/linux/v4.14/source/mm/percpu.c#L2696 .

构建内核后,内核镜像中使用了哪一个?内核源代码中有很多这样的情况,那么一般来说这样的模式有什么用呢?

最佳答案

您引用的第一个版本是特定于 x86 体系结构的版本。 x86 架构的 .config 定义了预处理器符号 CONFIG_HAVE_SETUP_PER_CPU_AREA。请注意,您引用的第二个链接是在定义该符号时使用的。 (第三个版本在未定义 CONFIG_SMP 时使用,因此也不适用于此 x86 配置。)

Linux 内核内置了一个相当复杂和健壮的配置系统。查看分布在整个内核源代码树中的名为 Kconfig 的文件。特别是,arch/x86/Kconfig 有这个金 block :

config HAVE_SETUP_PER_CPU_AREA
def_bool y

这基本上是说“在构建 x86 时无条件地将 HAVE_SETUP_PER_CPU_AREA 符号定义为 True”。

总之,您的内核 .config 文件中的设置选择了许多功能,有时通过定义或不定义符号来取消选择其他功能。这些符号用于选择编译和链接的代码。一些设置在您的控制之下(尝试 make menuconfig 以查看这些设置);其他由每个体系结构的默认值指定。

编辑:
如果未启用 CONFIG_SMParch/x86/kernel/Makefile 中的此设置会阻止包含 x86 特定的 setup_per_cpu_areas:

obj-$(CONFIG_SMP)               += setup_percpu.o

内核 makefile 系统根据 CONFIG_SMP 的定义将其转换为 obj-nobj-y

关于c - linux内核中具有相同签名的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53907339/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com