首先我們來反彙編讀驅動的程式:
跳轉到__libc_read
,發現他把
r7賦值給3,
3是傳過去的引數,然後呼叫
svc指令,進入核心態相應的入口:
接下來就已經進入核心態,入口函式中將存入r7中的3
取出。
然後載入一張表,表名是sys_call_call,
根據這個表中內容,斷定
3到底是對應什麼操作:
這個表如下,可以看出表中第三項對應call(sys_read)
,也就是說傳進的引數
3代表要執行
sys_read對應函式實現如下圖:
其中的vfs_read
實現如下圖,他獲取了要讀的那個檔案的
file
物件,然後呼叫
file->f_op->read
,這正是我們寫驅動的時候編寫的介面函式:
來自為知筆記(wiz)
驅動呼叫過程
驅動呼叫過程 剛接觸到linux下驅動程式設計,一般都是照著模式寫 或是修改一下已有原始碼,對驅動的呼叫過程並不是很熟悉。在網上不斷的 算是有點明白了,現在我就說下自己的了解。我們載入驅動模組後都會做乙個工作,就是通過mknod在 dev資料夾下建立乙個裝置檔案 如mknod dev c major...
函式呼叫過程
每乙個未執行完的函式都對應著乙個棧幀,系統為單個函式分配的那部分棧空間就叫做棧幀,棧幀儲存了函式的資訊。以下面的 為例,通過彙編 的執行過程介紹棧幀建立和銷毀的過程 include int add int x,int y int main 從main函式建立自己的棧幀開始 其他內容先忽略 初始狀態 ...
函式呼叫過程
c語言種有三種迴圈 do.while while for 初始化 條件判斷 步進 主函式 main 庫函式自定義函式函式的發明,使得變成可以以函式為單位進行模組化,叫做面向過程。軟體工程中,有 高內聚,低耦合 的要求。函式就是為了實現以上要求發明的產物。函式是面向過程的 介面 其介面包含了 引數 返...