字元裝置號申請與註冊

2021-08-13 04:43:53 字數 1461 閱讀 3737

了解了雜項裝置的註冊後,還需要學習字元裝置申請和註冊

直接上**吧

#include//linux啟動相關

#include// 檔案系統相關

#include//模組相關

#include//裝置相關

#include//裝置型別相關

#include//模組傳參相關

#include //檔案屬性相關

#include //

#include//

module_license("dual bsd/gpl");

module_author("me");

#define device_name  "2"

#define device_num     1

static int major_num,minor_num;

static struct cdev * chrdev,*d1;

static struct class *myclass,*c1;

static struct device *dev0,*dev1;

/*開啟操作*/

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

/*關閉操作*/

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

/*io操作*/

static long chardevnode_ioctl(struct file *file, unsigned int cmd, unsigned long arg)

//以上是open close 和 io操作的基本模板

/*裝置讀操作*/

ssize_t chardevnode_read(struct file *file, char __user *buf, size_t count, loff_t *f_ops)

/*裝置寫操作*/

ssize_t chardevnode_write(struct file *file, const char __user *buf, size_t count, loff_t *f_ops)

/*裝置的定位操作*/

loff_t chardevnode_llseek(struct file *file, loff_t offset, int ence)

//建立裝置的檔案操作結構體的關係

struct file_operations my_fops = ;

//裝置初始化  

static int dev_inita(void)

else

return 0;

}static void dev_exita(void)

module_init(dev_inita);  // 模組介面

module_exit(dev_exita);

裝置號的靜態申請與動態分配

字元型別驅動 裝置號是在驅動module中分配並註冊的,也就是說,驅動module擁有這個裝置號 我的理解 而 dev目錄下的裝置檔案是根據這個裝置號建立的,因此,當訪問 dev目錄下的裝置檔案時,驅動module就知道,自己該出場服務了 當然是由核心通知 在linux核心看來,主裝置號標識裝置對應...

靜態申請字元類裝置號

字元裝置函式在檔案 include linux fs.h 中 核心提供了三個函式來註冊一組字元裝置編號,這三個函式分別是 register chrdev region alloc chrdev region register chrdev register chrdev region 是提前知道裝置...

動態申請字元類裝置號

字元裝置函式在檔案 include linux fs.h 中 alloc chrdev region 是動態分配主次裝置號 巨集定義major提取dev t資料中的主裝置號 編寫,編譯 測試原始碼 include 包含初始化巨集定義的標頭檔案,中的module init和module exit在此檔...