s3c6410在linux下的WATCHDOG TIMER(看门狗定时器)驱动(1)

发布者:创意航海最新更新时间:2022-06-14 来源: eefocus关键字:s3c6410  linux  WATCHDOG  TIMER  看门狗定时器 手机看文章 扫描二维码
随时随地手机看文章

还是先说下整体结构,又要说到大家很熟悉的平台设备了,同样看门狗定时器也是作为平台设备存在的,但与以前的不同的地方是,看门狗定时器是一种混杂设备,先介绍下混杂设备。


1、混杂设备


1.1、混杂设备并没有明确的定义。它的主设备号是10,不同的设备用次设备号区分。混杂设备用结构体miscdevice表示,源码如下:


struct miscdevice  {

int minor; 次设备号

const char *name; 设备名

const struct file_operations *fops;设备的操作函数,与字符设备相同

struct list_head list; 链接混杂设备的链表

struct device *parent;指向父设备

struct device *this_device;指向设备结构体

};


对应的看下看门狗中的定义:


在S3c2410_wdt.c (linux2.6.28driverswatchdog)文件中


static struct miscdevice s3c2410wdt_miscdev = {

.minor  = WATCHDOG_MINOR,

.name = "watchdog",

.fops = &s3c2410wdt_fops,

};


其中还有:


/* kernel interface */

static const struct file_operations s3c2410wdt_fops = {

.owner  = THIS_MODULE,

.llseek  = no_llseek,

.write  = s3c2410wdt_write,

.unlocked_ioctl= s3c2410wdt_ioctl,

.open = s3c2410wdt_open,

.release  = s3c2410wdt_release,

};


1.2、混杂设备的注册和注销


内核提供了misc_register用于注册一个混杂设备。


/**

 * misc_register-register a miscellaneous device

 * @misc: device structure


int misc_register(struct miscdevice * misc)


同样对应的内核提供了misc_deregister用于混杂设备的注销。


/**

 * misc_deregister - unregister a miscellaneous device

 * @misc: device to unregister


int misc_deregister(struct miscdevice *misc)


2、再来看看门狗定时器作为平台设备存在


static struct platform_driver s3c2410wdt_driver = {

.probe  = s3c2410wdt_probe,

.remove  = s3c2410wdt_remove,

.shutdown  = s3c2410wdt_shutdown,

.suspend  = s3c2410wdt_suspend,

.resume  = s3c2410wdt_resume,

.driver  = {

.owner  = THIS_MODULE,

.name = "s3c2410-wdt",

},

};



static char banner[] __initdata =

KERN_INFO "S3C2410 Watchdog Timer, (c) 2004 Simtec Electronicsn";


static int __init watchdog_init(void)

{

printk(banner);

return platform_driver_register(&s3c2410wdt_driver);

}

static void __exit watchdog_exit(void)

{

platform_driver_unregister(&s3c2410wdt_driver);

}

module_init(watchdog_init);

module_exit(watchdog_exit);


看到这些,你可能都看腻了。没办法,接着来,平台设备的资源定义在


Devs.c (linux2.6.28archarmplat-s3c64xx)文件中:


/* Watchdog */

static struct resource s3c_wdt_resource[] = {

[0] = {

.start = S3C64XX_PA_WATCHDOG,

.end   = S3C64XX_PA_WATCHDOG + S3C64XX_SZ_WATCHDOG - 1,

.flags = IORESOURCE_MEM,

},

[1] = {

.start = IRQ_WDT,

.end   = IRQ_WDT,

.flags = IORESOURCE_IRQ,

}

};


平台设备定义在同一个文件中:


struct platform_device s3c_device_wdt = {

.name             = "s3c2410-wdt",

.id               = -1,

.num_resources    = ARRAY_SIZE(s3c_wdt_resource),

.resource         = s3c_wdt_resource,

};


EXPORT_SYMBOL(s3c_device_wdt);


3、S3c2410_wdt.c (linux2.6.28driverswatchdog)文件开头一些变量的含义(参考于网络和书籍),如下所示:



