一:内核中断

linux内核中的看门狗中断跟之前的裸板的中断差不多,在编写驱动之前,需要线把内核自带的watch dog模块裁剪掉,要不然会出现错误;在Device Drivers /Watchdog Timer Support /S3C2410 Watchdo

在内核中,我们处理一个中断,必须先注册一个中断号,注册中断的函数是:

request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,

const char *name, void *dev)

{

return request_threaded_irq(irq, handler, NULL, flags, name, dev);

}

irq是要申请的硬件中断号。

handler 是向系统注册的中断处理函数,是一个回调函数,中断发生时,系统调用这个函数,dev参数将被传递给它。

flags 是中断处理的属性,若 设置了IRQF_DISABLED ,则表示中断处理程序是快速处理程序,快速处理程序被调用时屏蔽所有中断,慢速处理程 序不屏蔽;若设置了IRQF_SHARED ,则表示多个设备共享中断,若设置了IRQF_SAMPLE_RANDOM,表示对系统熵有贡献,对系统获取随机数有好处。

name设置中断名称,通常是设备驱动程序的名称  在cat /proc/interrupts中可以看到此名称。

dev在中断共享时会用到,一般设置为这个设备的设备结构体或者为NULL

request_irq()返回0表示成功,返回-INVAL表示中断号无效或处理函数指针为NULL,返回-EBUSY表示中断已经被占用且不能共享。

在开发板上通过cat /proc/interrupts查看中断有没有注册成功:

下面代码实现是按键(key1)控制dog,dog控制灯,按键第一次按下灯闪,再次按下灯灭

#include

#include

#include

#include

#include

#include

#include

MODULE_LICENSE("GPL");

MODULE_AUTHOR("bunfly");

irqreturn_t do_irq(int irq, void *data);

void led_on();

void led_off();

void wt_on();

void wt_off();

unsigned long gpio_virt;

unsigned long *gpm4con, *gpm4dat;

unsigned long wt_virt;

unsigned long *wtcon, *wtdat, *wtcnt, *wtclrint;

struct clk *wtclk;

int et_irq = ;

int bunfly_init()

{

int ret = ;

et_irq = gpio_to_irq(EXYNOS4_GPX3());//EXINT()获取外部中断号

ret = request_irq(et_irq, do_irq, IRQ_TYPE_EDGE_FALLING, "key 1", );//注册按键中断

if(ret < ) { //中断号 //处理函数

printk("request_irq error\n");

return ;

}

wtclk = clk_get(NULL, "watchdog");//设置时钟频率

clk_enable(wtclk);

ret = request_irq(IRQ_WDT, do_irq, IRQF_SHARED, "wangcai", );//注册watchdog中断

if(ret < ) {

printk("request_irq\n");

return ;

}

gpio_virt = ioremap(0x11000000, SZ_4K);//led的物理地址到虚拟地址

gpm4con = gpio_virt + 0x02e0;

gpm4dat = gpio_virt + 0x02e4;

wt_virt = ioremap(0x10060000, SZ_4K);//dog的物理地址到虚拟地址

wtcon = wt_virt + 0x00;

wtdat = wt_virt + 0x04;

wtcnt = wt_virt + 0x08;

wtclrint = wt_virt + 0x0c;

return ;

}

void bunfly_exit()

{

printk("this is bunfly_exit\n");

}

module_init(bunfly_init);

module_exit(bunfly_exit);

irqreturn_t do_irq(int irq, void *data)

{

if(irq == et_irq) {//判断是否为按键中断

static int flags = ;

printk("key 1 down\n");

if(flags) {

wt_on();

flags = ;

}

else {

wt_off();

led_off();

flags = ;

}

}

if(irq == IRQ_WDT) {//判断是否为狗中断

*wtclrint = ;//清中断

static int flags = ;

if(flags) {

led_on();

flags = ;

}

else {

led_off();

flags = ;

}

}

return IRQ_HANDLED;//处理完成

}

void led_on()

{

*gpm4con &= ~0xffff;

*gpm4con |= 0x1111;

*gpm4dat = 0x0;

}

void led_off()

{

*gpm4con &= ~0xffff;

*gpm4con |= 0x1111;

*gpm4dat = 0xf;

}

void wt_on()

{

*wtdat = 0x8000;

*wtcnt = 0x8000;

*wtcon = ( << ) | ( << ) | ( << ) | ( << );

}

void wt_off()

{

*wtcon = ;

}

Linux 内核中断内幕

转自:http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/index.html#resources Linux 内核中断内幕 ...

Linux内核中断和异常分析&lpar;中&rpar;

