LDD3第三章有哪些重点内容,如何高效学习?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1423个文字,预计阅读时间需要6分钟。
实现一个设备/dev/scull,这个设备能用dd, cp, cat和Shell的IO重定向功能操作。
设备号Linux用主次两个设备号去唯一的表示一个设备。其中主设备号表示一类驱动,而次设备号用来给具体的设备编号。内核可以通过此设备号得到一个设备指针
除了主次设备号,内核也使用专门的dev_t类型去给设备编号,dev_t是一个32位的整型变量。其中前12位用来表示主设备号,低20位用来表示次设备号。
设备号的转换主次设备号和devt_t的转换通过以下三个宏实现:
MAJOR(dev_t dev); //从设备编号中提取主设备号
MAJOR(dev_t dev); //从设备编号中提取从设备号
MKDEV(int major, int minor); //根据主从设备号计算出dev_t类型的设备号
主要的数据结构
(1)struct file
struct file {
void * private_data; //驱动程序常用字段,本文使用该字段表示量子集的头指针
loff_t f_pos; //读写文件的位置表示当前进程读写到了文件的那一个部分
atomic_long_t f_count; //结构体被进程引用的次数---引用计数
struct file_operation *f_ops; //表示在该文件上可以执行的操作
};
该结构体表示一个打开的设备或文件,在task_struct中,存在一个打开文件表,表中的每一项都是一个struct file结构体。
本文共计1423个文字,预计阅读时间需要6分钟。
实现一个设备/dev/scull,这个设备能用dd, cp, cat和Shell的IO重定向功能操作。
设备号Linux用主次两个设备号去唯一的表示一个设备。其中主设备号表示一类驱动,而次设备号用来给具体的设备编号。内核可以通过此设备号得到一个设备指针
除了主次设备号,内核也使用专门的dev_t类型去给设备编号,dev_t是一个32位的整型变量。其中前12位用来表示主设备号,低20位用来表示次设备号。
设备号的转换主次设备号和devt_t的转换通过以下三个宏实现:
MAJOR(dev_t dev); //从设备编号中提取主设备号
MAJOR(dev_t dev); //从设备编号中提取从设备号
MKDEV(int major, int minor); //根据主从设备号计算出dev_t类型的设备号
主要的数据结构
(1)struct file
struct file {
void * private_data; //驱动程序常用字段,本文使用该字段表示量子集的头指针
loff_t f_pos; //读写文件的位置表示当前进程读写到了文件的那一个部分
atomic_long_t f_count; //结构体被进程引用的次数---引用计数
struct file_operation *f_ops; //表示在该文件上可以执行的操作
};
该结构体表示一个打开的设备或文件,在task_struct中,存在一个打开文件表,表中的每一项都是一个struct file结构体。

