首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux内核中具有相同签名的函数

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

Stack Overflow用户
提问于 2018-12-24 05:36:07
回答 1查看 86关注 0票数 1

考虑一下函数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#L2665https://elixir.bootlin.com/linux/v4.14/source/mm/percpu.c#L2696

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

EN

回答 1

Stack Overflow用户

发布于 2018-12-24 07:56:00

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

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

代码语言:javascript
复制
config HAVE_SETUP_PER_CPU_AREA
        def_bool y

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

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

编辑:

如果未启用CONFIG_SMP,则arch/x86/kernel/Makefile中的此设置将阻止包含特定于x86的setup_per_cpu_areas

代码语言:javascript
复制
obj-$(CONFIG_SMP)               += setup_percpu.o

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53907339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档