1. 程式人生 > >Linux原始碼目錄結構和Linux檔案系統目錄結構

Linux原始碼目錄結構和Linux檔案系統目錄結構

學習Linux也有一段時間了,具體來整理一下Linux原始碼的目錄結構和檔案系統的目錄結構,以便加深記憶。

一、Linux原始碼的目錄結構

首先上一張截圖,如下所示:


再看各個檔案的介紹,借用一下其他資源。

arch:這個為目錄是架構相關,裡面存放了許多CPU架構,比如arm,x86,MIPS,PPC等,

處理器原廠提供一套Linux核心的原始碼,那麼在這個目錄下都有一套針對具體處理器CPU的子目錄。每個CPU的子目錄,又進一步分解為boot,mm,kernel等子目錄,分別控制系統引導,記憶體管理,系統呼叫,動態調頻,主頻率設定部分等。
在arch目錄中有關鍵的平臺檔案。任何一款支援Linux的處理器,都有一部分核心程式碼是針對特定的處理器來提供的,具體的實現就是通過平臺檔案。
迅為4412的平臺檔案,是arch→arm→mach-exynos→mach-itop4412.c。
arch→arm→boot目錄,預設編譯生成的核心映象是在這個目錄下。
在arch→arm→kernel目錄中,有針對具體CPU處理器的程式碼,有相關核心特性實現方式,如訊號處理等。這一部分當然是晶片廠商做好了,4412的這部分就是三星已經做好的部分。
在arch→arm→lib目錄中,有一些和硬體相關庫函式,後面學習驅動的時候會使用到。

在arch→arm→tools目錄中,包含了生成映象的工具。


block:在linux中block表示塊裝置(以塊(多個位元組組成的整體,類似於扇區)為單位來整體訪問),譬如說SD卡、iNand、Nand、硬碟等都是塊裝置。你幾乎可以認為塊裝置就是儲存裝置。block目錄下放的是一些linux儲存體系中關於塊裝置管理的程式碼。

crypto:英文意思是加密。這個目錄下放了一些各種常見的加密演算法的C語言程式碼實現。譬如crc32、md5、sha1等。

Documentation:裡面放了一些文件。

drivers:驅動目錄,裡面分門別類的列出了linux核心支援的所有硬體裝置的驅動原始碼。就是需要重點學習的部分。

firmware:韌體。什麼是韌體?韌體其實是軟體,不過這個軟體是固話到IC裡面執行的叫韌體:就像S5PV210裡的iROM程式碼。

fs:fs就是file system,檔案系統,裡面列出了linux支援的各種檔案系統的實現。

include:標頭檔案目錄,公共的(各種CPU架構共用的)標頭檔案都在這裡。每種CPU架構特有的一些標頭檔案在arch/arm/include目錄及其子目錄下。

init:init是初始化的意思,這個目錄下的程式碼就是linux核心啟動時初始化核心的程式碼。


如下圖所示,部分目錄如下。下面的這些目錄,幾乎不需要我們去動其中任何一個檔案。

ipc:ipc就是inter process commuication,程序間通訊,裡面都是linux支援的IPC的程式碼實現。

kernel:kernel就是核心,就是linux核心,所以這個資料夾下放的就是核心本身需要的一些程式碼檔案。

lib:lib是庫的意思,這裡面都是一些公用的有用的庫函式,注意這裡的庫函式和C語言的庫函式不一樣的。在核心程式設計中是不能用C語言標準庫函式,這裡的lib目錄下的庫函式就是用來替代那些標準庫函式的。譬如在核心中要把字串轉成數字用atoi,但是核心程式設計中只能用lib目錄下的atoi函式,不能用標準C語言庫中的atoi。譬如在核心中要列印資訊時不能用printf,而要用printk,這個printk就是我們這個lib目錄下的。
mm:mm是memory management,記憶體管理,linux的記憶體管理程式碼都在這裡。
net:該目錄下是網路相關的程式碼,譬如TCP/IP協議棧等都在這裡。


scripts:指令碼,這個目錄下全部是指令碼檔案,這些指令碼檔案不是linux核心工作時使用的,而是用來輔助對linux核心進行配置編譯生產的。我們並不會詳細進入分析這個目錄下的指令碼,而是通過外圍來重點學會配置和編譯linux核心即可。
security:安全相關的程式碼。不用去管。
sound:音訊處理相關的。
tools:linux中用到的一些有用工具
usr:目錄下是initramfs相關的,和linux核心的啟動有關,暫時不用去管。


