了解了雜項裝置的註冊後,還需要學習字元裝置申請和註冊
直接上**吧
#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在此檔...