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

2021-08-15 03:18:48 字數 2497 閱讀 4060

編譯工具:source insight 4.0

區分上節內容,手動建立裝置節點:

mknod 檔名   型別 主裝置號  次裝置號

怎樣檢視系統裝置節點,在project window中查詢major.h就行

自動建立裝置節點的方法

#define minorbits20

#define minormask((1u << minorbits) - 1)

#define major(dev)((unsigned int) ((dev) >> minorbits))

#define minor(dev)((unsigned int) ((dev) & minormask))

#define mkdev(ma,mi)(((ma) << minorbits) | (mi))

需要(1)

// 引數1---當前模組--this_module

// 引數2---字串,表示類的名字

//返回值--struct class指標型別

class_create(owner, name);

需要(2)

//建立乙個裝置節點

// 引數1---class_create返回的指標

// 引數2---該裝置非父類--一般都是填null

//引數3--裝置號--包含了主裝置號major和次裝置號minor 

//引數4---私有資料指標---一般都是填null

//引數5---裝置節點的名字

//結果  /dev/led

// 返回值--struct device指標

struct device *device_create(struct class *cls, struct device *parent,

dev_t devt, void *drvdata,

const char *fmt, ...)

需要(3)釋放---在模組解除安裝函式----與模組載入函式倒著來釋放

下面是驅動程式:

#include #include #include #include #include //設計乙個全域性的裝置物件類

struct s5pv210_led;

//宣告乙個物件

struct s5pv210_led *led_dev;

int led_drv_open(struct inode *inode, struct file *filp)

const struct file_operations led_fops = ;

static int __init led_drv_init(void)

// 1, 申請主裝置號(字元裝置)

led_dev->dev_major = 250;//可以指定裝置號

ret = register_chrdev(led_dev->dev_major, "led_drv", &led_fops);

if(ret < 0)

// 2 ---自動建立裝置節點

//建立乙個類---先記住

// 引數1---當前模組--一般是this_module

// 引數2---字串,表示類的名字

//返回值--struct class指標型別

led_dev->cls = class_create(this_module,"led_cls");

if(is_err(led_dev->cls))

//建立乙個裝置節點

//引數1---class_create返回的指標

//引數2---該裝置非父類--一般都是填null

//引數3--裝置號--包含了主裝置號major和次裝置號minor

//引數4---私有資料指標---一般都是填null

//引數5---裝置節點的名字

//結果 /dev/led

// 返回值--struct device指標

led_dev->dev = device_create(led_dev->cls, null,mkdev(led_dev->dev_major, 0), null, "led");

if(is_err(led_dev->dev))

return 0;

err_class_destroy:

class_destroy(led_dev->cls);

err_unregister:

unregister_chrdev(led_dev->dev_major, "led_drv");

err_free:

kfree(led_dev);

return ret;

}static void __exit led_drv_exit(void)

module_init(led_drv_init);

module_exit(led_drv_exit);

module_license("gpl");

應用程式和makefile和上節類似。

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

驅動中的修改 在之前的內容中,執行應用程式之前,都要手動使用mknod命令來建立裝置節點,這種方法非常的不方便,實際上現在的核心已經提供了一些介面,加上乙個使用者空間程式就可以實現自動刪除與自動建立。引用維基百科的一段描述 udev 是linux kernel 2.6系列的裝置管理器。它主要的功能是...

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

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

linux字元驅動之自動建立裝置節點

問 能不能讓系統自動建立裝置節點?答 可以,linux有udev mdev的機制,而我們的arm開發板上移植的busybox有mdev機制,那麼就使用mdev機制來自動建立裝置節點。問 檔案系統裡,在 設定了mdev機制?答 在etc init.d rcs檔案裡有一句 echo sbin mdev ...