当前位置: 首页 > news >正文

Linux内核中断和Linux内核定时器

目录

Linux内核中断

Linux内核定时器


Linux内核中断

int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev)

功能:注册中断

参数:

@irq : 软中断号       gpio的软中断号    软中断号 = gpio_to_irq(gpio号);

gpio = m*32+n         m:那一组  A B C D E →  0 1 2 3 4 

n:组内的序号

gpioa28 = 0*32+28   (按键)gpiob8 = 1*32+8

gpiob8 =1*32+8     (按键) gpiob16 = 1*32+16 

b24 => n=241

 控制器中断号(如ADC):

find -name irqs.h     ./arch/arm/mach-s5p6818/include/mach/irqs.h

find -name s5p6818_irq.h   ./arch/arm/mach-s5p6818/include/mach/s5p6818_irq.h

        #define IRQ_PHY_ADC   (41 + 32)  //IRQ_PHY_ADC软中断号

@handler: 中断的处理函数

irqreturn_t (*irq_handler_t)(int irqno, void *dev);

IRQ_NONE        //中断没有处理完成

IRQ_HANDLED     //中断正常处理完成

@flags :中断的触发方式

#define IRQF_DISABLED 0x00000020 //快速中断

#define IRQF_SHARED 0x00000080     //共享中断

#define IRQF_TRIGGER_RISING 0x00000001

#define IRQF_TRIGGER_FALLING 0x00000002

#define IRQF_TRIGGER_HIGH 0x00000004

#define IRQF_TRIGGER_LOW 0x00000008

    @name :名字   cat /proc/interrupts

    @dev  :向中断处理函数中传递参数 ,如果不想传写个NULL就行

返回值:成功0,失败返回错误码

void free_irq(unsigned int irq, void *dev_id)

功能:注销中断

参数:

@irq :软中断号

@dev_id:向中断处理函数中传递的参数 ,如果上面写的NULL,这里就写NULL

 

 

问题解决方法

[root@farsight]#insmod farsight_irq.ko 

[   21.262000] request irq146 error

insmod: can't insert 'farsight_irq.ko': Device or resource busy

通过 cat /proc/interrupts

146:        GPIO  nxp-keypad

154:        GPIO  nxp-keypad

说明中断号已经被占用了

解决办法:在内核中将这个驱动删掉

如果确定驱动文件的名字是谁?

grep "nxp-keypad" * -nR

arch/arm/mach-s5p6818/include/mach/devices.h:48:

#define DEV_NAME_KEYPAD         "nxp-keypad"

grep "DEV_NAME_KEYPAD" * -nR

drivers/input/keyboard/nxp_io_key.c:324: .name = DEV_NAME_KEYPAD,

驱动文件的名字是nxp_io_key.c

如何从内核中将他去掉?

选项菜单的名字?Kconfig

config KEYBOARD_NXP_KEY

        tristate "SLsiAP push Keypad support"

    make menuconfig

<>SLsiAP push Keypad support

make uImage  重新编译内核

cp  arch/arm/boot/uImage ~/tftpboot

计算gpio号

 

 

 

 

 

 

 

 

 

 

 v

 

 

 

 

Linux内核定时器

1.定时器的当前时间如何获取?

jiffies:内核时钟节拍数

jiffies是在板子上电这一刻开始计数,只要

板子不断电,这个值一直在增加(64位)。在

驱动代码中直接使用即可。

2.定时器加1代表走了多长时间?

在内核顶层目录下有.config

CONFIG_HZ=1000    →   时钟频率1000HZ  

周期 = 1/CONFIG_HZ

周期是1ms;

1.分配的对象

struct timer_list mytimer;

2.对象的初始化

struct timer_list

 {

unsigned long expires;   //定时的时间

void (*function)(unsigned long); //定时器的处理函数

unsigned long data;      //向定时器处理函数中填写的值 一般添0

};

void timer_function(unsigned long data) //定时器的处理函数

{

}

mytimer.expries = jiffies + 1000;  //中断时间1s

mytimer.function = timer_function;    //timer_function中断处理函数

mytimer.data = 0;

init_timer(&mytimer);  //内核帮你填充你未填充的对象

3.对象的添加定时器

void add_timer(struct timer_list *timer);

//同一个定时器只能被添加一次,

//在你添加定时器的时候定时器就启动了,只会执行一次

int mod_timer(struct timer_list *timer, unsigned long expires)

//再次启动定时器                          jiffies+1000

4.对象的删除

int del_timer(struct timer_list *timer)//删除定时器

