全志V3S嵌入式驱动开发(看门狗驱动)

您所在的位置:网站首页 ps4看门狗多大内存 全志V3S嵌入式驱动开发(看门狗驱动)

全志V3S嵌入式驱动开发(看门狗驱动)

2023-06-10 16:11| 来源: 网络整理| 查看: 265

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        大家如果做过工业级别的嵌入式设备,那么对看门狗应该不陌生。很多工业级的设备,其应用环境很多时候是非常糟糕的,甚至简单加一个塑料壳子,放在室外都是有可能的。在这么差的环境下,要保证系统持续稳定地运行,这就需要引入看门狗这个武器了。

        所谓看门狗,就是要求系统定时去进行喂狗的操作。具体时间多长,可以自己设置。软件一旦没有及时喂狗,那么系统就会自动重启。这个操作,就是为了防止嵌入式系统出现死锁、软件故障、程序跑飞等各种异常情况。

1、文档说明

        在Allwinner_V3s_Datasheet_V1.0.pdf芯片手册上面,看门狗是和timer放在一起的。这也算合理。相关的寄存器不多,主要就是5个,

         从名字也能大概看出这5个寄存器的用途。第一个是中断开关,第二个是状态,第三个是控制,第四个是配置,第五个是模式。

2、电路

        和之前的驱动都不同,看门狗完全是soc内部的模块设置,因此这个部分也就没有电路图,没有外部引脚的信号需要考虑。

3、设备树文件

        查看sun8i-v3s.dtsi文件,输入wdt,可以很容易找到看门狗的内容,

wdt0: watchdog@01c20ca0 { compatible = "allwinner,sun6i-a31-wdt"; reg = ; interrupts = ; };

        内容也不复杂,第一个表明兼容什么样的soc,第二个表示寄存器地址范围,第三个表示中断号、中断形式。

4、查看驱动c文件

        由之前的sun6i-a31-wdt在drivers目录下面做全局查找,不需要花很多的时间就可以找到驱动文件,即sunxi_wdt.c。文件中有这样的内容,

static const struct of_device_id sunxi_wdt_dt_ids[] = { { .compatible = "allwinner,sun4i-a10-wdt", .data = &sun4i_wdt_reg }, { .compatible = "allwinner,sun6i-a31-wdt", .data = &sun6i_wdt_reg }, { /* sentinel */ } };

        看到这个,基本就能判断出我们的驱动是加载对了。整个驱动基本上就是一个套路,对于驱动开发者来说,他所要做的就是把对应的回调函数填完就可以了,

static const struct watchdog_ops sunxi_wdt_ops = { .owner = THIS_MODULE, .start = sunxi_wdt_start, .stop = sunxi_wdt_stop, .ping = sunxi_wdt_ping, .set_timeout = sunxi_wdt_set_timeout, .restart = sunxi_wdt_restart, };

5、验证和使用

        通过查看官方soc文档,我们发现目前来说看门狗的最长喂狗时间是16s。当然,配小一点也是可以的,大家可以根据自己的需求灵活设置,

        如果不想设置,那直接使用默认配置就好。这个时候为了验证看门狗有没有起作用,可以分成两步骤,第一,查看ls -l /dev/w*下面有没有watchdog这个节点;第二,给watchdog发送一个1的数据,即

echo 1 > /dev/watchdog

         一段时间之后,如果发生了系统重启,那么代表看门狗生效。当然,没有生效的话,需要结合soc文档和kernel驱动打印日志,分析一下具体的原因了。当前,watchdog的驱动是默认打开的,大家不需要做额外的配置就可以开始测试了。

        此外,正在做、或者将来准备做工业级设备的同学,可以好好看看相关的用法,未来肯定会涉及到看门狗的操作。当然,使用看门狗,只是最后没有办法的办法,嵌入式系统本身的稳定性还是需要研发人员努力去完成的。这和看门狗本身并不冲突。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3