virt:核心虛擬機器相關的,暫時不用管。
Kbuild:Kbuild是kernel build的意思,就是核心編譯的意思。這個檔案就是linux核心特有的核心編譯體系需要用到的檔案。
Makefile:這個是linux核心的總makefile,整個核心工程用這個Makefile來管理的。

二、檔案系統目錄結構

先上圖,如下圖所示:


1、/-
每一個檔案和目錄從根目錄開始。

只有root使用者具有該目錄下的寫許可權。請注意,/root是root使用者的主目錄,這與/.不一樣

2、/bin中 - 使用者二進位制檔案

包含二進位制可執行檔案。
在單使用者模式下,你需要使用的常見Linux命令都位於此目錄下。系統的所有使用者使用的命令都設在這裡。

例如:ps、ls、ping、grep、cp

3、/sbin目錄 - 系統二進位制檔案

就像/bin,/sbin同樣也包含二進位制可執行檔案。

但是,在這個目錄下的linux命令通常由系統管理員使用,對系統進行維護。例如:iptables、reboot、fdisk、ifconfig、swapon命令

4、/etc - 配置檔案

包含所有程式所需的配置檔案。
也包含了用於啟動/停止單個程式的啟動和關閉shell指令碼。例如:/etc/resolv.conf、/etc/logrotate.conf

hosts:裝置名稱(或域名)到ip地址的解析,相當於本地存在的dns功能。

5、/dev - 裝置檔案

包含裝置檔案。

這些包括終端裝置、USB或連線到系統的任何裝置。例如:/dev/tty1、/dev/usbmon0

6、/proc - 程序資訊

包含系統程序的相關資訊。
這是一個虛擬的檔案系統,包含有關正在執行的程序的資訊。例如:/proc/{pid}目錄中包含的與特定pid相關的資訊。

這是一個虛擬的檔案系統,系統資源以文字資訊形式存在。例如:/proc/uptime

7、/var - 變數檔案

var代表變數檔案。
這個目錄下可以找到內容可能增長的檔案。

這包括 - 系統日誌檔案(/var/log);包和資料庫檔案(/var/lib);電子郵件(/var/mail);列印佇列(/var/spool);鎖檔案(/var/lock);多次重新啟動需要的臨時檔案(/var/tmp);

8、/tmp - 臨時檔案

包含系統和使用者建立的臨時檔案。

當系統重新啟動時,這個目錄下的檔案都將被刪除。

9、/usr - 使用者程式

包含二進位制檔案、庫檔案、文件和二級程式的原始碼。
/usr/bin中包含使用者程式的二進位制檔案。如果你在/bin中找不到使用者二進位制檔案,到/usr/bin目錄看看。例如:at、awk、cc、less、scp。
/usr/sbin中包含系統管理員的二進位制檔案。如果你在/sbin中找不到系統二進位制檔案,到/usr/sbin目錄看看。例如:atd、cron、sshd、useradd、userdel。
/usr/lib中包含了/usr/bin和/usr/sbin用到的庫。

/usr/local中包含了從源安裝的使用者程式。例如,當你從源安裝Apache,它會在/usr/local/apache2中

10、/home - HOME目錄

所有使用者用home目錄來儲存他們的個人檔案。

例如:/home/john、/home/nikita

11、/boot - 引導載入程式檔案

包含引導載入程式相關的檔案。
核心的initrd、vmlinux、grub檔案位於/boot下。

例如:initrd.img-2.6.32-24-generic、vmlinuz-2.6.32-24-generic

12、/lib - 系統庫

包含支援位於/bin和/sbin下的二進位制檔案的庫檔案.
庫檔名為 ld*或lib*.so.*

例如:ld-2.11.1.so,libncurses.so.5.7

13、/opt - 可選的附加應用程式

opt代表可選的。
包含從個別廠商的附加應用程式。

附加應用程式應該安裝在/opt/或者/opt/的子目錄下。

14、/mnt - 掛載目錄

臨時安裝目錄,系統管理員可以掛載檔案系統。15、/media - 可移動媒體裝置
用於掛載可移動裝置的臨時目錄。
舉例來說,掛載CD-ROM的/media/cdrom,掛載軟盤驅動器的/media/floppy;16、/srv - 服務資料
srv代表服務。
包含伺服器特定服務相關的資料。
例如,/srv/cvs包含cvs相關的資料。