linux設備驅動編程-初探(4)--問題整理

將這幾天學習的內容不理解的部分整理一下,在這裏做個標記:

1:最大的問題,書中的例子是一個scull(Simple Character Utility for Loading Localities)【區域裝載的簡單字符工具】的一個驅動程序例子,該例子是一個操作內存區域的字符設備驅動程序,就將內存區域當作一個設備。然而在實際的驅動程序運用中,一般來說都是直接操作硬件設備的,我這裏有很的一個疑問,系統如何識別這個硬件,然後對這個硬件編寫驅動程序,讓驅動程序進行對該硬件的控制,估計這個問題在後面的知識點中會碰到答案,現在不是很理解,先做標識;

2:關於幾個重要的數據結構方面,有4個數據結構,分別是:file_operations, file, inode, cdev 這3個數據結構的作用分別是:

file_operations: 將尚未將任何驅動程序操作鏈接到這裏已經制定好的設備編號。

file: 代表一個打開的文件,系統中每個打開的文件在內核空間中都有一個對應的file結構。

inode: 內部表示文件的結構體。以上三個數據結構都是定義在文件<linux/fs.h>

cdev: 表示字符設備信息的結構體。該數據結構定義在<linux/cdev.h>

以上這幾個數據結構是內核中關於字符設備相關的重要的數據結構,對於file_operations數據結構,裏面包含一些函數關聯,這些函數用於實現系統調用,比如:read,write,open等,在file數據結構體中也包含了file_operations這個數據結構的成員,爲什麼要包含這個呢,書中是這麼解釋的,@與文件相關的操作,內核在執行open操作時對這個指針賦值【struct file_operations *f_op】,以後要處理操作時就讀取這個指針@這點我的理解是:一個設備驅動文件被打開後,會對這個設備文件描述的結構體中直接附加上了對這個設備文件的一些操作方法。另外對於file和inode數據結構,在書中是這麼解釋:內核用inode結構在內部表示文件,因此它和file結構不同,後者表示打開的文件描述符。對單個文件,可能會有許多個表示打開的文件描述符的file結構,但他們都指向單個inode結構。在這裏我的理解是file結構和inode結構的對應關係是多對一的關係,即inode是內核中唯一表示一個打開的文件的數據結構,而file結構體,可以以不同的形式來描述一個文件,所以存在多種狀態的值,即各個file結構體成員的值是不同的。

另外一個重要的數據結構體struct cdev,這個結構體與前面三個結構體要分開來說明,因爲這個結構體中是linux系統內核支持的一種設備類型,即字符設備類型。該結構體是用在內核和設備間的接口struct cdev。這裏怎麼設備註冊,以及設備註冊的概念不是很明白,需要再看看書。

3: 書中的例子scull驅動的內存使用的說明也不是很明白,關於量子,量子級這塊,還有其中的幾個系統調用函數等。

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