您的位置:首页 > 其它

脚踏实地,一步一步学arm(DMA)实验

2014-05-16 21:04 176 查看
1.file_operation结构体

     ⑴字符驱动和内核的接口

     ⑵字符驱动只要实现一个file_operation结构体

     ⑶当注册当内核中,内核就有了操作此设备的能力

 

2.file结构体

     ⑴file结构:

             1.file_operation结构相关的一个结构体

             2.描述一个正在打开的设备文件

     ⑵成员:

             1.loff_t f_pos当前读写位置

             2.unsigned int f_flags表示文件打开时,是否可读写

      ⑶struct file_operations *f_op

             文件相关操作:指向所实现的struct file_operations

      ⑷void *private_data:

              私有数据指针,驱动程序可以将这个字段用于任何目的或者忽略这个字段

3.inode结构体

      ⑴内核用inode结构在内部表示文件

      ⑵inode与file的区别

             file表示打开的文件描述符

             多个表示打开的文件描述的file结构,可以指向单个inode结构

      ⑶inode结构中的两个主要字段

             dev_t i_rdev     对设备文件的inode结构,该字段包含了真正的设备编号

             struct cdev *i_cdev

             struct cdev是表示字符设备的内核的内部结构

             当inode指向一个字符设备文件时,该字段包含了指向struct cdev结构的指针

       ⑷从一个inode中获得主设备和次设备号:

              unsigned int iminor(struct inode *inode)

              unsigned int imajor(struct inode *inode)

4.注册设备,在模块或驱动初始化时调用

5.注销设备

            因为注册和注销设备的函数随着版本的不同会发生变化,所以在这里就步过多描述了

6.打开

       int xxx_open(struct inode *inode,struct file *filp);

       模块使用计数加1

       识别次设备号

       硬件操作:

              检查设备相关错误

               如果是首次打开,就对其初始化

              如果有中断操作,申请中断处理程序

7.关闭

       int xxx_release(struct inode *inode,struct file *filp);

           模块使用计数减1

           释放由open分配的,保存在file>private_data 里的所有内容

           硬件操作:

                   如果申请了中断,则释放中断处理程序

                    在最后一次关闭操作时关闭设备

8.read/write

9.用户空间和内核空间之间的数据拷贝过程。

        不能简单的用指针操作或者memcpy来进行数据拷贝

              用户空间的数据是可以被换出的,会产生一个页面失效异常

              用户空间的地址无法在内核空间中使用

10.用户空间和内核空间进行数据拷贝的函数:

         unsigned long copy_from_user(void *

11.ioctl函数

       为设备驱动程序执行“命令提供了一个特有的入口点

       用来设置或者读取设备的属性信息

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

12,cmd参数的定义

            

       

               

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  嵌入式驱动