LINUX裝置驅動程式筆記

2021-10-08 21:13:10 字數 1953 閱讀 1418

1.核心功能劃分

程序管理,記憶體管理,檔案系統,裝置控制,網路。

裝置的分類:字元裝置,塊裝置,網路介面。

單個原始檔編譯模組:obj-m := hello.o

多個原始檔編譯模組:obj-m := module.o

module-objs := file1.o file2.o

make -c ~/kernel-2.6 m=『pwd』 modules

首先進入到kernel目錄執行make,(即執行核心頂層的makefile檔案)。m=選項讓該makefile在構造modules目標之前返回到模組原始碼目錄。然後,modules目標指向obj-m變數中設定的模組。即上面的hello.o或者module.o。

1.主裝置號和次裝置號

對字元裝置的訪問是通過檔案系統內的裝置名稱進行的。主裝置號標識裝置對應的驅動,但多個驅動有可能共享主裝置號。次裝置號確定裝置檔案所代表的裝置。

2.裝置編號的表達

裝置編號用dev_t型別表示,要提取主次裝置編號,應使用:

major(dev_t dev);

minor(dev_t dev);

主次裝置號轉換為dev_t,使用:mkdev(int major, int minor);

3. 分配和釋放裝置編號

靜態分配裝置編號必須先知道系統中哪些主裝置號是未被使用的,優點是可以提前建立裝置節點,以供使用者態訪問。缺點是移植性差。

動態分配裝置編號缺點是無法預先建立裝置節點,不過只要分配成功之後,就可以從/proc/devices中讀取到主裝置號。

分配以及獲取主裝置號**如下:

if (scull_major)

else

其中,scull是和該編號範圍關聯的裝置名稱,會出現在/proc/devices 和 sysfs中。

建立裝置節點示例如下:

mknod /dev/scull0 c major 0

major代表主裝置號,0是次裝置號。

裝置編號的釋放如下:

void unregister_chrdev_region(dev_t first, unsigned int count);

4.一些重要的資料結構

file 結構

struct file是乙個核心結構,它代表乙個開啟的檔案,由核心在open的時候建立,並且傳遞給在該檔案操作上的所有函式。直到最後乙個close呼叫,即關閉對應開啟的最後乙個檔案,核心會釋放此資料結構。

檔案操作(file_operations結構)

每個開啟的檔案和一組函式關聯。這些操作主要用來實現系統呼叫,命名為open、read等等。這個結構中的每乙個欄位都必須指向驅動程式中實現的特定操作的函式,對於不支援的操作,對應的字段可設定為null。

inode結構

核心用inode結構在內部表示檔案,和file結構的區別是file表示開啟的檔案描述符,同乙個檔案可以被開啟多次,就有多個開啟的檔案描述符。但inode只有乙個,多個file指向同乙個inode。

dev_t i_rdev; 表示裝置檔案的裝置編號。

struct cdev *i_cdev; 指向字元裝置的核心結構 struct cdev的指標。

字元裝置註冊

靜態方式:

struct cdev my_cdev;

cdev_init(&my_cdev, &fops);

my_cdev.owner = this_module;

動態記憶體定義初始化:

struct cdev *my_cdev = cdev_alloc();

my_cdev->ops = &fops;

my_cdev->owner = this_module;

初始化 cdev 後,需要把它新增到系統中去。為此可以呼叫 cdev_add() 函式。傳入 cdev 結構的指標,起始裝置編號,以及裝置編號範圍。

int cdev_add(struct cdev *p, dev_t dev, unsigned count)

linux裝置驅動程式 字元裝置驅動程式

先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...

Linux裝置驅動程式 字元裝置驅動程式

1.檢視主裝置號,次裝置號 進入 dev目錄執行ls l,第四,五列分別為主次裝置號,10,180,1,5,這些是主裝置號,而60,63這些就是次裝置號 130 shell android dev ls l crw rw r system radio 10,60 1969 12 31 21 00 a...

筆記 裝置驅動程式

驅動程式一般指的是裝置驅動程式 device driver 是一種可以使 計算機和裝置通訊的特殊程式。相當於 硬體的介面,作業系統只有通過這個介面,才能控制 硬體裝置的工作,假如某裝置的驅動程式未能正確安裝,便不能正常工作。因此,驅動程式被比作 硬體的靈魂 硬體的主宰 和 硬體和系統之間的橋梁 等。...