在linux内核中,每一个能够发出中断请求的硬件设备控制器都有一条名为IRQ的输出线.所有现在存在的IRQ线都与一个名为可编程中断控制器的硬件电路的输入引脚相连,上次讲到单片机的时候,我就讲到了单片机 ...

Linux编程之《看门狗进程》

Intro 当我们编写服务器代码时,为了让自己的服务器在意外崩溃时能够及时的重启,软件看门狗就显示出它的作用了,该看门狗进程是通过fork一个子进程(业务进程),父进程一旦捕获到了子进程的结束信号就重 ...

Linux 下如何使用看门狗

Linux内核有集成WD的选项.将其使能后,系统里就会有watchdog的设备驱动:/dev/watchdog.这样,在应用程序里只需打开这个设备使用即可:#include

Linux内核中断学习

1.内核中断概述 (1)在OS环境下编写中断处理函数与之前在裸机中编写中断处理函数的方式是不一样的,在Linux内核中提供了一套用来管理硬件中断资源的软件体系架构. (2)在操作系统中,中断号与gpi ...

linux内核--中断处理程序

一个设备的中断处理程序是它设备驱动程序的一部分--设备驱动程序是用于对设备进行管理的内核代码.中断处理程序与其他内核函数的真正区别在于,中断处理程序是被内核调用来响应中断的,而它们运行于我们称之为中断 ...

Linux内核中断和异常分析&lpar;上&rpar;

中断,通常被定义为一个事件.打个比方,你烧热水,水沸腾了,这时候你要去关掉烧热水的电磁炉,然后再去办之前手中停不下来的事情.那么热水沸腾就是打断你正常工作的一个信号机制.当然,还有其它的情况,我们以后 ...

Linux内核中断和异常分析&lpar;下&rpar;

这节,我们继续上,中(以前的日志有)篇目进行分析,结合一个真实的驱动案例来描述linux内核中驱动的中断机制,首先我们先了解一下linux内核中提供的中断接口. 这个接口我们需要包含一个头文件:#in ...

Tiny4412中断之看门狗

一:看门狗(WDT watch dog timer) 看门狗其实是一个计数器,它的作用就是防止程序陷入死循环或者程序运行跑飞:看门狗是一个硬件,它的工作原理是,初始化给他一个值,它会过一段时间减一,直 ...

随机推荐

&lbrack;HTML&rsqb; IE&equals;edge&comma;chrome&equals;1的META标签详解

文件兼容性用于定义让IE如何编译你的网页.此文件解释文件兼容性,如何指定你网站的文件兼容性模式以及如何判断一个网页该使用的文件模式. meta信息中常有这么一句:

rsync-3&period;0&period;6-64

http://rsync.samba.org/ 用的是rsync-3.0.6-12.el6.x86_64 Rsync version 3.1.1 released June 22nd, 2014 Rs ...

PHP&period;4-DIV&plus;CSS标准网页布局准备工作(下)

DIV+CSS标准网页布局准备工作 区块属性(区块模型) 属 性 描 述 Margin(注) 是定义区块外边界与上级元素距离的属性,用1到4个值来设置元素的边界,每个值都是长度.百分比或者auto,百 ...

WebSocket刨根问底&lpar;二&rpar;

上篇文章[WebSocket刨根问底(一)]中我们对WebSocket的一些基本理论进行了介绍,但是并没有过多的涉及到一些实战的内容,今天我希望能够用几个简单的案例来向小伙伴们展示下WebSocket ...

css预处理器:Sass LASS Stylus

语法 Sass h1 { color: #0982C1; } h1 color: #0982c1 LESS h1 { color: #0982C1; } Stylus /* style.styl */ ...

vs&plus;qt 运行过程出现cannot run rc&period;exe

刚开始,我按照网上的一堆教程在qt creator中设置了各种东西,设置完以后,运行时出现cannot run rc.exe,根据百度,将C:\Program Files (x86)\Windows ...

Python之异常处理和socket套接字连接7

一.异常处理 1)异常处理的使用意义 什么是异常处理 异常是程序发生错误的信号,即程序一旦出错就会立刻产生一个异常,如果该异常没有被处理 那么异常就抛出来,程序的运行也随之终止 异常分为三部分: 异常 ...

你真的了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构

微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...

bzoj 1053

代码: //本题要求不超过n的因子最多的最小的数,我们知道因子的个数可以有素因子的指数得出,题目限制n是2e9,我们可以排除掉一些情况然后暴力 //对于一个数必然是因子越小他的因子数越多,所以枚举最小 ...

