Linux中自動創建設備節點的LED燈驅動開發流程

目錄

一、設備號註冊和註銷

二、字符設備添加與刪除

三、自動創建設備節點

四、測試驗證


一、設備號註冊和註銷

1、使用如下函數註冊和註銷字符設備時,浪費了很多次設備號,還需要手動指定主設備號;而且當我們使用 modprobe 加載驅動程序以後,還需要使用命令mknod手動在 /dev 目錄下創建設備節點

int register_chrdev(unsigned int major, const char *name,const struct file_operations *fops) 
void unregister_chrdev(unsigned int major, const char *name)

2、如果沒有指定設備號的話就使用如下函數來申請設備號

int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)

如果給定了設備的主設備號和次設備號就使用如下所示函數來註冊設備號即可

int register_chrdev_region(dev_t from, unsigned count, const char *name)

註銷字符設備之後要釋放掉設備號,不管是通過 alloc_chrdev_region函數還是register_chrdev_region函數申請的設備號,統一使用如下釋放函數:

void unregister_chrdev_region(dev_t from, unsigned count)

二、字符設備添加與刪除

在linux中,使用 include/linux/cdev.h/cdev 結構體表示字符設備

(1)初始化字符設備

cdev_init(struct cdev *, const struct file_operations *);

(2)向linux內核添加一個字符設備

int cdev_add(struct cdev *, dev_t, unsigned);

(3)刪除一個字符設備

void cdev_del(struct cdev *);

三、自動創建設備節點

自此,通過 cdev_add 向內核添加字符設備後,也還是需要通過 mknod 手動在 /dev目錄下添加對應的設備節點,這在實際的項目開發中是不現實的,在添加完字符設備後需要能自動創建相應的設備節點,這裏就會用到udev機制

udev是一個用戶程序,在 Linux下通過 udev來實現設備文件的創建與刪除, udev可以檢測系統中硬件設備狀態,可以根據系統中硬件設備狀態來創建或者刪除設備文件。比如使用modprobe命令成功加載驅動模塊以後就自動在 /dev目錄下創建對應的設備節點文件 ,使用rmmod命令卸載驅動模塊以後就 刪除掉 /dev目錄下的設備節點文件。 使用 busybox構建根文件系統的時候, busybox會創建一個 udev的簡化版本 mdev,所以在嵌入式 Linux中我們使用mdev來實現設備節點文件的自動創建與刪除, Linux系統中的熱插拔事件也由 mdev管理,在/etc/init.d/rcS文件中如下語句

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

實現過程:

1、創建和摧毀類

struct class *class_create (struct module *owner, const char *name); 
void class_destroy(struct class *cls);

2、創建和刪除設備

struct device *device_create(struct class *class, struct device *parent, dev_t devt, void *drvdata, const char *fmt, ...); 
void device_destroy(struct class *class, dev_t devt)

 

四、測試驗證

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章