Linux核心完全剖析---標頭檔(1)

來源:互聯網
上載者:User

程式在使用一個函數之前,應該首先聲明該函數。為了便於使用,通常的做法是把同一類函數或資料結構以及常數的聲明放在一個標頭檔(header file)中。標頭檔中也可以包括任何相關的類型定義和宏(macros)。在程式原始碼檔案中則使用預先處理指令“#include”來引用相關的標頭檔。
程式中如下形式的一條控制行語句將會使得該行被檔案filename的內容替換掉:

# include

當然,檔案名稱filename中不能包含 > 和換行字元以及 "、'、\、或 /* 字元。編譯系統會在定義的一系列地方搜尋這個檔案。類似地,下面形式的控制行會讓編譯器首先在來源程式所在目錄中搜尋filename檔案:

# include "filename"

如果沒有找到,編譯器再執行同上面一樣的搜尋過程。在這種形式中,檔案名稱filename中不能包含換行字元和 "、'、\、或 /* 字元,但允許使用 > 字元。

在一般應用程式原始碼中,標頭檔與開發環境中的庫檔案有著不可分割的緊密聯絡,庫中的每個函數都需要在標頭檔中加以聲明。應用程式開發環境中的標頭檔(通常放置在系統/usr/include/目錄中)可以看作是其所提供函數庫(例如libc.a)中函數的一個組成部分,是庫函數的使用說明或介面聲明。在編譯器把原始碼程式轉換成目標模組後,連結程式(linker)會把程式所有的目標模組組合在一起,包括用到的任何庫檔案中的模組。從而構成一個可執行檔程式。

對於標準C函數庫來講,其最基本的標頭檔有15個。每個標頭檔都表示出一類特定函數的功能說明或結構定義,例如I/O操作函數、字元處理函數等。有關標準函數庫的詳細說明及其實現可參照Plauger編著的《The Standard C Library》一書。

而對於本書所描述的核心原始碼,其中涉及的標頭檔則可以看作是對核心及其函數庫所提供服務的一個概要說明,是核心及其相關程式專用的標頭檔。在這些標頭檔中主要描述了核心所用到的所有資料結構、初始化資料、常數和宏定義,也包括少量的程式碼。除了幾個專用的標頭檔以外(例如塊裝置標頭檔blk.h),Linux 0.12核心中所用到的標頭檔都放在核心代碼樹的include/目錄中。因此編譯Linux 0.12核心無需使用開發環境提供的位於/usr/include/目錄下的任何標頭檔。當然,tools/build.c程式除外。因為這個程式雖然被包含在核心原始碼樹中,但它只是一個用於組合建立核心映像檔案的工具程式或應用程式,不會被連結到核心代碼中。

從0.95版開始,核心代碼樹中的標頭檔需要複製到/usr/include/linux目錄下才能順利地編譯核心。即從該版核心開始標頭檔已經與開發環境使用的標頭檔合二為一。

14.1 include/目錄下的檔案

核心所用到的標頭檔都儲存在include/目錄下。該目錄下的檔案如表11-1所示。這裡需要說明一點:為了方便使用和相容性,Linus在編製核心程式標頭檔時所使用的命名方式與標準C庫標頭檔的命名方式相似,許多標頭檔的名稱甚至其中的一些內容都與標準C庫的標頭檔基本相同,但這些核心標頭檔仍然是核心原始碼或與核心有緊密聯絡的程式專用的。在一個Linux系統中,它們與標準庫的標頭檔並存。通常的做法是將這些標頭檔放置在標準庫標頭檔目錄中的子目錄下,以讓需要用到核心資料結構或常數的程式使用。

另外,也由於著作權問題,Linus試圖重新編製一些標頭檔以取代具有著作權限制的標準C庫的標頭檔。因此這些核心原始碼中的標頭檔與開發環境中的標頭檔有一些重疊的地方。在Linux系統中,列表14-1中的asm/、linux/和sys/三個子目錄下的核心標頭檔通常需要複製到標準C庫標頭檔所在的目錄(/usr/include)中,而其他一些檔案若與標準庫的標頭檔沒有衝突則可以直接放到標準庫標頭檔目錄下,或者改放到這裡的三個子目錄中。

asm/目錄下主要用於存放與電腦體繫結構密切相關的函式宣告或資料結構的標頭檔。例如Intel CPU 連接埠IO彙編宏檔案io.h、中斷描述符設定彙編宏標頭檔system.h等。linux/目錄下是Linux核心程式使用的一些標頭檔。其中包括發送器使用的標頭檔sched.h、記憶體管理標頭檔mm.h和終端管理資料結構檔案tty.h等。而sys/目錄下存放著幾個與核心資源相關標頭檔。不過從0.98版開始,核心分類樹下sys/目錄中的標頭檔被全部移到了linux/目錄下。

Linux 0.12版核心中共有32個標頭檔(*.h),其中asm/子目錄中含有4個,linux/子目錄中含有10個,sys/子目錄中含有5個。從下一節開始我們首先描述include/目錄下的13個標頭檔,然後依次說明每個子目錄中的檔案。說明順序按照檔案名稱排序進行。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.