使用者空間訪問字元裝置的過程

2021-05-24 14:54:55 字數 1049 閱讀 5898

在這裡我分析應用程式如何訪問字元裝置,了解其整個過程,通過這個分析,對字元驅動的了解會提公升很多。

(以下是我個人的理解,不知到這樣理解是否正確)

使用者執行open,先寫系統呼叫號和引數暫存器,然後指行軟中斷,指行系統呼叫。核心讀取字元裝置檔案/dev/leds,也就是讀取檔案的inode,同時建立乙個file結構體來代表這個開啟了的檔案,inode的物件是檔案,代表乙個檔案,存放檔案的相關資訊。而file代表的是乙個開啟了的檔案,核心開啟檔案時建立,傳遞給檔案操作的所有函式。核心通過inode找到cdev結構體,通過cdev找到file_operation,最終找到並呼叫file_operation裡面的open(struct inode *, struct file *)。指行完畢後返回使用者空間,通過約定的暫存器存放返回值,完成一次系統呼叫。

程式執行在使用者空間,以普通許可權執行,不能直接訪問硬體或者核心空間,那麼使用者程式想要訪問裝置,就得通過系統呼叫來陷入核心空間訪問裝置。

linux中每個系統呼叫都賦予乙個獨一無二的系統呼叫號,使用者程式指行系統呼叫的時候,就是通過指明系統呼叫號,核心從不關心系統呼叫的名稱。這個類似於程序的pid,用乙個數字來標識乙個系統呼叫。使用者程式通過特定的暫存器來傳遞系統呼叫號和引數,然後指行軟中斷,引發乙個異常,系統切換到核心態指行異常處理程式(就是系統呼叫的那個函式),指行完畢,通過暫存器存放返回值,返回使用者空間,完成了一次系統呼叫。系統呼叫號和對應的函式可以在

中找到。其實自己新增乙個系統呼叫也很簡單。

inode物件包含了核心在操作檔案時需要的全部資訊,其實它代表乙個檔案。vfs的超級塊是代表乙個檔案系統。

代表乙個開啟的檔案,開啟檔案時由核心建立,傳遞給任何操作該檔案的函式,檔案關閉則釋放關聯的file結構體。存放的是檔案相關的輔助資訊,是對inode的補充。

描述字元裝置,與字元裝置對應。模組載入或解除安裝就是對它進行操作。它內嵌乙個kobject物件。kobject是裝置管理機制。

檔案操作介面的集合,它的成員函式是字元裝置驅動程式編寫的主體內用,這些函式對應與使用者程式的open,write,read,close等函式,這些函式的指行最終會呼叫file_operation對應的函式來指行。

使用者空間訪問I2C裝置驅動

關於linux下如何編寫晶元的i2c驅動,本系列第一篇文章 手把手教你寫linux i2c裝置驅動 見 對編寫i2c client 裝置驅動的關鍵 給出了初步的講述和示例,第二篇文章 linux下讀寫晶元的i2c暫存器 見 對於具體如何在驅動層封裝讀寫晶元i2c暫存器也進行了詳細的描述,這兩篇文章的...

使用者空間訪問I2C裝置驅動

原始出處 作者資訊和本宣告。否則將追究法律責任。關於linux下如何編寫晶元的i2c驅動,本系列第一篇文章 手把手教你寫linux i2c裝置驅動 對編寫i2c client 裝置驅動的關鍵 給出了初步的講述和示例,第二篇文章 linux下讀寫晶元的i2c暫存器 對於具體如何在驅動層封裝讀寫晶元i2...

使用者空間訪問I2C裝置驅動

關於linux下如何編寫晶元的i2c驅動,本系列第一篇文章 手把手教你寫linux i2c裝置驅動 對編寫i2c client 裝置驅動的關鍵 給出了初步的講述和示例,第二篇文章 linux下讀寫晶元的i2c暫存器 對於具體如何在驅動層封裝讀寫晶元i2c暫存器也進行了詳細的描述,這兩篇文章的 整合到...