(1)、static int nowayout = WATCHDOG_NOWAYOUT;

nowayout为1表示不允许关闭看门狗,为0表示可以关闭。

与CONFIG_WATCHDOG_NOWAYOUT配置相关,当配置为不允许关闭时,应用层调用close函数将不能关闭看门狗

#ifdef CONFIG_WATCHDOG_NOWAYOUT

#define WATCHDOG_NOWAYOUT 1

#else

#define WATCHDOG_NOWAYOUT 0

#endif


(2)、

static int tmr_margin = CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME;默认的喂狗时间

#define CONFIG_S3C2410_WATCHDOG_DEFAULT_TIME  (15)

(3)、static int tmr_atboot = CONFIG_S3C2410_WATCHDOG_ATBOOT;表示系统启动时就能使用看门狗。为1表示能,为0表示不能。

 #define CONFIG_S3C2410_WATCHDOG_ATBOOT  (0)

(4)、static int soft_noboot;表示看门狗的工作方式,看门狗可以作为定时器使用,也可以作为复位使用。soft_noboot为1时看门狗将作为一般的中断定时器使用,为0时作为可复位电路的看门狗,默认为0

(5)、static int debug;  调式模式

(6)、

module_param(tmr_margin,  int, 0);

module_param(tmr_atboot,  int, 0);

module_param(nowayout,    int, 0);

module_param(soft_noboot, int, 0);

module_param(debug,   int, 0);

驱动程序模块参数,如果在加载驱动模块时没有设定这些参数,则这些参数将采用默认值。

(7)、

typedef enum close_state {

CLOSE_STATE_NOT,不允许关闭

CLOSE_STATE_ALLOW = 0x4021允许关闭

} close_state_t;


用来标识看门狗是否允许关闭。


关键字:s3c6410  linux  WATCHDOG  TIMER  看门狗定时器 引用地址:s3c6410在linux下的WATCHDOG TIMER(看门狗定时器)驱动(1)

上一篇:s3c6410在linux下的WATCHDOG TIMER(看门狗定时器)驱动(2)
下一篇:s3c6410在linux下的WATCHDOG TIMER(看门狗定时器)驱动(3)

推荐阅读最新更新时间:2024-11-09 11:25

