裝置驅動基本格式介紹

2021-05-24 11:42:00 字數 1963 閱讀 8276

struct file_operations {

struct module *owner;//模組所有者指標,一般初始化為this_modules

loff_t (*llseek) (struct file *, loff_t, int);//用來修改檔案當前的讀寫位置,返回新的位置loff_t 為乙個"長偏移"

ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);//同步讀取函式,讀取成功返回讀取的位元組數,設定為null,呼叫時返回-einval

ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);//同步寫入函式

ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);//非同步讀取操作,為null時全部通過read處理

ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);//非同步寫入函式

int (*readdir) (struct file *, void *, filldir_t);//僅用於讀取目錄,對裝置檔案,該字段為null

unsigned int (*poll) (struct file *, struct poll_table_struct *);//判斷目前是否可以對裝置進行讀寫操作,欄位為空時,裝置會被認為既可讀也可寫

int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);//向裝置傳送i/o控制命令的函式,不設定入口點返回-enotty

long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);

long (*compat_ioctl) (struct file *, unsigned int, unsigned long);

int (*mmap) (struct file *, struct vm_area_struct *);

int (*open) (struct inode *, struct file *);

int (*flush) (struct file *, fl_owner_t id);

int (*release) (struct inode *, struct file *);

int (*fsync) (struct file *, struct dentry *, int datasync);

int (*aio_fsync) (struct kiocb *, int datasync);

int (*fasync) (int, struct file *, int);

int (*lock) (struct file *, int, struct file_lock *);

ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);

int (*check_flags)(int);

int (*flock) (struct file *, int, struct file_lock *);

ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);

ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);

int (*setlease)(struct file *, long, struct file_lock **);

驅動基本入門介紹

基本外設驅動的開發其實都是很簡單的,只要抓住幾點,你就可以去自己除錯驅動了。我現在說的都是入門級的,可能說的地方有不對的,如果有不對的,虛心接受 1.大概了解一些外設的基本工作流程 而非工作原理 2.了解一般驅動程式是怎麼進入核心的過程以及載入過程 3.了解驅動程式的基本架構 4.結合現實與核心基本...

IRP 驅動物件 裝置物件簡短介紹

irp請求 向最終裝置申請執行某個操作的請求,它在核心中以乙個資料結構 irp 的形式存在,具有相關的約定和規範。驅動物件 表示系統核心中載入的乙個驅動程式的資料結構 driver object 裝置物件 最終接收 響應乙個irp請求的物件。在核心中,也是乙個資料結構 device object 的...

imx8 GPIO 裝置驅動介紹

目的 通過 gpio 驅動配置實現控制 imx8 晶元引腳電平變化 硬體平台 imx8qmmek evm board 軟體環境 imx p9.0.0 2.1.0 auto ga 我這裡使用的是通過 dts 檔案來進行裝置硬體資源的申請及分配,使用者可以在 fsl imx8qm mek.dtsi 檔案...