1. 程式人生 > >linux驅動之設備號與創建設備節點

linux驅動之設備號與創建設備節點

class size 為什麽 mod this 入口 font sys first

設備號:

1、自己主動分配

major = register_chrdev(0,"first_drv",&first_sdv_fops);//註冊

註冊設備時給設備號寫0,則內核會自己主動分配一個主設備號返回。

2、手動指定

到 proc/devices 文件下查找都有哪些主設備號。假設沒有被使用的我們就可以拿過來使用它。

應用程序設備節點:

我們會使用open這個函數帶開一個設備,那麽open("dev/xxx")中dev/xxx 這個設備節點怎麽來?

1、用 mknod /dev/xxx c 主設備號 次設備號

2、自己主動創建:

提示:

mdev: 依據系統信息 創建設備節點

方法:

定義兩個變量:

static struct class *firstdrv_class;
static struct class_devices *firstdrv_class_dev;

在入口函數中加入:

firstdrv_class = class_create(THIS_MODULE,"first_drv");
	if(IS_ERR(firstdrv_class))
		return PTR_ERR(firstdrv_class);
	firstdrv_class_dev = device_create(firstdrv_class,NULL,MKDEV(major,0),NULL,"wq_device");
	if(unlikely(IS_ERR(firstdrv_class_dev)))
		return PTR_ERR(firstdrv_class_dev);

在出口函數中加入:

device_unregister(firstdrv_class_dev);
	class_destroy(firstdrv_class);

這樣在 /dev下就會生成一個 wq_device 設備。而且會在 /sys/class/first_drv 文件夾下找到一個 wq_device設備,

在/sys/class/first_drv/wq_device 會有一個 dev的文件 文件的內容是: “252:0”

mdev就會依據這些信息創建設備節點。

為什麽sys文件夾一更改,mdev就會依據這些信息創建設備節點呢?

原因是 在我們的/etc/init.d/ 文件夾中的rcS文件裏 有例如以下內容:

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

內核一旦有載入或者卸載時 就會調用/proc/sys/kernel/hotplug 所指示的應用程序。



linux驅動之設備號與創建設備節點