驅動複習(mor8)

2021-07-25 12:03:28 字數 1480 閱讀 3064

核心定時器的詳細說明?

系統移植中在開發板上設定應用程式自啟動。

應用程式通過裝置檔案和驅動建立聯絡,而裝置檔案又通過主裝置號與驅動聯絡。

在動態獲取裝置號時先載入驅動再建立裝置節點。

應用層mmap系統呼叫:

mmap實現將檔案內容對映到記憶體空間的某塊位址上,通過對這塊記憶體空間的操作來實現對檔案的操作,而不需要再呼叫read和write等操作。

一、

void* mmap(void* addr,size_t len,int port,int flags,int fd,off_t offset);

//addr:指定對映到記憶體的起始位置,

// len:指定對映到記憶體的長度

//prot:對映區的保護方式-- prot_exec:對映區可執行

// prot_read:對映區可讀

// prot_write:對映區可寫

// prot_none:對映區不能訪問

//flags:對映區的特性--map_shared:寫入對映區的內容會複製回檔案,而

// 且允許其他對映該檔案的程序共享;

//

// map_private:對對映區的寫操作會產生乙個映區

// 的複製(copy—on-write),對此區域的修改不會寫會原檔案。

//fd:open對應的檔案描述符

//offset:在檔案中要對映的起始位置,必須是分頁大小的整數倍,一般為零,

// 表示從檔案的頭開始對映。

//注意:

//在使用mmap進行檔案和記憶體之間的對映之後,當我們在對記憶體中拷貝資料(亦即對檔案寫)時,所拷貝到檔案中的資料並且最後能儲存下來的資料的長度不能超過原來檔案中的長度。比如原來檔案中的內容為「1234567」,對映後往記憶體中寫「buf is null」之後,儲存到檔案中的資料是「buf is n」。

二、解除對映:

int munmap(void* start , size_t length);

//取消從start開始的長度為length的對映的記憶體。如果使用者沒有解除對映,在

//程序結束時系統會自動解除,但關閉檔案描述符是不會自動解除對映。

虛擬記憶體:

虛擬記憶體是程序的虛存的一塊同質空間,具有同樣許可標誌的連續的許可範圍,可以理解為「具有自己屬性的記憶體物件」。乙個程序的記憶體映像又以下幾個部分組成:位址由低到高為—-<0~3g>**段、資料段(已初始化的資料段、未初始化的bss段)、堆、記憶體對映區、棧、環境變數、命令列引數。<3~4g>核心空間。[注:這裡我們主要實現在驅動中對記憶體的對映。乙個程序的記憶體區可通過/proc/pid/maps來檢視,pid是對應的程序號]。

驅動複習(mor8)

驅動mmap裝置操作與應用程式的mmap系統呼叫區別?按鍵驅動 按鍵初始化 struct key info key info table 4 這是乙個結構體陣列,每個結構體成員是乙個自定義的按鍵型別 此時求陣列的長度可用 len sizeof key ingo table sizeof key in...

複習8 函式

1.內聯函式 2.引數傳遞 2.1引數傳遞的求值順序是未定義的。如f i,i 的引數值是未定義的,結果也是不可知的。2.2引數傳遞一般為值傳遞,保證了實參的值不會修改,但存在效率問題。於是我們使用指標和引用做引數,但使用它們可能會修改實參。為了給呼叫者足夠的保證,我們使用const修飾它們表示不會改...

複習8 內部類

示例 package day20191106 public class inclass 靜態內部類 匿名內部類 最常見,最實用 區域性內部類 已被淘汰 成員內部類是什麼 示例package day20191106 public class clas ample public int a public...