Linux开发十一_看门狗驱动

来源:互联网 发布:2017淘宝怎么删除差评 编辑:程序博客网 时间:2024/06/05 16:33

Linux开发十一

看门狗驱动

象棋小子    1048272975

看门狗的用途是当cpu进入到错误状态后,无法恢复的情况下,使系统重新启动。Linux内核已经支持s3c2416的看门狗驱动。

1. watchdog设备

watchdog设备包含了名字、独有的资源等等一些驱动程序的硬件或自定义信息。通过platform_add_devices(platform_device_register)函数将定义的平台设备注册到内核中,用于匹配设备驱动。

内核在drivers\watchdog\s3c2410_wdt.c中实现了s3c2416 watchdog驱动, watchdog设备的平台代码如下。

static struct resources3c_wdt_resource[] = {

       [0]= DEFINE_RES_MEM(S3C_PA_WDT, SZ_1K),

       [1]= DEFINE_RES_IRQ(IRQ_WDT),

};

 

struct platform_device s3c_device_wdt ={

       .name            = "s3c2410-wdt",

       .id          = -1,

       .num_resources    = ARRAY_SIZE(s3c_wdt_resource),

       .resource       = s3c_wdt_resource,

};

在static struct platform_device *home2416_devices[]板级平台设备列表中加入&s3c_device_wdt,使watchdog设备能够注册到内核中。

修改驱动文件s3c2410_wdt.c,使系统启动后使能看门狗,复位时间30秒。

#define CONFIG_S3C2410_WATCHDOG_ATBOOT        (1)

#defineCONFIG_S3C2410_WATCHDOG_DEFAULT_TIME   (30)

2. 内核配置

Linux配置支持watchdog设备驱动,选中DeviceDrivers->Watchdog Timer Support-> S3C2410 Watchdog。

3. 应用编程

cat/proc/devices可以知道watchdog的主设备号为252,次设备号为0,在/dev目录中创建watchdog设备文件。

mknod /dev/watchdog c 252 0

应用程序可以通过设备文件访问watchdog,watchdog应用测试代码watchdog_test.c如下。

#include "fcntl.h"

#include <stdio.h>

#include <stdlib.h>

#include <sys/ioctl.h>

#include <linux/watchdog.h>

 

int main(void)

{

       intfd;

       fd= open("/dev/watchdog", O_RDONLY);

       if(fd == -1) {

              printf("Openwatchdog failed\n");

              exit(1);

       }

       while(1) {

              ioctl(fd,WDIOC_KEEPALIVE);

              sleep(7);

       }

       close(fd);

       return0;

}

用arm-linux-gcc静态编译,使之生成arm cpu可执行的指令,并且可脱离任何库独立运行,arm-linux-gcc -static -o watchdog_test watchdog_test.c,生成watchdog_test可执行文件。复制可执行文件到根文件系统,启动后,执行./watchdog_test进行喂狗,可以杀死喂狗进程,确定看门狗可以重启系统。

4. 附录

https://pan.baidu.com/s/1slczwhJ

bootloader源码以及使用说明

https://pan.baidu.com/s/1eRDJtNs

Qt5.8官网源码

https://pan.baidu.com/s/1nuGmSqt

本系列例程的根文件系统

https://pan.baidu.com/s/1i5btLGT

opev3.2.0官网源码

https://pan.baidu.com/s/1pLpuHw3

yaffs官网源码 

https://pan.baidu.com/s/1bpkZynt

busybox-1.26.2官网源码

https://pan.baidu.com/s/1i4EtjfR

tslib官网源码

https://pan.baidu.com/s/1i5MGRhb

mplayer-1.3.0官网源码

https://pan.baidu.com/s/1sl0fXlr

基于S3C2416修改的linux-4.10.10源码

 

0 0