linux驅動之設備號與創建設備節點
設備號:
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驅動之設備號與創建設備節點