LDD3第三章有哪些重点内容,如何高效学习?

2026-05-22 08:391阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1423个文字,预计阅读时间需要6分钟。

LDD3第三章有哪些重点内容,如何高效学习?

思维导图

需求

实现一个设备/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分钟。

LDD3第三章有哪些重点内容,如何高效学习?

思维导图

需求

实现一个设备/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结构体。

阅读全文