linux驅動開發(3 自動建立裝置節點)

2021-10-09 04:12:22 字數 1782 閱讀 9588

驅動中的修改

在之前的內容中,執行應用程式之前,都要手動使用mknod命令來建立裝置節點,這種方法非常的不方便,實際上現在的核心已經提供了一些介面,加上乙個使用者空間程式就可以實現自動刪除與自動建立。

引用維基百科的一段描述:

udev 是linux kernel 2.6系列的裝置管理器。它主要的功能是管理/dev目錄底下的裝置節點。它同時也是用來接替devfs及hotplug的功能,這意味著它要在新增/刪除硬體時處理/dev目錄以及所有使用者空間的行為,包括載入firmware時。

udev是乙個使用者空間程式,一般用在pc機上,而在嵌入式系統中常用簡化版的mdev來替代,在使用busybox製作根檔案系統時,裡面就有mdev這個應用程式(需要在配置中勾選),位於/sbin/mdev

在根檔案系統中的/etc/init.d/rcs檔案中新增如下的內容:

echo /sbin/mdev > /proc/sys/kernel/hotplug

mdev -s

位於標頭檔案:include\linux\device.h此函式用以建立裝置類,會在/sys/class/目錄下生成對應的裝置類,準確的說它應該是乙個巨集定義,原型如下:

#define class_create(owner, name)		\

()

此函式用以銷毀裝置類。

void

class_destroy

(struct class *cls)

;

此函式用以建立乙個裝置,也就對應了/dev/目錄下的乙個裝置節點。

struct device *

device_create

(struct class *cls,

struct device *parent,

dev_t devt,

void

*drvdata,

const

char

*fmt,...);

此函式用以銷毀對應的裝置。

void

device_destroy

(struct class *cls, dev_t devt)

;

在驅動中還需要使用相應的介面來告知核心此驅動的資訊,這樣核心才能將資訊傳遞給應用層的mdev程式來建立和刪除裝置節點。

static dev_t devno;

static

struct class *test_char_dev_class;

static

int __init test_init

(void

)static

void __exit test_exit

(void

)

完成以上的操作後,每次裝載完驅動就可以不用再手動使用mknod命令來建立裝置節點了,解除安裝驅動後對應的裝置節點也會自動刪除。

測試原始碼獲取:點我

linux驅動開發之自動建立裝置節點的方法

編譯工具 source insight 4.0 區分上節內容,手動建立裝置節點 mknod 檔名 型別 主裝置號 次裝置號 怎樣檢視系統裝置節點,在project window中查詢major.h就行 自動建立裝置節點的方法 define minorbits20 define minormask 1...

Linux驅動(三) 完善裝置驅動自動建立裝置號

include include include include include include include argc 應用程式引數個數,包括應用程式本身 ar 具體的引數內容,字串形式 int main int argc,char ar filename ar 1 獲取檔名稱 fd open f...

Linux核心驅動之自動建立裝置檔案

裝置檔案是非常重要的檔案,是應用程式與裝置驅動交換資料,控制硬體的橋梁。在驅動程式中open release的實現過程中其中的乙個引數struct inode實質就是裝置檔案的索引,沒有這個索引也就沒有後期的各種操作,通常裝置檔案也被稱為裝置檔案節點。因此沒有裝置檔案後期的各種實現都是多餘的。裝置檔...