课程列表

基本问题

开源资源

好好学习天天向上

联大大纲—通信电子 ;教师介绍; 单片机课程学习经验- 学习路线图; 1.概述 -应用 -定义 -特点 -构成; 2.嵌入式处理器 —DIY CPU处理器ARM处理器Cortex-A8S5PV210讨论; 3.汇编语言 -作业 4.Bootloader -作业 5.Linux内核移植 6.嵌入式Linux程序设计 7.图形用户接口QT 8.其他框架介绍; 9.嵌入式物联网应用系统设计

Linux驱动file_operations{}结构

ARM-Linux操作系统的fs.h文件中定义了file_operations结构。

struct file_operations {

    struct module *owner;

    loff_t (*llseek) (struct file *, loff_t, int);

    ssize_t (*read) (struct file *, char *, size_t, loff_t *);

    ssize_t (*write) (struct file *, const char *, size_t, loff_t *);

    int (*readdir) (struct file *, void *, filldir_t);

    unsigned int (*poll) (struct file *, struct poll_table_struct *);

    int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);

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

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

    int (*flush) (struct file *);

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

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

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

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

    ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);

    ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);

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

    unsigned long (*get_unmapped_area)(struct file *, unsigned long,

unsigned long, unsigned long, unsigned long);

    #ifdef MAGIC_ROM_PTR

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

    #endif /* MAGIC_ROM_PTR */

};

6.1描述了file_operations 结构体中主要成员作用。

6.1  file_operations结构体成员变量

              

1

owner

module 的拥有者。

2

llseek

重新定位读写位置。

3

read

从设备中读取数据。

4

write

向字符设备中写入数据。

5

readdir

只用于文件系统,对设备无用。

6

ioctl

控制设备,除读写操作外的其他控制命令。

7

mmap

将设备内存映射到进程地址空间,通常只用于块设备。

8

open

打开设备并初始化设备。

9

flush

清除内容,一般只用于网络文件系统中。

10

release

关闭设备并释放资源。

11

fsync

实现内存与设备的同步,如将内存数据写入硬盘。

12

fasync

实现内存与设备之间的异步通讯。

13

lock

文件锁定,用于文件共享时的互斥访问。

14

readv

在进行读操作前要验证地址是否可读。

15

writev

在进行写操作前要验证地址是否可写。

 

file_operations结构是Linux内核的重要数据结构,也是file{}inode{}结构的重要成员。结构file{}inode{}均定义在/include/linux/fs.h 中。

file结构体中定义成员变量f_op

   struct file_operations *f_op;

inode结构体中定义成员变量i_fop

   const   struct file_operations  *i_fop

在编写设备驱动程序时,需要实现其中几个接口函数:readwriteioctlopenrelease,以完成应用系统需要的功能。