雜項設備驅動
【學習筆記】
簡介
作用
Linux雜項驅動出現的意義在于:有很多簡單的外圍字符設備,它們功能相對簡單,一個設備占用一個主設備號對于內核資源來說太浪費,
所以對于這些簡單的字符設備它們共用一個主設備號,不同的設備使用不同的次設備號.
特點
雜項設備是字符設備的一種,可以自動生成設備節點
系統中有很多雜項設備,可以輸入cat/proc/misc命令來查看
雜項設備比字符設備代碼簡單
雜項設備的主設備號是相同的,固定均為10,次設備號是不同的,主設備號相同就可以節省內核的資源
主設備號和次設備號:
主設備號在Linux系統里邊是唯一的,次設備號不一定唯一,
設備號是計算機識別設備的一種方式,主設備號相同就被視為同一類設備
主設備號可以看作是電話號碼的區號,次設備號相當于電話號碼
主設備號可以通過命令cat /proc/devices來查看
雜項設備
雜項設備的描述
定義在內核原始碼路徑:include/linux/miscdevice.h
...
#define MISC_DYNAMIC_MINOR 255 //表示會自動的分配次設備號:即動態分配
struct miscdevice {
int minor;//次設備號
const char *name;//設備節點名字
const struct file_operations *fops;//檔案操作集
struct list_head list;
struct device *parent;//父設備名
struct device *this_device;//自己的設備
const struct attribute_group **groups;
const char *nodename;
umode_t mode;
};
extern int misc_register(struct miscdevice *misc);//注冊雜項設備
extern int misc_deregister(struct miscdevice *misc);//注銷雜項設備
...
file_operations檔案操作集定義在include/linux/fs.h下面

里邊的每一個結構體成員都要對應一個呼叫,
注冊雜項設備的流程
(1)填充miscdevice這個結構體
(2)填充file_operations這個結構體
(3)注冊雜項設備并生成設備節點
撰寫雜項設備驅動
一個簡單的雜項驅動代碼
#include <linux/init.h>
#include <linux/module.h>
//增加兩個頭檔案
#include <linux/miscdevice.h>
#include <linux/fs.h>
//第2步:填充檔案操作集
struct file_operations misc_fops = {
.owner = THIS_MODULE //這里簡單的填充一個owner
};
//第1步:填充雜項設備結構體
struct miscdevice misc_dev = {
.minor = MISC_DYNAMIC_MINOR, //次設備號,動態分配
.name = "hello_misc", //設備節點的名字
.fops = &misc_fops //填充檔案操作集
};
//第3步;注冊到內核
static int misc_init(void){
int ret;
ret = misc_register(&misc_dev);//存盤注冊的地址
//判斷是否注冊成功
if(ret < 0){
printk("misc registe is error\n");
return -1;
}
printk("misc registe is successful\n"); //內核里不能使用c語言庫,所以不能用printf
return 0;
}
//卸載驅動
static void misc_exit(void){
misc_deregister(&misc_dev);
printk("misc bye bye\n");
}
//入口和出口
module_init(misc_init);
module_exit(misc_exit);
//宣告許可證
MODULE_LICENSE("GPL");
接下來把驅動編譯到內核即可
然后使用雜項設備生成了設備節點
整理自嵌入式學習之Linux驅動篇
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/285833.html
標籤:其他
