使用者空間與核心空間的介面 proc檔案系統

2021-06-22 05:25:11 字數 2197 閱讀 1112

最早在接觸linux bsp時,專案中有一項規格就是底層需向上層提供硬體pcb及bom資訊。由於在linux的根檔案系統/proc目錄下有硬體cpu、記憶體、儲存器等與硬體相關的資訊,並且在使用者空間通過cat命令就可以輕易獲得,於是有個想法,就是設法將專案中硬體pcb及bom等資訊展現在/proc目錄下,然後使用者空間可以通過cat或通過讀寫檔案的形式獲得這些資訊。所以就查閱了關於linux proc檔案系統的一些知識,並整理乙個例程。

什麼是proc檔案系統?

proc檔案系統是乙個偽檔案系統,它只存在記憶體當中,而不占用外村空間。它以檔案系統的方式訪問核心資料的操作介面。linux核心提供了一種通過/proc檔案系統,在執行時訪問核心內部資料結構、改變核心設定的機制、使用者和應用程式可以通過proc得到系統的資訊,並可以改變核心的某些引數。由於系統的資訊、如程序,是可以動態改變的,所以使用者或應用程式讀取proc檔案時,proc檔案系統是動態從系統核心讀出所需要的資訊並提交的。(這一點可sysfs有點類似,現在的驅動程式設計中,往往是通過sysfs實現一些引數的更改,甚至把sysfs當做「開關」使用)。

[cpp]view plain

copy

#include 

#include 

char

mystring = 

"hello_proc"

;  int

my_proc_read( 

char

*buf, 

char

**start, off_t off, 

intcount, 

int*eof, 

void

*data )   

static

int__init proc_init( 

void

)    

static

void

__exit proc_exit(

void

)    

module_init( proc_init );  

module_exit( proc_exit );  

module_license("gpl"

);  

module_description("test proc filesystem"

);  

module_author("vincent wu "

);  

將上面例程編譯層模組test_proc.ko

1. insmod test_proc.ko

載入模組後在/proc目錄下生成檔案節點myproc

2.cat /proc/mypoc

看到輸出資訊為hello_proc

另外通過read系統呼叫讀/proc/myproc也可以得到資料hello_proc

注意上面是在/proc目錄下生成目錄myproc,如果想在/proc目下生成乙個目錄,然後在該生成的目錄下生成乙個子目錄。如建立目錄/proc/myproc/myproc_sub,可以這樣:

[cpp]view plain

copy

#include 

#include 

char

mystring = 

"hello_proc"

;  struct

proc_dir_entry *parent;  

intmy_proc_read( 

char

*buf, 

char

**start, off_t off, 

intcount, 

int*eof, 

void

*data )   

static

int__init proc_init( 

void

)    

static

void

__exit proc_exit(

void

)    

module_init( proc_init );  

module_exit( proc_exit );  

module_license("gpl"

);  

module_description("test proc filesystem"

);  

module_author("vincent wu "

);  

核心空間與使用者空間

1.核心態與使用者態的區別 1 核心態 的 不受任何限制,可以訪問 所有處理器指令集 記憶體位址以及i o空間 2 使用者態的 只能訪問其位址空間的頁表項中規定的虛擬位址。2.使用者態到核心態的切換方式 1 系統呼叫 軟中斷的一種 由使用者程序主動發起 2 異常 當cpu在執行執行在使用者態下的程式...

核心空間與使用者空間

首先,這個概念的由來,我認為跟cpu的發展有很大關係,在目前cpu的保護模式下,系統需要對其賴以執行的資料進行保護,為了保證作業系統核心資料,我們把記憶體空間進行劃分,一部分為作業系統核心執行的空間,另一部分是應用程式執行的空間,所謂空間就是記憶體的位址。因此核心空間和使用者空間的概念就出現了。在3...

核心空間與使用者空間

關於虛擬記憶體有三點需要注意 上圖展示了整個程序位址空間的分布,其中4g的位址空間分為兩部分,在使用者空間內,對應了記憶體分布的五個段 資料段 段 bss段 堆 棧。在上篇文章中有詳細的介紹。這個圖示核心使用者空間的劃分,圖中最重要的就是高階記憶體的對映 其中kmalloc和vmalloc函式申請的...