簡述
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等。這...