驅動接口函數調用過程

本文就來揭祕一下到底一個驅動的接口函數是如何被調用的:

 

首先我們來反彙編讀驅動的程序:

842584-20151124234308421-1530817295.jpg

 

跳轉到__libc_read,發現他把r7賦值給33是傳過去的參數,然後調用svc指令,進入內核態相應的入口:

842584-20151124234312031-1372578680.jpg

 

接下來就已經進入內核態,入口函數中將存入r7中的3取出。

842584-20151124234316781-237147826.jpg

 

 

 

 

 

然後加載一張表,表名是sys_call_call,根據這個表中內容,斷定3到底是對應什麼操作:

842584-20151124234319437-1024420565.jpg

 

這個表如下,可以看出表中第三項對應CALL(sys_read),也就是說傳進的參數3代表要執行sys_read

 

842584-20151124234327968-2065812638.jpg

 

 

Sys_read對應函數實現如下圖:

 

842584-20151124234329593-1210187128.jpg

 

其中的vfs_read實現如下圖,他獲取了要讀的那個文件的file對象,然後調用file->f_op->read,這正是我們寫驅動的時候編寫的接口函數:

842584-20151124234333281-1458085663.jpg

 

 

 





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章