【摘選】linux 設備驅動程序工作的基本原理

由於用戶進程是通過設備文件同硬件打交道,對設備文件的操作方式不外乎就
是一些系統調用,如 open,read,write,close...., 注意,不是fopen, fread.,
但是如何把系統調用和驅動程序關聯起來呢?這需要了解一個非常關鍵的數據
結構:
   struct file_operations {
int (*seek) (struct inode * ,struct file *, off_t ,int);
int (*read) (struct inode * ,struct file *, char ,int);
int (*write) (struct inode * ,struct file *, off_t ,int);
int (*readdir) (struct inode * ,struct file *, struct dirent * ,int);
int (*select) (struct inode * ,struct file *, int ,select_table *);
int (*ioctl) (struct inode * ,struct file *, unsined int ,unsigned long);
int (*mmap) (struct inode * ,struct file *, struct vm_area_struct *);
int (*open) (struct inode * ,struct file *);
int (*release) (struct inode * ,struct file *);
int (*fsync) (struct inode * ,struct file *);
int (*fasync) (struct inode * ,struct file *,int);
int (*check_media_change) (struct inode * ,struct file *);
int (*revalidate) (dev_t dev);
}

   這個結構的每一個成員的名字都對應着一個系統調用.用戶進程利用系統調用
在對設備文件進行諸如read/write操作時,系統調用通過設備文件的主設備號
找到相應的設備驅動程序,然後讀取這個數據結構相應的函數指針,接着把控制
權交給該函數.這是linux的設備驅動程序工作的基本原理.既然是這樣,則編寫
設備驅動程序的主要工作就是編寫子函數,並填充file_operations的各個域.
相當簡單,不是嗎?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章