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中将扩展启用,我…

关于非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…

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口…

hdu 4322 最大费用流

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid4322 #include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include <algorithm> #include <queue> #include <vector> using namespace s…

Linux 编译 libc log,在Android的源码中添加LOG

想在Opencore代码中添加打印信息&#xff0c;但是使用OpenCore自带的PVLOGGER&#xff0c;有一定的局限&#xff0c;因为只能在创建对象调用相应的ThreadLogon()后才能使用。所以不能实现在任何函数中添加。于是通过添加Log.h的方法来添加。首先转下别人的经验我试了下还是出先…

ubuntu修改用户名、计算机名、主目录名

今天是MPI并行程序设计这门课交作业的截止日期&#xff0c;我们寝室的张佳和刘庆的本科同学来了&#xff0c;所以他们也没有时间搞&#xff0c;我就又做一回好人吧&#xff01;帮他们搞一下&#xff01;帮他们写报告的过程中最主要的问题就是跑那个MPI的程序&#xff0c;因为我…

linux redis可视化工具,几款开源的图形化Redis客户端管理软件

Redis是一个超精简的基于内存的键值对数据库(key-value)&#xff0c;一般对并发有一定要求的应用都用其储存session&#xff0c;乃至整个数据库。 它自带一个最小化的命令行式的数据库管理工具&#xff0c;有时侯使用起来并不方便。不过Github上面已经有了很多图形化的管理工具…

linux c 将虚拟地址转化为物理地址_面试不懂 Linux 内存管理?我用 20 张图给你讲明白...

微信搜索公众号「 后端技术学堂 」回复「1024」获取50本计算机电子书&#xff0c;回复「学习路线」获取超详细后端技术学习路线思维导图&#xff0c;文章每周持续更新&#xff0c;我们下期见&#xff01;大家好&#xff0c;我是柠檬哥。分享编程学习&#xff0c;助力程序员成长…

nginx源码分析—模块及其初始化

Content 0. 序 1. nginx有哪些模块&#xff1f; 2. nginx如何描述这些模块&#xff1f; 2.1 模块数据结构 2.1.1 ngx_module_t结构 2.1.2 ngx_command_t结构 2.2 模块类图 3. nginx如何组织这些模块&#xff1f; 3.1 全局数组ngx_modules 3.2 模块组织结构图 4. nginx的模块种类…

linux 网络相关,Linux系统管理员必备的21个网络相关监控

Linux系统管理员必备的21个网络相关监控1. ntopngntopng 是 ntop 的升级版&#xff0c;它提供了一个能通过浏览器进行网络监控的图形用户界面。它还有其他用途&#xff0c;如&#xff1a;地理定位主机&#xff0c;显示网络流量和 ip流量分布并能进行分析。2. iftopiftop 类似于…

固态硬盘 linux 文件系统,SSD是否需要使用特别的文件系统?

用认真的态度与专业的情怀倾注于存储&#xff0c;欢迎关注我&#xff0c;与我交流哦&#xff01;我们常用的电脑系统主要是Windows和Linux&#xff0c;其中&#xff0c;Windows系统中常用的文件系统主要是FAT和NFTS&#xff0c;FAT是旧Windows和U盘用的较多&#xff0c;最新Win…

java二维数组数字数显次数_【每日一题】118.数组中数字出现的次数

关注我们获取更多计算机考研信息? 今日习题在一个数组 nums 中除一个数字只出现一次之外&#xff0c;其他数字都出现了三次。请找出那个只出现一次的数字。示例 1&#xff1a;输入&#xff1a;nums [3,4,3,3]输出&#xff1a;4示例 2&#xff1a;输入&#xff1a;nums [9,1,…

微软的转型中?

北京时间8月23日夜&#xff0c;微软在其官网上发表新闻称&#xff0c;微软首席执行官Steve Ballmer将在12个月内退休。 微软在这篇《微软CEO Steve Ballmer将在12个月内退休》新闻中表示&#xff0c;其首席执行官Steve Ballmer已决定将在12个月内退休&#xff0c;尤其是当新的首…

k均值的损失函数_一种基于均值不等式的Listwise损失函数

1 前言1.1 Learning to Rank 简介Learning to Rank (LTR) , 也被叫做排序学习, 是搜索中的重要技术, 其目的是根据候选文档和查询语句的相关性对候选文档进行排序, 或者选取topk文档. 比如在搜索引擎中, 需要根据用户问题选取最相关的搜索结果展示到首页. 下图是搜索引擎的搜索…

HBase 集群搭建

文章目录 安装前准备兼容性官方网址 集群搭建搭建 Hadoop 集群搭建 Zookeeper 集群解压缩安装配置文件高可用配置分发 HBase 文件 服务的启停启动顺序停止顺序 验证进程查看 Web 端页面 安装前准备 兼容性 1&#xff09;与 Zookeeper 的兼容性问题&#xff0c;越新越好&#…

在哪个Linux发行版上运行python,怎么在linux上运行python

Linux默认是已经安装好了Python程序目前来说&#xff0c;大多数的Linux发行版是安装了两个版本的Python程序一个是Python 2.x一个是Python 3.x一些系统自带的程序文件需要Python 2的支持&#xff0c;另外Python 3又是大势所趋所以&#xff0c;我们最好不要动系统的Python版本需…