Linux设备驱动程序讲述.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux设备驱动程序讲述

§1.4 用户模式驱动程序 I/O映射 ioperm() 为用户应用程序打开一块I/O空间 iopl() 为用户应用程序打开整个I/O地址空间 MontaVista Linux不支持 §1.4 用户模式驱动程序 内存映射 通过设备/dev/mem来访问硬件设备 使用mmap()函数来选择要访问的内存物理基址和块大小,它返回已经映射到物理基址的虚拟地址 void *mmap (void *start, size_t length, int prot, int flags,in fd,off_t offset) fd=open(“/dev/men”,O_WRONLY); ledptr=mmap(0,sizeof(LED_AREA),PROT_WRITE,MAP_SHARED,fd,LED_ADDRESS); *ledptr=value; §1.4 用户模式驱动程序 读写设备 使用函数inb(), inw(), inl() 或readb(), readw(), readl()来读设备 使用函数outb(), outw(), outl()或writeb(), writew(),writel()来写设备 它们的头文件是sys/io.h, §2 中断处理 基本概述 探测中断 安装中断 取消中断 §2.1 基本概念 分类 硬件中断 由硬件设备产生的中断 执行相应的中断处理程序 可以产生软中断(tasklet)来实现耗时的中断处理任务,也就是下半部中断 软中断(softIRQ) 内核中共有32个softIRQ, 其中一个就是TASKLET_SOFTIRQ 在内核执行do_softirq()函数时,轮询这32个softirq,如果相应的softirq可以执行,就执行它指导的函数 TASKLET_SOFTIRQ对应的函数是tasklet_action(),它会依次执行挂在TASKLET_SOFTIRQ上的tasklet §2.1 基本概念 Read执行流程 Process read(…) Device Driver Top Half (markbin) Dev_read(…) Initiate transfer Wait (time passes) Bottom Half/Task (resume) §2.1 基本概念 中断处理程序举例 struct tasklet_struct my_tasklet; elsewhere, in some initialization section tasklet_init(my_tasklet, my_bh, NULL); void th_interrupt(int irq, void *dev_id, struct pt_regs *regs) { dl_gettimeofday(tv_head); tv_head++; if(tv_head==(tv_data+NR_TIMEVAL)) tv_head==tv_data; tasklet_schedule(my_tasklet); /*queue the tasklet*/ short_bh_count++; /*record that an interrupt arrived*? } §2.2 探测中断 1. probe_irq_on(void) 返回一个unsigned long 位掩码 2. 使设备发中断 3. probe_irq_oof(unsigned long) 第一步返回的位掩码传给此函数 返回值即为探测到的中断号(如果为0或为负则没有可用中断) 探测中断例子 unsigned long mask=probe_irq_on(); outb_p(0x10,short_base+2); /*enable reporting*/ outb_p(0x00,short_base); /*clear the bit*/ outb_p(0xFF,short_base); /*set the bit:interrupt*/ outb_p(0x00,short_base+2); /*disable reporting*/ irq=probe_irq_off(mask); §2.2 探测中断 安装SIU中断 SIU中断向量表16个(/include/asm-asm-ppc/irq.h) 外部中断 根据硬件连线确定IRQ号码,比如是IRQ3 调用函数request_8xxirq(SIU_IRQ3, my_handler, flag, devname, devpointer) 内部中断

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档