A20 看门狗驱动

任务:板子上增加了独立的复位芯片SP706S,为了在设备死机的时候重启系统。

资源:芯片使能管脚 PH13     喂狗管脚 PI16

1. 为了省事,直接在drivers/sunxi_gpio/gpio_sw.c这个文件里加了,这里有现成的操作GPIO管脚的函数例子,而且还有

    获取GPIO号的函数例子。


2. 这个驱动实际就是A20的GPIO驱动,也是一个平台总线驱动,他为每一个sys_config.fex里配置的GPIO调用probe函数创建驱动。


3. 我们先在probe函数的最后面增加这一句,以获得GPIO的号码

    printk(KERN_ERR "------gpio %s = %d\n", pdata->name, item.gpio.gpio);


4. 然后接着增加看门狗使能和喂狗定时器

   if(!strcmp("gpio_pin_10", pdata->name))

   {

          __gpio_set_value(item.gpio.gpio,1);

          printk(KERN_ERR "-------enable watchdog-------");

          init_timer(&mytimer);

          mytimer.expires = jiffies;

          mytimer.data = 0;

          mytimer.function = watchdog_timer;

          add_timer(&mytimer);

    }

    gpio_pin_10是我使用的看门狗使能的gpio名字,另外,probe函数会被执行多次,有几个gpio会执行几次,所以

    关于定时器的这几个函数一定要放到这个括号里,否则会多次初始化定时器,会出现意想不到的效果。

    其中一块板子,我在定时函数里做的打印,现象就是打印频率比我设置的时间要快的多。最后发现是因为多个定时器一起在跑。

   另一块板子,直接就内存泄露了。报这个错,Unable to handle kernel NULL pointer dereference。

   耽误了我整整3个小时时间就查这个问题。

  

5.  增加喂狗定时器函数

    #include <linux/sched.h>

    #include <linux/timer.h>

    struct timer_list mytimer;

    static dog = 0;

    void watchdog_timer(unsigned long arg)

   {

         printk(KERN_ERR "feed watchdog %d\n", dog);

         dog = ! dog;

         __gpio_set_value(217,dog);    //217为gpio编号

        mytimer.expires = jiffies+ 50;    // 500ms

        mytimer.data = 0;

        mytimer.function = watchdog_timer;

        add_timer(&mytimer);

  }


6. 下面是定时器喂狗函数的打印,可以看出,linux内核定时器的精度是相当高的。我设置的是500ms的定时器,

    通过下图的计算可以看出,误差基本在10us以内。

 

   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 5.6连接sqlserver,wamp php5.6连接sqlserver

wamp php5.6连接sqlserver2018-09-28 16:05:36首先PHP5.6并未提供链接sqlserver的扩展,需要到微软下载相应版本的PHP链接sqlserver的驱动扩展,php5.6对应的是Version 3.2 supports PHP 5.6, 5.5, and 5.4 on Windows放到php文件夹下/ext扩展文件夹里.并在php.ini中将扩展启用,我…

airpods版本号_Airpods怎么看是第几代?Airpods型号区分教程

Air pods怎么看是第几代&#xff1f;现在airpods已经有3代产品&#xff0c;那么怎么区分这3代产品呢&#xff0c;一起了解一下&#xff01;Airpods型号区分教程1代2代的硬件区分方法&#xff1a;很多人说盒子上的按钮上移可以区别&#xff0c;但是因为你需要同时有2代对比&…

Srping MVC入门推荐

看了不少大牛们的博客&#xff0c;对Spring MVC心里还是一团迷雾。 看了《Spring in Action》&#xff08;Spring实战&#xff09;&#xff0c;疑惑渐渐明朗。 特推荐此书。 转载于:https://www.cnblogs.com/dview112/p/3259064.html

RGB与YUV格式简介

&#xff08;1&#xff09; RGB格式简介 RGB色彩模式是一种颜色标准&#xff0c;是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的。图像中每一个像素的RGB分量都分配一个0~255范围内的强度值。这个标准几乎包括了人类视力所能感知…

創建oracle用戶及表空間,window,linux下創建oracle用戶及表空間 對比 易於學習

1、window下創建oracle用戶及表空間--創建數據表空間create tablespace oras_data --表空間的名字loggingdatafile D:\oracle\product\10.1.0\oradata\oras_data.dbf --表空間的文件&#xff0c;注意據庫版本&#xff0c;我的是10.1.0size 32mautoextend onnext 32m maxsize…

关于非root用户配置ssh运行环境

第一步&#xff0c;我们创建Linux用户&#xff1a; 用root用户登录 A&#xff0e;增加用户组命令&#xff1a;groupadd –g 500 hadoop //此处500是手动设置groupID Linux保留前500 ID号 &#xff1b; B&#xff0e;增加用户命令&#xff1a;useradd –u 500 –g 5…

linux网络设备—mdio总线

