首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux驱动开发-外部中断注册使用(按键为例)

外部中断介绍 前面有篇文章使用杂项设备完成了按键驱动的编写,实现了按键轮询检测,通过read函数向应用层传递按键值,这篇文章使用按键为例,介绍Linux内核里中断注册方法,使用中断的方式检测按键是否按下...Linux内核提供了中断注册接口: (1)注册中断 头文件 include\linux\interrupt.h 定义文件 include\linux\interrupt.h 函数原型 int...返回值 0 表示成功 -EINVAL (无效参数22)表示中断无效。 -EBUSY (设备或者资源忙16)表示中断已经被占用。...(2)注销中断 void free_irq(unsigned int irq,void * dev_id) irq: 要注销的中断 dev_id:其实就是注册时候使用的dev参数,在共享中断必不可少,...[i].name,&key_info[i])) { printk("中断%d注册失败:%s\n",key_info[i].irq,key_info[i].name); } }

4.8K40
您找到你想要的搜索结果了吗?
是的
没有找到

Linux中断 - IDT

中断描述符项定义 当中断发生,cpu获取到中断向量后,查找IDT中断描述符表得到相应的中断描述符,再根据中断描述符记录的信息来作权限判断,运行级别转换,最终调用相应的中断处理程序; 这里涉及到Linux...int)regs->bp); #endif /* CONFIG_IA32_EMULATION */ } syscall_return_slowpath(regs); } 通过中断向量...硬件中断相关IDT的初始化也是在Linux启动时完成,在start_kernel中通过调用init_IRQ完成,我们来看一下: void __init init_IRQ(void) { int...pushq $(~vector+0x80) /* Note: always in signed byte range */ jmp common_interrupt 即先将中断压栈...VECTOR_UNUSED); } } exiting_irq(); set_irq_regs(old_regs); return 1; } 首先根据中断向量获取到对应的中断描述符

6.5K10

注册微信开发测试

注册测试 要进行微信公众的开发,那就需要一个本地的开发环境来进行开发。而微信测试就正好提供了这样的一个development环境。...每个微信号只能对应一个测试,但是每个测试可以开发多个微信公众项目。微信号与测试是一一对应的关系,而测试与开发项目是一对多的关系。进入之后会看到页面里面有以下几个大块。...测试信息 接口配置信息 JS接口安全域名 测试二维码 模板消息接口 体验接口权限表 下面针对每个点介绍一下具体是干嘛的。 测试信息 包含了appId、appsecret。...在服务器中的Token需要跟测试中的配置保持一致。...测试二维码 这里会有一个你的测试号码二维码。如果要使用的话,需要扫码关注公众才能进行开发。右侧则是已经关注了该测试的用户,最多100个。关注后,该测试会出现在订阅的列表中。

2.8K51

如何用手机申请163邮箱_163邮箱注册手机注册

如果你还没有邮箱,直接用手机注册163邮箱,163.net是一款TOM的VIP邮箱,跟普通邮箱的区别是邮箱容量可以无限放大,来往的邮件信息能长期存储,国际邮件能快速收到和发出。 怎么申请邮箱?...点击注册,接下来选择套餐,根据邮箱名字的位数、容量空间、大附件、群发数量,还有安全防护级别、误发邮件撤回次数、删除的邮件回复次数来选择套餐,不过不用担心,如果你现在已经有邮箱了,还可以升级到其他套餐的。...这里不得不说一下,VIP邮箱的账号能注册到3位的,想要的账号名字选择更多。 选择好套餐后,填写个人信息,用手机注册邮箱,付款后就能拿到自己的VIP邮箱了。...以上就是邮箱申请的介绍了,有些公司也会用VIP邮箱作为公司邮箱,在TOM注册邮箱是可以走企业团购的。...若公司有上百人,也可以注册TOM企业邮箱,有管理权限统一管理公司邮箱账号,账号名字也能随时增删改。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

3K20

linux 中断机制《Rice linux 学习笔记》

