
答案对人们有帮助,并具有参考价值.
0
字符设备和块设备之间的主要区别在于,当向字符设备发出读/写请求时,实际的硬件I / O通常紧随其后. 块设备不是. 它使用一块系统内存作为缓冲区. 如果用户进程请求设备满足用户要求,则返回请求的数据;否则,返回错误消息. 否则,它将调用请求函数以执行实际的I / O操作. 块设备主要用于磁盘等速度较慢的设备,以避免浪费过多的CPU时间等待. 网络设备可以通过BSD套接字访问数据.
每个设备文件都有其文件属性(c / b),指示它是字符设备还是块设备. 此外,每个文件都有两个设备号,第一个是主设备号,用于标识驱动程序. 第二个是从设备号,它标识使用同一设备驱动程序的不同硬件设备. 设备文件的主设备号必须与设备驱动程序在注册过程中应用的主设备号相同,否则用户进程将无法访问该驱动程序.
在系统调用期间,操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口. 设备驱动程序是内核的一部分,它执行以下功能:
初始化并释放设备

将数据从内核传输到硬件并从硬件读取数据
读取应用程序发送到设备文件的数据和应用程序请求返回的数据
检测并处理设备错误
MTD(存储技术设备)设备是诸如闪存芯片嵌入式 linux驱动,小型闪存卡和记忆棒之类的设备,并且它们在嵌入式设备中的使用正在增加. MTD驱动程序是专门为Linux下的嵌入式环境开发的一类新的驱动程序. 与传统的块设备驱动程序相比,使用MTD驱动程序的优势在于它们可以更好地支持和管理闪存设备,并且具有更好的接口,可用于基于扇区的擦除和读/写操作.
驱动程序结构

Linux设备驱动程序可以分为3个主要组件:
1. 自动配置和初始化子例程,负责监视要驱动的硬件设备的存在和正常运行. 如果设备正常,请初始化设备及其关联的设备驱动程序所需的软件状态. 该驱动程序的这一部分在初始化期间仅被调用一次.
2. 服务I / O请求的子例程,也称为驱动程序的上半部分. 该程序的这一部分是系统调用的结果. 当程序的这一部分执行时,系统仍然认为它与调用过程属于同一进程,但是从用户模式更改为核心模式. 它具有进行此系统调用的用户程序的运行环境,因此您可以调用sleep()和与执行环境有关的其他功能.
3. 中断服务子例程,也称为驱动程序的下半部分. 在Linux系统中,不是直接从中断向量表中调用设备驱动程序的中断服务子例程,而是由硬件系统接收硬件中断,然后系统会调用中断服务子例程. 中断可以在任何进程运行时生成,因此,在调用中断服务例程时,它不能依赖于任何进程的状态,也不能调用与该进程的运行环境相关的任何函数. 因为设备驱动程序通常支持多个相同类型的设备,所以当系统调用中断服务程序时,它通常会使用一个或多个参数来唯一标识请求服务的设备.
在系统内部,通过一组固定的入口点来存储/检索I / O设备,这些入口点由驱动程序为每个设备提供. 特定于Linux系统,由设备驱动程序提供的一组入口点通过文件操作结构向系统说明. file_operation结构在linux / fs.h文件中定义.

struct file_operation {
int(* lseek)(struct inode * inode,结构文件* filp,off_t off,int pos);
int(*读取)(struct inode * inode,结构文件* filp,char * buf,intcount);
int(*写)(struct inode * inode,结构文件* filp,const char * buf嵌入式 linux驱动,intcount);
int(* readdir)(struct inode * inode,结构文件* filp,struct dirent * dirent,int count);

int(*选择)(struct inode * inode,结构文件* filp,int sel_type,select_table * wait);
int(* ioctl)(struct inode * inode,结构文件* filp,unsigned int cmd,unsigned int arg);
int(* mmap)(void);
int(*打开)(struct inode * inode,结构文件* filp);
int(*版本)(struct inode * inode,结构文件* filp);
int(* fasync)(struct inode * inode,结构文件* filp);
};
file_operation结构的成员几乎是所有函数指针,因此它们本质上是函数跳转表. 设备上每个进程的操作将根据主要和次要设备编号转换为对file_operation结构的访问.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-145482-1.html
差劲