基于S3C2410处理器目标板的Linux移植
引言 嵌 人式系统就是以应用为中心、以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。ARM嵌人式 芯片是一种高性能、低功耗的RISC芯片。它由英国ARM公司设计,世界上几乎所有的主要半导体生产商都生产基于ARM体系机构的通用芯片,或在其专用芯 片中应用相关ARM技术。在2001年基于ARM内核的处理器占市场份额的75%,成为业界的龙头。 Linux 是免费发行的、快速高效的操作系统 ,Linux的出现在计算机世界引发了一场革命。Linux操作系统以代码开放、功能强大又易于移植成为嵌入式操作新兴力量。嵌人式Linux是按照嵌人 式操作系统的要求设计的一种小型操作系统,由一
[单片机]
MSP430F169 Timer_A原理(一)----定时器的四个模式
Timer_A简介 Timer_A是程序设计的核心,它有一个十六位定时器和多路比较/捕获通道组成。每一个比较/捕获通道都以十六位定时器的定时功能为核心进行单独的控制。 Timer_A特点 1、具有四种工作模式的异步16位定时器/计数器 2、可选择和可配置的时钟源 3、三个可配置的捕获/比较寄存器 4、具有 PWM 功能的可配置输出 5、异步输入和输出锁存 6、用于快速解码所有 Timer_A 中断的中断向量寄存器 Timer_A定时器框图和MSP430F169引脚图 启动定时器 定时器时钟可以来自 ACLK、SMCLK或外部通过 TACLK 或 INCLK。时钟源通过 TASSELx 位选择。选定的时钟源可以直接传递给定时
[单片机]
MSP430F169 <font color='red'>Timer</font>_A原理(一)----<font color='red'>定时器</font>的四个模式
Linux刷机总结(S5PV210)
刷机前要破环iNand,才能从SD卡启动 u-boot下破坏iNand movi write u-boot 0x30000000 SD卡下载.bin失败: 管理员身份运行 WIN10_Andriod驱动安装失败: https://blog.csdn.net/qq_24046029/article/details/95728564 LinuxQT刷Andriod总结: 开机,使用SecuteCRT链接开发板 进入linux系统控制台,执行如下指令: busybox dd if=/dev/zero of=/dev/mmcblk0 bs=512 seek=1 count=1 conv=sync 刷卡工具去制作启动SD卡,
[单片机]
<font color='red'>Linux</font>刷机总结(S5PV210)
N76E003配置看门狗watchdog
说明 本例子只做软件异常时重置系统用,不需要用作定时器或唤醒用,所以不用打开watchdog中断。需要注意的是:如果上次启动开启过watchdog reset,想要关闭,下次启动必须清除CONFIG4内的WDT配置,否则watchdog还是启动的。 主要代码只是在CONFIG4寄存器对看门狗定时器WDT做使能关闭的配置( ,0xF0关闭重置只做定时器,0x50和其他任意值开启重置,但0x50在空闲或掉电模式下停止运行),由于是页擦除,所以先保存CONFIG0到CONFIG4的值再写入。 在操作前要执行TA时效访问保护。 参考代码 #include N76E003.h #include SFR_Macro.h #in
[单片机]
N76E003配置<font color='red'>看门狗</font><font color='red'>watchdog</font>
OK6410A 开发板 (八) 37 linux-5.11 OK6410A 内存管理第五阶段
vmalloc vmalloc_init for_each_possible_cpu(i) { // vfree_deferred 类型变量的 链表 和 工作任务 free_work // free_work用于vfree执行时延迟异步释放vmalloc内存 struct vfree_deferred *p; ... // vmap_block_queue 类型变量的链表和锁 // vmap_block_queue 是 非连续内存块队列管理结构 struct vmap_block_queue *vbq; ... } // 将vmalloc_init之前的过程中分配的vma
[单片机]
Linux驱动之异步通知的应用
前面的按键驱动方式都是应用程序通过主动查询的方式获得按键值的: 1、查询方式 2、中断方式 3、poll机制 下面介绍第四种按键驱动的方式 4、异步通知:它可以做到应用程序不用随时去查询按键的状态,而等待有按键被按下后,驱动程序主动发消息给应用程序,应用程序再去处理。 比如说:kill -9 pid即是一种发信号的过程:其中9就是信号值,pid就是被发送的进程的进程号 a、一个简单的异步通知的例子 b、编写测试程序实现异步通知 c、更改按键驱动实现异步通知 1、一个简单的异步通知的例子 直接看到程序源码,可以看到这个程序在主程序里面什么事情也没有做,一直处于睡眠状态。 #includ
[单片机]
msp432快速入门第十节之timer32定时器
(一)定时器介绍 指出定时器可以组合使用也可以单独使用,分频是1/16/256,可以产生中断,三种计数模式,时钟源是MCLK,也就是CPU时钟。 (二)定时器编程 (1)查看示例 这部分指明了现象; 然后纵观整个程序,主要是通过中断触发定时器来使LED亮1s (2)配置自己的函数 第一步 配置定时器 配置定时器Timer32: //配置timer32 Timer32_initModule(TIMER32_BASE, TIMER32_PRESCALER_1, TIMER32_32BIT, TIMER32_PERIODIC_MODE); //开启中断 Interrupt_enableI
[单片机]
msp432快速入门第十节之<font color='red'>timer</font>32<font color='red'>定时器</font>
OK6410A 开发板 (八) 46 linux-5.11 OK6410A vmalloc 的 消费者
grep = vmalloc( * -nr 编译后的工程中 使用 vmalloc 的 文件有 5个,分布在 4个一级目录中 drivers fs kernel net --- drivers/tty/vt/vt.c fs/kernel_read_file.c kernel/bpf/core.c net/core/net-sysfs.c net/netlink/af_netlink.c
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved