2012-03-21 94 views
6

当我在读系统调用时,我搜索了syscalls.h以在LXR中查找头文件。搜索结果让我感到困惑。有12打来自arch/_arch_name_/include/asm目录下的syscalls.h文件。这些都没问题,它们是架构特定的定义或其他需要的东西。问题是为什么我们在include/linuxinclude/asm-generic下有两个不同的syscalls.h标题?Linux内核头文件的组织

此外,我想知道什么include/linux标头是什么和include/asm-generic标头的用途。他们如何区分对方?有两个独立的头文件夹后面的逻辑是什么?它们如何相互关联?

由于

+1

你看过每个这些文件吗? – 2012-03-21 06:18:01

+1

在/include/linux/syscalls.h中,有几个系统调用声明。在/include/asm-generic/syscalls.h中,所有的系统调用都是通过附带的宏定义来声明的。但是,这只适用于syscalls.h,但是,我想了解大图。 – dirtybit 2012-03-21 06:46:54

回答

6

我在Kernel Newbies ML提问这个问题。我得到了以下的答案,这使得事情说清楚:

吉汉吉尔Akturk写道:

据我所知,在/发现头在include/asm的泛型目录是 architechture独立的(可能是整个架构共享)代码。 您很可能不需要直接包含这些标头,而是通过 标头间接地包含这些标头。

OTOH,/ include/linux目录是用于通用头文件来定义内核组件之间的接口 。在大多数情况下,您将在这些头文件中找到所需的所有内核功能。

关于,chngr。

1

在目录arch/_arch_name_/include/asm标头是特定体系结构相关的,如用于x86,ARM架构。所以内部的逻辑是特定于平台的,并且高度依赖于底层硬件。你将只包含你的平台架构。

include/linux中的标题是常见的且与平台无关。它们是通用的逻辑,并且将是共享的交叉体系结构。

+0

另一个问题是除include/linux头之外还有include/asm-generic的原因是什么?它们之间的关系是什么? – dirtybit 2012-03-22 07:33:14

+0

我的意见是'include/asm-generic'提供了一个通用和统一的接口来访问硬件相关的数据结构。 'include/asm-generic'允许开发人员更容易地控制底层硬件,无需挖掘硬件规格细节。例如,'include/asm-generic/rtc.h'提供了一个统一的接口来检索rtc信息,但是它的实现包含了与结构相关的代码,如'CMOS_WRITE'和'CMOS_READ'。 – Wayne 2012-03-22 13:40:06