Linux系统分析――devicedriversppt课件.ppt

Linux系统分析――devicedriversppt课件.ppt

ID:59416586

大小:163.00 KB

页数:60页

时间:2020-09-19

Linux系统分析――devicedriversppt课件.ppt_第1页
Linux系统分析――devicedriversppt课件.ppt_第2页
Linux系统分析――devicedriversppt课件.ppt_第3页
Linux系统分析――devicedriversppt课件.ppt_第4页
Linux系统分析――devicedriversppt课件.ppt_第5页
资源描述:

《Linux系统分析――devicedriversppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux系统分析——Linux设备管理徐辉主要内容概述驱动程序Basics中断处理辅助函数设备驱动程序模块编程基础字符设备块设备网络设备概述输入输出子系统:下层:设备驱动程序上层:设备无关部分——VFSinLinux?Unix和Linux的设备管理方法:VFS设备管理总体结构示意用户程序系统调用接口文件系统高速缓存字符设备块设备驱动程序硬件设备输入输出系统层次结构用户进程设备无关软件设备驱动程序设备服务子程序中断处理程序硬件I/O请求I/O应答进行I/O调用; 格式化I/O命名、保护、阻塞、缓冲、分配建立设备寄存器、检测状态I/O结束时,唤醒设备服务子程序执行I/O操作驱动程序基础—

2、—I/O空间Linux中的三种地址空间:CPUUntranslatedAddressCPUTranslatedAddressBusAddress:一般PC机中是一组寄存器命令more/proc/ioports常见总线ISA VESA EISA PCI驱动程序基础——命名空间并行设备:lp软盘:fdSCSI盘:sd IDE硬盘:hda1,hda2,hdb等 网络设备:ethn,slipn,pppn等在写驱动程序的时候,需要给函数名加上选择的前缀来避免任何混淆。如:foo_read(),foo_write()等。驱动程序基础——内存分配函数kmalloc()内存以2的幂大小的块分配有一个优

3、先级参数宏kfree()和函数kfree_s()kfree()调用kfree_s(),和free()一样工作 可以直接调用kfree_s(),但是需要知道释放内存块的大小驱动程序基础——设备分类字符设备:不使用缓冲区,顺序读写foo_read()&foo_write()块设备:需要使用缓冲区,随机读写策略规程网络设备 采用了特殊的处理方法。Structdevice驱动程序基础——设备号主设备号&次设备号主设备号相同的设备使用相同的驱动程序 次设备号区分具体设备的实例命令:ls–l/dev/had*驱动程序基础——中断vs轮询工作机制的区别编程上的区别:UNIX的系统调用:执行模式的改变

4、内核模式下的进程访问进程原来所在的用户空间的存储:get_fs_*()和memcpy_fromfs()读用户空间,put_fs_*()和memcpy_tofs()写入用户空间内存。在进程运行时调用,不需要考虑地址的问题。在中断发生时,这些宏不能使用。因为它们可能覆盖其他运行着的进程的随机空间。必须提供临时空间存放信息。 对于块设备,由cache缓冲机制自动提供;字符设备需要驱动程序分配。驱动程序基础——DMA方式用于传送大规模的数据PC机上的ISADMA控制器8条DMA通道。每条通道联系着一个16位地址寄存器和16位计数器DMA直接访问物理内存DMA通道不能被共享。一些设备拥有固定的D

5、MA通道。Structdma_chan结构: 每个通道拥有一个此结构两个域:指向该通道拥有者的字符串指针 指示该通道是否已分配的标志驱动程序基础——睡眠唤醒机制TASK_INTERRUPTIBLETASK_UNITERUPTIBLE,决定于睡眠是否能够被系统调用一类的事情打断。一般来说,如果设备比较慢、可以被无限阻塞,包括终端、网络设备或伪设备,睡眠应该是可中断的_sleep_on()Structwait_queue{structtask_struct*task;structwait_queue*next;};驱动程序基础——设备文件设备管理的“上半部分”Structfile结构 in

6、clude/linux/fs.h增加一个设备时需要用mknod命令为该设备创建一个inode驱动程序基础——file_operationslseek():转到所需的偏移。structinode*inode指向此设备inode结构的指针。Structfile*file指向此设备的文件结构的指针。Off_toffset要转移到的相对origin指示的基准的偏移地址。Intorigin0=采用相对于绝对地址0(开始)的偏移量。1=采用相对于当前位置的偏移量。2=采用相对于末尾的偏移量。Lseek()在出错是返回出错码–errno,否则返回lseek操作以后的绝对地址(>=0)。read()和

7、write()structinode*inode:指向代表要访问的设备的特殊文件的指针。sturctfile*file:指向该设备的文件结构的指针。Char*buf:一个读写的字符缓冲区。位于用户空间内存中,可以用get_fs*(),put_fs*()和memcpy*fs()访问。Intcount:缓冲区中读或写的字符的计数。它是buf的大小,也是知道怎样到达buf的末尾的手段,因为buf是没有保证以NULL结尾的。Select()struct

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。