#include <linux/init.h>
#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/gpio.h>#define GPIONO(m,n) m*32+n  //计算软中断号
#define GPIO_B8  (GPIONO(1,8))//计算按键gpiob8软中断号
#define GPIO_B16  (GPIONO(1,16)) //计算按键gpiob16软中断号struct timer_list mytimer;//声明结构体int gpiono[] = {GPIO_B8,GPIO_B16};//数组内存入两个按键的软中断号
char *irqname[] = {"interrupt-b8","interrupt-b16"};//中断的名字void key_irq_timer_handle(unsigned long data)//定时器中断处理函数
{int status_b8  = gpio_get_value(GPIO_B8);//读取gpiob8数值int status_b16 = gpio_get_value(GPIO_B16);//读取gpiob16数值if(status_b8 == 0){//如果等于0表示按下,执行打印函数printk("left  button down............\n");}if(status_b16 == 0){//如果等于0表示按下,执行打印函数printk("right button down#############\n");}}irqreturn_t farsight_irq_handle(int num, void *dev)//按键产生的中断处理函数
{mod_timer(&mytimer,jiffies+10);//开启定时器。只要触发就重新赋值,用来消抖return IRQ_HANDLED;
}static int __init farsigt_irq_init(void)//入口
{int ret,i;//1.定时器的申请mytimer.expires = jiffies + 10;//时间mytimer.function = key_irq_timer_handle;//定时器中断处理函数mytimer.data = 0;//参数init_timer(&mytimer);//将定时器信息写入进行初始化add_timer(&mytimer);//开启一次定时器//2.中断的申请for(i=0;i<ARRAY_SIZE(gpiono); i++){//这里用for主要目的之申请两个中断ret = request_irq(gpio_to_irq(gpiono[i]),farsight_irq_handle,IRQF_TRIGGER_FALLING,irqname[i],NULL);//中断申请 参数:软中断号  中断执行函数  下降沿触发 中断的名字if(ret){printk("request irq%d error\n",gpio_to_irq(gpiono[i]));//申请失败提示return ret;}}return 0;
}
static void __exit farsight_irq_exit(void)出口
{	int i;for(i=0;i<ARRAY_SIZE(gpiono); i++){//注销掉中断free_irq(gpio_to_irq(gpiono[i]),NULL);}del_timer(&mytimer);//注销掉定时器
}
module_init(farsigt_irq_init);
module_exit(farsight_irq_exit);
MODULE_LICENSE("GPL");

相关文章:

Linux内核中断和Linux内核定时器

目录 Linux内核中断 Linux内核定时器 Linux内核中断 int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev) 功能&#xff1a;注册中断 参数&#xff1a; irq : 软中断号 gpio的软中断号 软中断号 gpio_to_i…...

OMG--IDL(Interface Definition Language)

OMG--IDL&#xff08;Interface Definition Language&#xff09; 1 概述2 内容缩写IDL 语法和语义概述词法约定ISO Latin-1的字母字符如下表十进制数字字符图形字符格式化字符Tokens注释标识符冲突规则转义标识符关键字IDL识别的其他字符字面量 预处理IDL 语法构建块核心数据类…...

英语学习:M开头

machine 机器 mad 发疯的&#xff0c;生气的 madam 女士&#xff0c;夫人 madame 夫人 magazine 杂志 magic 有魔力的 maid 女仆&#xff0c;侍女 mail 邮递 mailbox 邮箱 mainland 大陆 major 较大的&#xff0c;主要的 majority 大多数 male 雄的 man 人类 man…...

【计算机组成原理与体系结构】控制器

目录 一、CPU的功能与基本结构 二、指令周期的数据流 三、数据通路 四、硬布线控制器 五、微程序控制器 六、微指令 一、CPU的功能与基本结构 运算器基本结构 控制器基本结构 CPU的基本结构 二、指令周期的数据流 取址周期 间址周期 中断周期 指令周期流程 三、数据通路 …...

结构化命令

章节目录&#xff1a; 一、使用 if-then 语句二、if-then-else 语句三、嵌套 if 语句四、test 命令4.1 数值比较4.2 字符串比较4.3 文件比较 五、复合条件测试六、if-then 的高级特性6.1 使用单括号6.2 使用双括号6.3 使用双方括号 七、case 命令八、结束语 本章内容&#xff1…...

Java Web实训项目:西蒙购物网

文章目录 一、创建数据库和表1、创建数据库2、创建用户表3、创建类别表4、创建商品表5、创建订单表 二、创建Simonshop项目1、创建web项目2、修改Artifacts名称&#xff1a;simonshop3、重新部署项目4、编辑首页5、启动应用&#xff0c;查看效果 三、创建实体类1、用户实体类2、…...

ChatGPT Prompt 提示词设计技巧必知必会

本文内容整理自图灵社区直播《朱立成&#xff1a;ChatGPT Prompt提示词技巧必知必会》。 朱立成&#xff0c;图灵社区《ChatGPT即学即用》视频课程作者&#xff0c;软件工程师&#xff0c;对新事物充满好奇&#xff0c;关注ChatGPT应用。2001年毕业于浙江大学&#xff0c;从事软…...

尚硅谷-云尚办公-项目复盘

尚硅谷-云尚办公-项目复盘 资料地址本文介绍问题汇总问题1.knife4j无法下载 视频4问题2.dev等含义 视频5问题3.wrapper继承/实现图 视频8问题4.修改统一返回结果 视频11问题5.修改后新增也变修改 视频29问题6.redis中key值乱码 视频55-60问题7.RangeError: Maximum call stack …...

nacos升级到2.0.3(单机模式)

前提&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明 Spring Cloud AlibabaSpring CloudSpring BootNacos2.2.7.RELEASESpring Cloud Hoxton.SR122.3.12.RELEASE2.0.3 一、pom.xml文件 <parent><groupId>org.springframework.boot&…...

Koa学习3:用户添加、错误处理

模型 在src目录下创建model目录&#xff0c;用来存放模型 创建用户模型 user.model.js 注意&#xff1a; UUID类型是无法自增的&#xff0c;将id设置为UUID类型时只需要为其指定默认值即可 // 数据类型 const { DataTypes } require(sequelize); // 导入已经连接了数据库…...

网络安全入门学习第十五课——PHP基础

文章目录 一、WEB技术1、什么是web2、B/S架构3、C/S架构 二、PHP概述1、PHP是什么2、PHP受欢迎的原因3、基于MVC模式的PHP框架4、常用编译工具5、PHP环境搭建6、开发工具 三、PHP基本语法格式1、标记2、输出语句3、注释4、标识符 四、数据与运算1、常量1.1、常量定义1.2、预定义…...

电子科技大学 数学专业-功不唐捐,玉汝于成

电子科技大学 数学专业 功不唐捐&#xff0c;玉汝于成 1.本科背景 本科是坐落于湖南湘潭的湖南科技大学&#xff0c;专业为网络工程专业&#xff0c;因热爱数学专业&#xff0c;所以决定跨考数学专业。 本科专业课平均成绩85&#xff0c;排名10/104。CET 4 474分&#xff0c;…...

Android10.0 iptables用IOemNetd实现删除子链功能的实现

1.前言 在10.0的系统rom定制化开发中,在system中netd网络这块的产品需要中,会要求设置屏蔽ip地址之内的功能, liunx中iptables命令也是比较重要的,接下来就来在IOemNetd这块实现删除创建子链的相关功能 2. iptables用IOemNetd实现删除创建子链功能的实现的核心类 syste…...

OpenGL光照之光照贴图

文章目录 漫反射贴图镜面光贴图放射光贴图代码 每个物体都拥有自己独特的材质从而对光照做出不同的反应的方法。这样子能够很容易在一个光照的场景中给每个物体一个独特的外观&#xff0c;但是这仍不能对一个物体的视觉输出提供足够多的灵活性。 我们将整个物体的材质定义为一个…...

2018~2019 学年第二学期《信息安全》考试试题(B 卷)

北京信息科技大学 2018 ~2019 学年第 2 学期 《信息安全》课程期末考试试卷 B 课程所在学院:计算机学院 适用专业班级:计科 1601-06&#xff0c;重修 考试形式:(闭卷) 一. 选择题(本题满分 10 分&#xff0c;共含 10 道小题&#xff0c;每小题 1 分) 网络中存在的安全漏洞主…...

LeetCode-C#-0002.两数相加

0.声明 该题目来源于LeetCode 如有侵权&#xff0c;立马删除。 解法不唯一&#xff0c;如有新解法可一同讨论。 1.题目 0002两数相加 给你两个非空的链表&#xff0c;表示两个非负的整数&#xff0c;它们每位数字都是按照逆序的方式存储的&#xff0c;并且每个节点只能存储一…...

访问修饰符private,default,protected,public访问等级区别

private&#xff1a;private是最严格的访问修饰符&#xff0c;它将成员声明为私有的。私有成员只能在声明它们的类内部访问&#xff0c;其他类无法直接访问私有成员。这样可以确保数据的封装性和安全性。 default&#xff08;默认&#xff09;&#xff1a;如果没有明确指定访问…...

阿里云(Linux)安装Docker教程

首先安装docker&#xff0c;需要找到帮助文档&#xff0c;那肯定是我们的官网&#xff1a; Install Docker Engine on CentOS | Docker Documentation 找到对应的位置&#xff0c;这里是安装在CentOS中&#xff0c;版本需要Ce…...

Linux C编程基础:获取时间

1.前言 对于linux下的编程&#xff0c;无论是用户态还是内核态&#xff0c;时间获取都是经常需要使用到的。以下分别从用户态和内核态整理了几个常用的时间获取接口&#xff0c;供编写代码时快速查阅。 2.用户态获取时间 2.1 clock_gettime() #include <time.h>int c…...

Spring核心注解

1、Bean注解 作用&#xff1a;用于把当前方法的返回值作为bean对象存入spring的ioc容器中位置: 一般出现在方法上面属性: name:用于指定bean的id。当不写时&#xff0c;默认值是当前方法的名称细节&#xff1a;当我们使用注解配置方法时&#xff0c;如果方法有参数&#xff0c;…...

VNote批量操作终极指南:如何一次处理百篇笔记提升效率 [特殊字符]

VNote批量操作终极指南&#xff1a;如何一次处理百篇笔记提升效率 &#x1f680; 【免费下载链接】vnote A pleasant note-taking platform in native C. 项目地址: https://gitcode.com/gh_mirrors/vn/vnote VNote批量操作是每个高效笔记用户必须掌握的技能&#xff01…...

Exception Error

Exception 分为两类&#xff1a;运行时异常&#xff08;非受检异常&#xff09;继承自 RuntimeException&#xff0c; 编译器不强制处理&#xff0c;多为代码逻辑错误导致。常见例子&#xff1a; NullPointerException&#xff08;空指针异常&#xff09; ArrayIndexOutOfBound…...

智能重复文件清理:DupeGuru终极配置与实战指南

智能重复文件清理&#xff1a;DupeGuru终极配置与实战指南 【免费下载链接】dupeguru Find duplicate files 项目地址: https://gitcode.com/gh_mirrors/du/dupeguru 在数字时代&#xff0c;重复文件如同无形的存储黑洞&#xff0c;悄无声息地吞噬着宝贵的磁盘空间。无论…...

跨平台的Web应用快速开发框架

跨平台的Web应用快速开发框架。该框架提供了一套标准化的项目结构规范、统一的API接口命名规则、规范化的前后端代码&#xff0c;支持基于同一套设计规范Python&#xff08;Flask/Django&#xff09;、PHP、Java&#xff08;SpringBoot/SSM&#xff09;等多种后端语言代码 &…...

利用Taotoken的多模型能力为AIGC应用构建弹性后备方案

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 利用Taotoken的多模型能力为AIGC应用构建弹性后备方案 对于开发图像生成、文案创作等AIGC应用的团队而言&#xff0c;服务连续性至…...

代码骨架生成器:从原理到实践,打造高效项目脚手架

1. 项目概述&#xff1a;从零到一的代码骨架生成器在软件开发领域&#xff0c;尤其是团队协作或个人快速启动新项目时&#xff0c;我们常常会陷入一种重复性的“仪式感”中&#xff1a;创建项目目录结构、初始化版本控制、配置构建工具、设置代码规范、编写基础配置文件……这些…...

1k Star的p-retry,让异步操作失败自动重试

文章目录1k Star的p-retry&#xff0c;让异步操作失败自动重试核心功能适用场景注意事项1k Star的p-retry&#xff0c;让异步操作失败自动重试 sindresorhus开源的p-retry项目&#xff0c;目前在GitHub上获得1009个Star。这个库的核心功能是为异步操作添加重试机制&#xff0c…...

SoC设计中虚拟原型技术与TLM建模实践

1. 虚拟原型技术概述在SoC设计领域&#xff0c;虚拟原型技术(Virtual Prototyping)已经成为现代芯片开发流程中不可或缺的关键环节。这项技术的核心价值在于&#xff0c;它能够在RTL级硬件设计完成之前&#xff0c;就为软件团队提供一个可执行的硬件抽象模型。作为一名经历过多…...

面向非技术人员的AI智能体实战:零代码自动化工作流构建指南

1. 项目概述&#xff1a;面向非工程师的AI智能体实战训练营如果你是一名市场、销售、运营或行政人员&#xff0c;每天被重复性的文档处理、数据分析、内容制作和跨平台沟通所淹没&#xff0c;看着工程师同事用代码自动化一切&#xff0c;自己却只能手动操作&#xff0c;那么你很…...

3个战略理由选择ES-Client作为您的Elasticsearch管理平台

3个战略理由选择ES-Client作为您的Elasticsearch管理平台 【免费下载链接】es-client elasticsearch客户端&#xff0c;issue请前往码云&#xff1a;https://gitee.com/qiaoshengda/es-client 项目地址: https://gitcode.com/gh_mirrors/es/es-client 在当今数据驱动的业…...