(1) 核心專案太龐大,除錯困難,引入新的除錯方法。
(2) proc檔案系統的思路是:在核心中構建乙個虛擬檔案系統/proc,核心執行時將核心中一些關鍵的資料結構以檔案的方式呈現在/proc目錄下的一些特定檔案中, 這樣相當於將不可見的核心中的資料結構以視覺化的方式呈現給核心開發者。
(3) proc檔案系統給了開發者一種除錯核心的方法:我們通過實時的觀察/proc/***檔案,來**核心中特定資料結構的值。在我們新增乙個新功能的前後來對比,就可以知道這個新功能產生的影響對還是不對。
(4)proc目錄下的檔案大小都是0,因為這些檔案本身並不存在於硬碟中,它也不是乙個真實檔案,它只是乙個介面,當我們去讀取這個檔案時,其實核心並不是去硬碟上找這個檔案,而是對映為核心內部乙個資料結構被讀取並且格式化成字串返回給我們。 所以儘管我們看到的還是乙個檔案內容字串,和普通檔案一樣的,但是實際上我們知道這個內容是實時的從核心資料結構中讀取的,而不是硬碟中的。
(1)sys檔案系統本質上和proc檔案系統是一樣的,都是虛擬檔案系統,都在根目錄下有個目錄(乙個是/proc目錄,另乙個是/sys目錄),因此都不是硬碟中的檔案,都是核心中的資料結構的視覺化介面。
(2)不同的是/proc中的檔案只能讀,但是/sys中的檔案可以讀寫。讀/sys中的檔案就是獲取核心中資料結構的值,而寫入/sys中的檔案就是設定核心中的資料結構的元素的值。
(3)歷史上剛開始先有/proc檔案系統,人們希望通過這種技術來除錯核心。實際做出來後確實很有用,所以很多核心開發者都去核心除錯**向/proc目錄中寫檔案,而且剛開始的時候核心管理者對proc目錄的使用也沒有什麼經驗也沒什麼統一規劃,後來的結果就是proc裡面的東西又多又雜亂。
(4)後來覺得proc中的內容太多太亂缺乏統一規劃,於是乎又新增了sys目錄。sys檔案系統一開始就做了很好的規劃和約定,所以後來使用sys目錄時有了規矩。
(1)建立目錄
struct proc_dir_entry *proc_mkdir(const char *name, struct proc_dir_entry *parent);
引數1:name就是要建立的資料夾名稱。
引數2:parent是要建立節點的父節點。也就是要在哪個資料夾之下建立新資料夾,需要將那個資料夾的proc_dir_entry傳入。
如果是在/proc目錄下建立資料夾,parent為null。
(2)proc檔案的建立
static inline struct proc_dir_entry *proc_create(const char *name, mode_t mode, struct proc_dir_entry *parent, const struct file_operations *proc_fops);
引數1:name就是要建立的檔名。
引數2:mode是檔案的訪問許可權,以ugo的模式表示(如0666)。
引數3:parent與proc_mkdir中的parent類似。也是父資料夾的proc_dir_entry物件。
引數4:proc_fops就是該檔案的操作函式了。
(3)proc檔案的刪除
remove_proc_entry(const char *name, struct proc_dir_entry *parent);
Linux下proc檔案系統詳解 proc
proc檔案系統是乙個偽檔案系統,它只存在記憶體當中,而不占用外存空間。它以檔案系統的方式為訪問系統核心資料的操作提供介面。使用者和應用程式可以通過proc得到系統的資訊,並可以改變核心的某些引數。這裡將介紹如何從 proc檔案系統中獲取與防火牆相關的一些效能引數,以及如何通過 proc檔案系統修改...
linux下的 Proc 檔案系統
proc檔案系統是一種在使用者態檢查核心狀態的機制。在proc下一般有如下子目錄和檔案 apm 高階電源管理資訊 bus 匯流排以及匯流排上的裝置 devices 可用的裝置資訊 driver 已經啟用的驅動程式 interrupts 中斷資訊 ioports 埠使用資訊 version 核心版本 ...
Linux的proc檔案系統
proc 為乙個核心資料結構介面,使用者空間和核心空間可以通過該介面通訊,與普通檔案不同的是,這些虛擬檔案的內容都是動態建立的。proc 檔案系統是乙個偽檔案系統,它只存在記憶體當中,而不占用外存空間。它以檔案系統的方式為訪問系統核心資料的操作提供介面。使用者和應用程式 可以通過 proc 得到系統...