雜項設備驅動--Linux驅動學習(2)

雜項設備驅動

【學習筆記】node

簡介

做用

Linux雜項驅動出現的意義在於:有不少簡單的外圍字符設備,它們功能相對簡單,一個設備佔用一個主設備號對於內核資源來講太浪費。
因此對於這些簡單的字符設備它們共用一個主設備號,不一樣的設備使用不一樣的次設備號.linux

特色

雜項設備是字符設備的一種,能夠自動生成設備節點ide

系統中有不少雜項設備,能夠輸入cat/proc/misc命令來查看學習

雜項設備比字符設備代碼簡單this

雜項設備的主設備號是相同的,固定均爲10,次設備號是不一樣的,主設備號相同就能夠節省內核的資源code

主設備號和次設備號:

主設備號在Linux系統裏邊是惟一的,次設備號不必定惟一。blog

設備號是計算機識別設備的一種方式,主設備號相同就被視爲同一類設備資源

主設備號能夠看做是電話號碼的區號,次設備號至關於電話號碼get

主設備號能夠經過命令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下面

image

裏邊的每個結構體成員都要對應一個調用。

註冊雜項設備的流程

(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驅動篇

相關文章
相關標籤/搜索