一.结构体 struct mii_bus {const char *name; //总线名char id[MII_BUS_ID_SIZE]; //idvoid *priv; //私有数据int (*read)(struct mii_bus *bus, int phy_id, int regnum); //读方法int (*write)(struct mii_bus *bus, int phy_id, int regnum, u16 val); //写方法int (*rese…

运营管理整改报告范文_整改报告 反馈问题整改报告范文精选5篇

反馈问题整改报告范文精选5篇所谓的进步就是将过去的错误更正&#xff0c;小编精选了一些关于整改报告的优秀范文&#xff0c;让我们一起来看看吧。反馈问题整改报告20**年3月17日至4月20日&#xff0c;省委第六巡视组对甘肃省广播电视网络股份有限公司进行了为期一个月的专项巡…

oracle报错00838,oracle11g的内存分配不当,导致的错误ORA-01034,ORA-00838,ORA-27101

由于开发需要&#xff0c;oracle11g被应用于虚拟机&#xff0c;所以系统资源显得弥足珍贵&#xff0c;百度了一下就有答案。用dba身份进入Oracle&#xff0c;笔者在plsql中对数据库进行管理&#xff1a;show parameter sga; --显示内存分配情况alter system set sga_max_size20…

汇编语言学习——第四章 第一个汇编程序

1、一个汇编语言程序从写出到最终执行的简要过程&#xff1a; 编写--> 编译,链接 --> 执行 2、编译&#xff0c;链接 使用汇编语言编译程序&#xff08;MASM.EXE&#xff09;对源程序文件中的源程序进行编译&#xff0c;产生目标文件&#xff1b; 再用连接程序&#xff0…

使用内存文件系统

在Linux中可以将一部分内存mount为分区来使用&#xff0c;通常称之为RamDisk。 RamDisk有三种实现方式&#xff1a; 第一种就是传统意义上的&#xff0c;可以格式化&#xff0c;然后加载。 这在Linux内核2.0/2.2就已经支持&#xff0c;其不足之处是大小固定&#xff0…

射频通路 隔直_2.4G射频双向功放电路的设计与制作

2.4G射频双向功放电路的设计与制作在两个或多个网络互连时&#xff0c;无线局域网的低功率与高频率限制了其覆盖范围&#xff0c;为了扩大覆盖范围&#xff0c;可以引入蜂窝或者微蜂窝的网络结构或者通过增大发射功率扩大覆盖半径等措施来实现。前者实现成本较高&#xff0c;而…

Navicat怎么看oracle作业,[数据库] Navicat for Oracle基本用法图文介绍

打开具体的T_USER_INFO.sql文件代码以下所示&#xff1a;/*Navicat Oracle Data TransferOracle Client Version : 11.2.0Source Server : 远程oracle链接Source Server Version : 110200Source Host : XXXSource Schema : XXXXXXTarget Server Type : ORACLETarget Server Ver…

慕课乐学python单元测试答案_中国大学慕课第三章单元测试答案_乐学软件工程免费答案...

佩戴铂金的好处有哪些人教版八年级下册思想品德全品学练考第七课第1课时财产属于谁答案白金项链变黑了怎么办&#xff0c;如何清洗白金的种类有哪些天津少儿医保如何结算报销&#xff1f;铂金和白金哪个贵&#xff0c;需注意什么黄金项链的保养方法有哪些佩戴铂金的好处有哪些人…

linux arp 文件,LINUX 下ARP 的查找

由于内网无法正常连接网关&#xff0c;远程登陆网关已无法实现。因此一切操作均在网关服务器本地进行。3.1 在服务器本地端口抓包[rootRouted-Server tmp]# tcpdump -nn -i eth1 > error.networktcpdump: listening on eth12749 packets received by filter0 packets…

Android的Recovery中font_10x10.h字库文件制作

任务是要汉化Android中的Recovery&#xff0c;就了解了bootable/recovery/minui/font_10x18.h这个英文字库的来历&#xff0c;最终汉化的时候并没有自己汉字字库&#xff0c;用的github上现成的&#xff0c;但font_10x18.h来历短暂的留存在脑子里边不如记下来&#xff0c;这样会…

git 新建分支并切换到该分支_Git何谓分支

在 Git 中提交时&#xff0c;会保存一个提交(commit)对象&#xff0c;该对象包含一个指向暂存内容快照的指针&#xff0c;包含本次提交的作者等相关附属信息&#xff0c;包含零个或多个指向该提交对象的父对象指针&#xff1a;首次提交是没有直接祖先的&#xff0c;普通提交有一…

linux用户恢复正常,Linux系统用户口令安全恢复方法

Linux系统用户口令安全恢复方法2007-09-07eNet&Ciweek有许多原因可能导致用户口令的遗失&#xff0c;这对系统管理员而言&#xff0c;可能不是一个问题&#xff0c;只要以root账号登录&#xff0c;再用passwd命令更改用户口令就可以了。可是&#xff0c;如果丢失的是root口…

A20 init.sun7i.rc 文件

如果需要在开机的时候&#xff0c;自动加载一些ko文件&#xff0c;或者通过chmod修改一些设备文件的属性&#xff0c;都可以再 init.sun7i.rc文件中添加insmod和chmod命令来实现。 init.sun7i.rc文件在 android4.2/out/target/product/wing-mbox230/root目录下。 但是实际操…

python 多元线性回归的系数检验 t p值_多元线性回归检验t检验(P值),F检验,R方等参数的含义...

做线性回归的时候&#xff0c;检验回归方程和各变量对因变量的解释参数很容易搞混乱&#xff0c;下面对这些参数进行一下说明&#xff1a;1.t检验&#xff1a;t检验是对单个变量系数的显著性检验 一般看p值&#xff1b; 如果p值小于0.05表示该自变量对因变量解释性很强。2…