linux内核看门狗关闭方法,linux内核中断之看门狗相关推荐

  1. Linux centos7升级内核(两种方法:内核编译和yum更新)

                Linux centos7升级内核(两种方法:内核编译和yum更新) Linux的内核概念不用说大家也很清楚,正是内核版本的不同,才有Linux发行版本的说法,现在主流的cen ...

  2. linux内核看门狗关闭方法,详解linux 看门狗驱动编写

    看门狗是linux驱动的一个重要环节.某些特殊的设备,有时候需要放在一些环境恶劣的地方,比如电信设备.但是,任何软件都不可能100%没有bug.如何保证软件在遇到严重bug.死机的时候也能正常运行呢, ...

  3. linux用命令强制关闭进程,Linux如何使用kill命令强制终止进程

    Linux如何使用kill命令强制终止进程 在Windows系统中,如果应用程序无反应我们会启动任务管理器终止应用,而在Linux系统中则使用kill命令,kill命令主要用于强制关闭进程,下面小编就 ...

  4. linux环境变量配置的方法,Linux环境变量配置方法

    Linux上环境变量配置分为设置永久变量和临时变量两种.环境变量设置方法同时要考虑环境Shell类型,不同类型的SHELL设置临时变量方法和设置永久变量对应的配置文件不同.Linux环境变量本身配置过 ...

  5. linux下字体怎么安装方法,linux安装字体方法

    1.查看系统中文字体 #fc-list :lang=zh 2.如果提示commont not fount 说明为安装fontconfig 3.安装fontconfig #yum -y install ...

  6. linux挂载u盘的方法,linux挂载U盘的方法

    linux挂载U盘的方法 (2012-08-15 15:56:47) 标签: 挂载 u盘 优盘 3g fat32 it 如果想让linux识别U盘,需要把鼠标先定位在虚拟机的linux里面,然后插入优 ...

  7. linux内核申请内存的方法,Linux内核空间的内存申请常用函数

    在Linux内核编程中内存的申请不同于系统编程,她有自己的一套机制. 1. kmalloc 函数原型:void *kmalloc( size_t size, int flags ) 参数说明:size ...

  8. linux内核中测量时间的方法,Linux内核中获取时间函数do_gettimeofday

    内核代码能一直获取一个当前时间的表示, 通过查看 jifies 的值. 常常地, 这个值只代表从最后一次启动以来的时间, 这个事实对驱动来说无关, 因为它的生命周期受限于系统的 uptime. 如所示 ...

  9. linux 关闭网络防火墙设置方法,CentOS Linux防火墙配置及关闭方法

    偶然看到防火墙的配置操作说明,感觉不错.执行"setup"命令启动文字模式配置实用程序,在"选择一种工具"中选择"防火墙配置",然后选择&q ...

最新文章

  1. 事务复制提示初始快照不可用_谈谈数据库的事务ACID
  2. Python之路---------Python介绍
  3. 使用JWT的Cloud Native应用程序
  4. 用于Spring JPA2后端的REST CXF
  5. 腾讯云云机安装dockers
  6. DataGridView控件
  7. Fluent Ribbon 第八步 其他控件
  8. 类和对象编程(三):构造函数析构函数
  9. 怎么让Windows2012和Windows2008多用户同时远程
  10. mixins,generics(ApiView)
  11. Java中方法与数组
  12. 指标公式c语言源码下载,通达信超级厉害指标公式源码附图-通达信公式-公式指标网...
  13. 会声会影2022Win64中文版特别版
  14. 【完整matlab程序】【预测程序】狼群优化算法及BP神经网络
  15. 《你的灯亮着吗?》 读后感
  16. 软件开发文档的编写---软件研制任务书 (2015-03-14 17:55:03)转载▼ 标签: 软件 文档 任务书 需求 要求 分类: 软件过程改进 一. 简介 客户要
  17. ADXL361(微功耗三轴加速度计)使用笔记
  18. 栈顶和栈底(直接明了)
  19. ClickHouse函数操作大全
  20. django项目 网易云音乐

热门文章

  1. word文档 尾注参考文献
  2. 小型健身俱乐部管理系统的设计与实现_kaic
  3. Android X轴Y轴Z轴旋转
  4. 计算机考研369,369和199考研数学的区别 考研王一鸣老师为你解析!
  5. 日期与天数互转的实现代码(VS2022 C++)
  6. win10 安装c语言无法启动,如何解决win10应用程序无法正常启动0xc0000018的问题
  7. 如何用python画出一般函数图_如何使用python的matplotlib画一元一次函数图像
  8. 2022 中国白帽人才能力与发展状况调研报告
  9. 信息管理系统——项目简介和系统架构
  10. JavaWeb12(域对象EL表达式JSTL)