2012-03-21 63 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