LINUX 內核源文件介紹以及頭文件介紹

http://www.cnblogs.com/laojie4321/archive/2012/03/30/2425357.html

*******************LINUX 內核(0.11)源文件介紹******************

1、內核源文件放置目錄:

|
|————boot 系統引導彙編程序目錄
|
|————fs 文件系統目錄
|
|————include 頭文件目錄
|
|————init 內核初始化程序目錄
|
|————kernel 內存進程調度、信號處理、系統調用等程序的目錄
|
|————lib 內核庫函數目錄
|
|————mm 內存管理程序目錄
|
|————tools 生成內核Image文件的工具程序目錄
|
|————Makefile文件
|


2、引導啓動程序目錄boot
包含3個彙編語言文件,是內核源文件中最先被編譯的程序
功能:當計算機加電時引導內核啓動,將內核代碼加載到內存中,並完成系統初始化工作。

boot
|
|————bootsect.s 磁盤引導塊程序,編譯後會駐留在磁盤的第一個扇區中
|
|————setup.s 讀取機器的硬件配置參數,並把內核模式system移動到適當的內存位置處
|
|————head.s 會被編譯連接在system模塊的最前部分,主要進行硬件設備的探測配置和內存管理頁面的配置工作
|


3、文件系統目錄fs
包含17個C語言程序
fs
|
|——buffer.c 管理高速緩衝區
|
|——file_table.c 在0.11僅定義了一個文件句柄(描述符)結構數組
|
|——ioctl.c 將引用kernel/chr_dev/tty.c中的函數,實現字符設備的IO控制功能
|
|——exec.c 主要包含一個執行程序函數do_execve()
|
|——fcntl.c 實現文件I/O控制的系統調用函數
|
|——read_write.c 實現文件讀/寫和定位的三個系統調用函數
|
|——stat.c 實現了兩個獲取文件狀態的系統調用函數
|
|——open.c 主要包含實現修改文件屬性和創建與關閉文件的系統調用函數
|
|——char_dev.c 主要包含字符設備讀寫函數rw_char()
|
|——pipe.c 包含管道讀寫函數和創建管道的系統調用函數
|
|——file_dev.c 包含基於i節點和描述符結構的文件讀寫函數。 
|
|——namei.c 主要包括文件系統中目錄名和文件名的操作函數和系統調用函數
|
|——block_dev.c 包含塊數據讀和寫函數
|
|——inode.c 包含針對文件系統i節點操作的函數
|
|——truncate.c 用於在刪除文件時釋放文件所佔用的設備數據空間
|
|——bitmap.c 用於處理文件系統中i節點和邏輯數據塊的位圖
|
|——super.c 包含對文件系統超級塊的處理函數
|


4、頭文件主目錄include

有32個.h文件,其中主目錄下有13個,sam子目錄中有4個,sys子目錄中有5個,linux子目錄中有10個

include
|
|——a.out.h a.out頭文件,定義了a.out執行文件格式和一些宏
|
|——const.h 常數符號頭文件,目前僅定義了i節點中i_mode字段的各標誌位
|
|——ctype.h 字符類型頭文件。定義了一些有關字符類型判斷和轉換的宏
|
|——errno.h 錯誤號頭文件。包含系統中各種出錯號
|
|——fcntl.h 文件控制頭文件。用於文件及其描述符的操作控制常數符號的定義
|
|——signal.h 信號頭文件。定義信號符號常量,信號結構以及信號操作函數原型
|
|——stdarg.h 標準參數頭文件。以宏的形式定義變量參數列表。定義了一個類型(va_list)和三個宏(va_start,va_arg和va_end),用於vsprintf、vprintf、vfprintf函數
|
|——stddef.h 標準定義頭文件。定義了NULL,offsetof(TYPE,MEMBER)
|
|——string.h 字符串頭文件。主要定義了一些有關字符串操作的嵌入函數
|
|——termios.h 終端輸入輸出函數頭文件。主要定義控制異步通信口的終端接口
|
|——time.h 時間類型頭文件。最主要定義了tm結構和一些有關時間的函數原形
|
|——unistd.h Linux 標準頭文件。定義了各種符號常數和類型,並申明瞭各種函數,如__LIBRARY__,則還包括系統調用號和內嵌彙編_syscall()等
|
|——utime.h 用戶時間頭文件。定義了訪問和修改時間結構以及utime()原型。
|
|——asm 主要定義了一些與CPU體系結構密切相關的數據結構、宏函數和變量
| |
| |——asm/io.h io頭文件。以宏的嵌入彙編程序形式定義對io端口操作的函數
| |
| |——asm/memory.h 內存拷貝頭文件。包含memcpy()嵌入式彙編宏函數 
| |
| |——asm/segment.h 段操作頭文件。定義了有關段寄存器操作的嵌入式彙編函數
| |
| |——asm/system.h 用戶時間頭文件。定義了訪問和修改時間結構以及utime()原型
| |

