linux设备驱动编程-初探(4)--问题整理

将这几天学习的内容不理解的部分整理一下,在这里做个标记:

1:最大的问题,书中的例子是一个scull(Simple Character Utility for Loading Localities)【区域装载的简单字符工具】的一个驱动程序例子,该例子是一个操作内存区域的字符设备驱动程序,就将内存区域当作一个设备。然而在实际的驱动程序运用中,一般来说都是直接操作硬件设备的,我这里有很的一个疑问,系统如何识别这个硬件,然后对这个硬件编写驱动程序,让驱动程序进行对该硬件的控制,估计这个问题在后面的知识点中会碰到答案,现在不是很理解,先做标识;

2:关于几个重要的数据结构方面,有4个数据结构,分别是:file_operations, file, inode, cdev 这3个数据结构的作用分别是:

file_operations: 将尚未将任何驱动程序操作链接到这里已经制定好的设备编号。

file: 代表一个打开的文件,系统中每个打开的文件在内核空间中都有一个对应的file结构。

inode: 内部表示文件的结构体。以上三个数据结构都是定义在文件<linux/fs.h>

cdev: 表示字符设备信息的结构体。该数据结构定义在<linux/cdev.h>

以上这几个数据结构是内核中关于字符设备相关的重要的数据结构,对于file_operations数据结构,里面包含一些函数关联,这些函数用于实现系统调用,比如:read,write,open等,在file数据结构体中也包含了file_operations这个数据结构的成员,为什么要包含这个呢,书中是这么解释的,@与文件相关的操作,内核在执行open操作时对这个指针赋值【struct file_operations *f_op】,以后要处理操作时就读取这个指针@这点我的理解是:一个设备驱动文件被打开后,会对这个设备文件描述的结构体中直接附加上了对这个设备文件的一些操作方法。另外对于file和inode数据结构,在书中是这么解释:内核用inode结构在内部表示文件,因此它和file结构不同,后者表示打开的文件描述符。对单个文件,可能会有许多个表示打开的文件描述符的file结构,但他们都指向单个inode结构。在这里我的理解是file结构和inode结构的对应关系是多对一的关系,即inode是内核中唯一表示一个打开的文件的数据结构,而file结构体,可以以不同的形式来描述一个文件,所以存在多种状态的值,即各个file结构体成员的值是不同的。

另外一个重要的数据结构体struct cdev,这个结构体与前面三个结构体要分开来说明,因为这个结构体中是linux系统内核支持的一种设备类型,即字符设备类型。该结构体是用在内核和设备间的接口struct cdev。这里怎么设备注册,以及设备注册的概念不是很明白,需要再看看书。

3: 书中的例子scull驱动的内存使用的说明也不是很明白,关于量子,量子级这块,还有其中的几个系统调用函数等。

阅读更多
个人分类: Linux方面
想对作者说点什么? 我来说一句

深入浅出Linux设备驱动编程

2010年05月11日 685KB 下载

linux设备驱动开发详解及配套源码

2017年09月15日 58.03MB 下载

增加并发控制后的globalmem程序

2015年03月26日 18.8MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