这篇文章以按键为例子讲解linux中断原理,中断的架构,中断的实现。 在我们的开发中,检测按键是否触发,无非就两种方法—轮询和中断。作者认为两种方法最大的区别就是CPU的利用率。...Linux中断的相关函数: 1、注册中断函数: 中断处理函数结构: typedef irqreturn_t (*irq_handler_t)(int, void*); 注册中断函数:int request_irq...Linux中断实现: 这里例子采用等待队列的方式实现(也就是上述的第二种方法)。...其中:IRQ_EINT0:按键对应引脚的中断。与加载的中断一致。...(IRQ_EINT0, &pins_desc[0]); return 0; } 中断函数的实现: button_irq函数的实现:该函数与请求中断注册中断函数名保持一致。

4.7K10

linux内核缺页中断处理

7.当磁盘中断发生时,表明该页已经被装入,页表已经更新可以反映他的位置,页框也标记位正常状态。 8.恢复发生缺页中断指令以前的状态,程序计数器重新指向这条指令。...9.调度引发缺页中断的进程,操作系统返回调用他的汇编例程 10.该例程恢复寄存器和其他状态信息,返回到用户空间继续执行,就好像缺页中断没有发生过。...linux内核对缺页异常的处理流程很复杂,但是基本思想和上述流程差不多。...下面看linux的基本处理流程: 内核处理缺页异常的主函数就是do_page_fault: /* * 缺页异常处理函数 * pt_regs 各个寄存器的值 * error_code,由硬件产生:...), "=r" (x) : "m"(__m(addr)), "i"(errret), "0"(err)) //"m"(__m(addr)), "i"(4), "0"(4)) 经过以上分析,对linux

10.6K21

Linux内核硬中断中断的原理和实现

linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。...(5)硬中断和软中断的区别 软中断是执行中断指令产生的,而硬中断是由外设引发的。 硬中断中断是由中断控制器提供的,软中断中断由指令直接指出,无需使用中断控制器。...) // 是否处于硬中断 #define in_softirq() (softirq_count()) // 是否处于软中断 三、硬中断 (1)注册中断处理函数 注册中断处理函数: /** * irq...: 要分配的中断 * handler: 要注册中断处理函数 * flags: 标志(一般为0) * name: 设备名(dev->name) * dev: 设备(struct net_device

21.3K21

Linux中断虚拟化(二)

因为可以通过软件编程对其进行控制,比如当管脚收到设备信号时,可以编程控制其发出的中断向量,因此,中断控制器又称为可编程中断控制器(programmable interrupt controller),...从CPU向8259A发送ICW和OCW,从8259A向CPU传送8259A的状态以及中断向量,都是通过数据总线传递的。...8259A中的寄存器IMR(Interrupt Mask Register)负责记录某个中断源是否被屏蔽,比如0中断源被设备了屏蔽,那么IMR的bit 0将被设置。那么这个IMR是谁设置的呢?...8)通常,x86 CPU会发送第2次INTA,在收到第2次INTA后,8259A会将中断向量(vector)送上数据总线D0~D7。...x86CPU前32个中断(0-31)留给处理器异常的,比如第0个中断,是处理器出现除0(Divide by Zero)异常的,不能被占用。

5.7K10

Linux中断虚拟化(一)

作者简介 王柏生 资深技术专家,先后就职于中科院软件所、红旗Linux和百度,现任百度主任架构师。在操作系统、虚拟化技术、分布式系统、云计算、自动驾驶等相关领域耕耘多年,有着丰富的实践经验。...著有畅销书《深度探索Linux操作系统》(2013年出版)。 谢广军 计算机专业博士,毕业于南开大学计算机系。资深技术专家,多年的IT行业工作经验。...本文内容节选自《深度探索Linux虚拟化技术》,已获得机械工业出版社华章公司授权。...因此,在本章中,我们简单介绍硬件中断的基本原理,然后结合中断的基本原理讨论如何虚拟化中断芯片。...图2 基于PIC的虚拟中断过程 具体步骤如下: 1)虚拟设备向虚拟中断芯片PIC发送中断请求,虚拟PIC记录下虚拟设备的中断信息。

6.2K30

Linux中断机制分析

中断分析最近工作繁忙,没有时间总结内核相关的一些东西。上次更新博客到了linux内核中断子系统。这次总结一下软中断,也就是softirq。之后还会总结一些tasklet、工作队列机制。...1.为什么要软中断 编写驱动的时候,一个中断产生之后,内核在中断处理函数中可能需要完成很多工作。但是中断处理函数的处理是关闭了中断的。也就是说在响应中断时,系统不能再次响应外部的其它中断。...这样的后果会造成有可能丢失外部中断。于是,linux内核设计出了一种架构,中断函数需要处理的任务分为两部分,一部分在中断处理函数中执行,这时系统关闭中断。...在linux系统的进程数据结构里,有这么一个数据结构 #define preempt_count()(current_thread_info()->preempt_count), 利用preempt_count...Linux内核就中断方面就必须考虑平衡这三个方面的问题。而下面我要分析的__do_softirq函数就恰似在这三者之间打太极,游刃有余,面面俱到!

8.6K91

Linux 中断子系统(二):GIC 中断控制器

比如按键中断、串口中断等等,这些中断所有的 Core 都可以处理,不限定特定 Core。...分发器收集所有的中断源,可以控制每个中断的优先级,它总是将优先级最高的中断事件发送到 CPU 接口端。分发器端要做的主要 工作如下: ①、全局中断使能控制。 ②、控制每一个中断的使能或者关闭。...GIC-v3 GIC-v3 架构有改变,中断也变多了,不过还是向后兼容 GIC-v2 的。...寄存器分布,不同东西的寄存器开头不一样: GIC-v 3的中断规定如下,来源于ARM官方文档。 最主要的区别就是增加了 LPI 这个中断类型,是基于消息的中断。...LPI 不一样,它是基于消息的机制,写寄存器就会发一个消息中断,是 ARM 在为未来布局,以后会出一些 server 的产品,独享中断

5.4K20

Linux 中断子系统(三):中断处理知识点大全

会看到以中断命名的文件夹,每个中断文件夹下面都有几个节点,存储了这个中断的信息,比如 smp_affinity、affinity_hint、spurious等。...smp_affinity 代表中断核CPU之间的亲缘绑定关系,也就是如果某个中断绑定了一个CPU核,那么这个中断就会一直在这个CPU上处理。 如何让某个中断在某个特定的 CPU 处理?...3、同优先级同是 pending 状态的中断,选择硬件中断 ID 最小的一个发给CPU。...当发生了一个中断,但是没有被处理(有两种可能,一种是根本没有注册的 specific handler,第二种是有 handler,但是 handler 否认是自己对应的设备触发的中断),怎么办?...中断线和中断是一个意思。

4.7K20

Linux中断下半部实现机制

中断上、下半部产生背景 由于内核中中断不允许嵌套,在程序进入中断后,系统会关闭中断接收,这段时间内,其他中断都无法处理导致中断无法响应,因此需要当前进入的中断子服务函数越快越好。...但是在一些特殊情况下,中断要处理的事情可能是复杂且冗长的,为解决这种问题, 中断上下半部的概念顺势而生。将中断拆成两部分,上半部用来处理紧急的事情;下半部用来处理不紧急的事情。 2....tasklet是以软中断形式实现的,软中断的优先级仅次于硬件中断,在进入软件中断时,硬件中断会被打开,因此软件中断可被硬件中断打断。 使用: 软中断实现服务子函数,优先级高,影响系统执行效率。 a....(3) 线程中断:由于工作队列每次只能处理一个中断下半部,但是内核支持多线程,因此出现为每一个中断下半部开辟一个线程处理。将多个中断的下半部线程分配给多个CPU上执行,提高效率。...在程序中调用request_threaded_irq 原型: /* irq: 中断 * handler: 中断服务子函数 * thread_fn: 中断线程化 * irqflags: 中断触发标志位

3.1K10
领券