|
|——linux 
| |
| |——linux/config.h 內核配置頭文件。定義鍵盤語言和硬盤類型(HD_TYPE)可選項
| |
| |——linux/fdreg.h 軟驅頭文件。含有軟盤控制器參數的一些定義
| |
| |——linux/fs.h 文件系統頭文件。定義文件表結構
| |
| |——linux/hdreg.h 硬盤參數頭文件。定義訪問硬盤寄存器端口,狀態碼,分區表等信息
| |
| |——linux/head.h head頭文件。定義了段描述符的簡單結構,和幾個選擇符常量
| |
| |——linux/kernek.h 內核頭文件。含有一些內核常用函數的原形定義
| |
| |——linux/mm.h 內存管理頭文件。含有頁面大小定義和一些頁面釋放函數原型
| |
| |——linux/sched.h 調度程序頭文件,定義了任務結構task_struct、初始任務0的數據,還有一些有關描述參數設置和獲取的嵌入式彙編函數宏語句
| |
| |——linux/sys.h 系統調用頭文件。含有72個系統調用C函數處理程序,以sys_開頭
| |——linux/tty.h tty頭文件,定義了有關tty_io,串行通信方面的參數、常數
| |
|

|——sys
| |
| |——sys/stat.h 文件狀態頭文件。含有文件或文件系統狀態結構stat{}和常量
| |
| |——sys/times.h 定義了進程中運行時間結構tms以及times()函數原型
| |
| |——sys/types.h 類型頭文件。定義了基本的系統數據類型
| |
| |——sys/utsname.h 系統名稱結構頭文件
| |
| |——sys/wait.h 等待調用頭文件。定義系統調用wait()核waitpid()及相關常數符號
| |
|


5、內核初始化程序目錄init
該目錄下僅包含一個文件main.c。用於執行內核所有的初始化工作,然後移到用戶模式創建新進程,並在控制檯設備上運行shell程序。


6、內核程序主目錄kernel
包含了12個代碼文件和一個Makefile文件,另外還有3個子目錄blk_dev、chr_dev、math。

