linux字元裝置驅動中自動建立裝置節點

2021-08-31 18:50:30 字數 2456 閱讀 6537

簡述

1、裝置號、驅動等概念性問題;

2、裝置號的自動分配和手動指定;

3、mknode手動建立節點。

編碼實現

1、核心點

要使的驅動能夠在載入時自動完成裝置節點的註冊,主要流程如下:

驅動載入時完成如下工作:分配裝置號-------------註冊字元裝置------------動態建立裝置節點。

驅動解除安裝時完成如下工作:刪除裝置節點-------------取消字元裝置的註冊-----------刪除裝置號。

2、例子

如下驅動簡要介紹乙個自動建立裝置節點的驅動例項,編譯驅動後載入該驅動,將在/dev目錄下面生成driver_wrbuff的檔案節點(巨集device_name指定的名字)。

writebuffer.c

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define chrdev_name      "driver_wrbuff"

#define class_name       "class_wrbuff"                     //表示在/system/class目錄下建立的裝置類別目錄

#define device_name      "driver_wrbuff"                    //在/dev/目錄和/sys/class/class_wrbuff目錄下分別建立裝置檔案driver_wrbuff

static dev_t         devt_wrbuffer;

static struct cdev*  cdev_wrbuffer;

static struct class* class_wrbuffer;

static int wrbuffer_open(struct inode *inode,struct file *file);

static ssize_t wrbuffer_read(struct file *file, char __user *buf, size_t count, loff_t *offset);

static ssize_t wrbuffer_write(struct file *file, const char __user *buf, size_t count, loff_t *offset);

static struct file_operations fops_wrbuffer = ;

static int wrbuffer_open(struct inode *inode,struct file *file)  

static ssize_t wrbuffer_read(struct file *file, char __user *buf, size_t count, loff_t *offset)  

static ssize_t wrbuffer_write(struct file *file, const char __user *buf, size_t count, loff_t *offset)  

static int __init wrbuffer_init(void)  

/*2、註冊字元裝置*/

cdev_wrbuffer = cdev_alloc();

cdev_init(cdev_wrbuffer,&fops_wrbuffer);

cdev_wrbuffer->owner = this_module;

ret = cdev_add(cdev_wrbuffer,devt_wrbuffer,1);

if(ret)  

/*3、建立裝置節點*/

class_wrbuffer = class_create(this_module,class_name);

device_create(class_wrbuffer,null,devt_wrbuffer,null,device_name);

printk("wrbuffer driver init is ok!\n");

return 0;

}static void __exit wrbuffer_exit(void)

late_initcall(wrbuffer_init);

module_exit(wrbuffer_exit);

module_author("[email protected]");

module_description("allwinner buffer read and write test driver");

module_license("gpl");

3、makefile

使用如下makefile檔案進行驅動模組的編譯,請按照自己需要配置核心路徑。

驅動 linux裝置驅動 字元裝置驅動開發

preface 前面對linux裝置驅動的相應知識點進行了總結,現在進入實踐階段!linux 裝置驅動入門篇 linux 裝置驅動掃盲篇 fedora下的字元裝置驅動開發 開發乙個基本的字元裝置驅動 在linux核心驅動中,字元裝置是最基本的裝置驅動。字元裝置包括了裝置最基本的操作,如開啟裝置 關閉...

Linux裝置驅動之《字元裝置驅動》

linux裝置中最大的特點就是裝置操作猶如檔案操作一般,在應用層看來,硬體裝置只是乙個裝置檔案。應用程式可以像操作檔案一樣對硬體裝置進行操作,如open close read write 等。下面是乙個字元裝置驅動程式的簡單實現test.c 模組分析 1.初始化裝置驅動的結構體 struct fil...

Linux裝置驅動之字元裝置驅動

一 linux裝置的分類 linux系統將裝置分成三種基本型別,每個模組通常實現為其中某一類 字元模組 塊模組或網路模組。這三種型別有 字元裝置 字元裝置是個能夠像位元組流 類似檔案 一樣被訪問的裝置,由字元裝置驅動程式來實現這種特性。字元裝置可以通過檔案系統節點來訪問,比如 dev tty1等。這...