kernel
|
|——asm.s 用於處理系統硬件異常所引起的中斷,對各硬件異常的實際處理程序則是在traps.c文件中,在各個中斷處理程序中,將分別調用traps.c中相應的C語言處理函數
|
|——exit.c 主要包括用於處理進程終止的系統調用,包括進程釋放、會話(進程組)終止和程序退出處理函數以及殺死進程、終止進程、掛起進程等系統調用函數。
|
|——fork.c 給出了sys_fork()系統調用中使用了兩個C語言函數:find_empty_process()和copy_process()。
|
|——mktime.c 包含一個內核使用的時間函數mktime(),用於計算機從1970年1月1日0時起到開機當日的秒數,作爲開機描述。僅在inti/main.c 中被調用一次
|
|——pani.c 包含一個顯示內核出錯信息並停機的函數panic()
|
|——printk.c 包含一個內核專用信息顯示函數printk()
|
|——sched.c 包含有關調度的基本函數(sleep_on、wakeup、schedule等)以及一些簡單的系統調用函數,另外還有幾個與定時相關的軟盤操作函數
|
|——signal.c 包含了有關信號處理的4個系統調用以及一個在對應的中斷處理程序中處理信號的函數do_signal()
|
|——sys.c 包含了很多系統調用函數,其中有些還沒有實現
|
|——system_call.s 實現了Linux系統調用(int 0x80)的接口處理過程,實際的處理過程則包含在個系統調用相應的C語言處理函數中,這些處理函數分佈在整個Linux內核代碼中。
|
|——vsprintf.c 實現了現在已經歸入標準庫函數中的字符串格式化函數
|
|
|——blk_dev 子目錄 塊設備驅動程序
| |
| |——hd.c 實現對硬盤數據塊進行讀/寫的底層驅動函數,主要是do_hd_request()函數
| |
| |——floppy.c 主要實現了對軟盤數據塊的讀/寫驅動函數,主要是do_fd_request()函數。
| |
| |——ll_rw_blk.c 實現了低層塊設備數據讀/寫函數ll_rw_block(),內核中所有其他程序都是通過該函數對塊設備進行數據讀寫操作。
| |
|
|——chr_dev 子目錄 字符設備驅動程序子目錄
| |
| |——tty_io.c 包含tty字符設備讀函數tty_read()和寫函數tty_write(),爲文件系統提供了上層訪問接口。另外還包括在串行中中斷處理過程中調用的C函數do_tty_interrupt(),該函數將會在中斷類型爲讀字符的處理中被調用。
| |
| |——console.c 主要包含控制檯初始化程序和控制檯寫函數con_write(),用於被tty設備調用。還包含對顯示器和鍵盤中斷的初始化設置程序con_init()。
| |
| |——rs_io.s 由於實現兩個串行接口的中斷處理程序。該中斷處理程序會根據從中斷標識寄存器中取得的4種中斷類型分別進行處理,並在處理中斷類型爲讀字符的代碼中調用do_tty_interrupt().
| |
| |——serial.c 用於對異步串行通信芯片UART進行初始化操作,並設置兩個通信端口的中斷向量。另外還包括tty用於往串口輸出的rs_write()函數。
| |
| |——tty_ioctl.c 實現了tty的io控制接口函數tty_ioctl()以及對termio(s)終端Io結構的讀寫函數,並會在實現系統調用sys_ioctl()的fs/ioctl.c程序中被調用
| |
| |——keyboard.s 主要實現了鍵盤中斷處理過程keyboard_interrupt.
| |
|
|
|
|——math子目錄 協處理器仿真和操作程序子目錄
| |
| |
| |——math_emulate.c 是中斷int7的中斷處理程序調用的C函數。
| |
|
|——lib子目錄 內核庫函數目錄lib主要用於用戶編程調用,是編譯系統標準庫的接口函數之一。
| |
| |——Makefile 文件
| |
| |——_exit.c 包含內核使用的程序終止函數void _exit(int exit_code)
| |
| |——close.c 
| |
| |——ctype.c
| |
| |——dup.c
| |
| |——errno.c
| |
| |——execve.c
| |
| |——malloc.c
| |
| |——open.c
| |
| |——setsid.c
| |
| |——string.c
| |
| |——wait.c
| |
| |——write.c
| |
| |
|


7、內存管理程序目錄

mm 
|
|——page.s 包括內存頁面異常中斷(int 14)處理程序,主要用於處理程序由於缺頁而引起的頁異常中斷和訪問非法地址而引起的頁保護
|
|——memory.c 包括對內存進行初始化的函數mem_init(),由page.s的內存處理中斷過程調用的do_no_page()和do_wp_page()函數。在創建新進城而執行復制進城操作時,即使用該文件中的內存處理函數來分配管理內存空間。
|
|

8、編譯內核工具程序目錄tools
該目錄下的build.c程序用於將Linux各個目錄中被分別編譯生成的目標代碼連接合併成一個可運行的內核映像文件Image.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章