标签: watchdog

监视程序监视UNIX域套接字,触发特定内容上的事件

我在一个嵌入式平台(mipsel体系结构,Linux 2.6内核)上,我需要在两个闭源进程(路由器固件)之间监视IPC,以便对某个事件做出反应(由于DSL重新连接,动态IP更改).到目前为止,我通过strace发现的是,无论何时IP发生变化,DSL守护进程都会将特殊消息写入绑定到特定文件名的UNIX域套接字.该消息由另一个守护程序使用.

现在这是我的要求:我想监视通过该特定UNIX域套接字的数据流,并在检测到某个消息时触发事件(调用shell脚本).我尝试使用inotify监视文件名,但它不适用于套接字文件.我知道我可以一直运行strace,过滤其输出并对过滤后的日志文件中的更改做出反应,但这样做太重了,因为strace确实会降低系统速度.我也知道我可以通过cron轮询IP地址,但是我想要一个看门狗,而不是一个轮询解决方案.我有兴趣了解是否有一个工具可以专门监视UNIX域套接字并对预定义方向流动的特定消息做出反应.我想象类似于inotifywait的东西,即工具应该等待某个事件,然后退出,这样我就可以对事件作出反应并循环回到再次启动工具,等待同一类型的下一个事件.

是否有任何现有的Linux工具能够做到这一点?或者是否有一些简单的C代码用于独立二进制文件,我可以在我的平台上编译(uClibc,而不是glibc)?我不是C专家,但能够运行makefile.使用shell中的二进制文件没问题,我对shell编程了解得足够多.

unix sockets dns watchdog

4
推荐指数
1
解决办法
4965
查看次数

Python Watchdog问题 - 缺少事件

我正在使用Python Watchdog来监控Ubuntu上的文件夹.它可以正常使用1或2个文件,但是当我按命令移动50个文件时,mv *.xml dest_folder它只收到2个事件并且只处理了2个文件.下面是代码.

def on_moved(self, event):
    try:
        logger.debug("on_moved event :" + str(event) )
        self._validate_xml(event.dest_path)
    except Exception as ex:
        logger.exception(ex)
Run Code Online (Sandbox Code Playgroud)

如果我评论出_validate_xml功能,那么我会收到所有45个事件.

任何人都可以告诉我看门狗到底发生了什么,最好的解决办法是什么?

python watchdog

4
推荐指数
1
解决办法
2380
查看次数

python watchdog修改并创建了重复事件

在Ubuntu上运行,每次创建文件时我都会获得修改后的事件.

这是设计还是我做错了什么?

我正在使用事件处理程序类 PatternMatchingEventHandler

event_handler = MediaFileHandler(ignore_directories=True) 
observer = Observer() 
observer.schedule(event_handler, path=directory, recursive=True) 
observer.start()
Run Code Online (Sandbox Code Playgroud)

如果这是正确的行为,我可以安全地忽略创建的事件吗?

python watchdog

4
推荐指数
1
解决办法
3549
查看次数

什么是模拟看门狗?

我引用维基百科:

看门狗定时器(WDT;有时称为计算机正常运行或COP定时器,或简称为看门狗)是一个电子定时器,用于检测计算机故障并从中恢复.

在使用STM32F429I-Discovery时,我遇到了一个术语[in "stm32f4xx.h"],它使用寄存器来禁用Watchdog:

#define  ADC_CR1_AWDIE    ((uint32_t)0x00000040)    //Analog Watchdog interrupt enable
Run Code Online (Sandbox Code Playgroud)

在这里,我无法理解模拟看门狗

如果可能的话,

#define  ADC_CR1_JAWDEN    ((uint32_t)0x00400000)    //Analog watchdog enable on injected channels
Run Code Online (Sandbox Code Playgroud)

什么是注入渠道

embedded watchdog stm32

4
推荐指数
1
解决办法
5605
查看次数

使用sudo运行时,意外标记"do"附近的语法错误

从这里:http://www.sat.dundee.ac.uk/psc/watchdog/watchdog-testing.html

for n in $(seq 1 60); do echo $n; sleep 1; sync; done

我明白了:

:~$ sudo for n in $(seq 1 60); do echo $n; sleep 1; sync; done  
bash: syntax error near unexpected token `do'
Run Code Online (Sandbox Code Playgroud)

linux bash sudo watchdog

4
推荐指数
1
解决办法
2万
查看次数

检索ARM Cortex M0上的异常的返回地址

我试图在我的代码中检索IRQ处理程序的返回地址.我的目标是在看门狗定时器到期之前和复位之前使用WDT_IRQHandler()保存PC的值以进行调试.我也在用其他IRQ测试这种方法来检查我是否掌握了这个想法.但似乎我没有.

我已经阅读了可用的文档.我知道当异常发生时,8个寄存器被推送到堆栈:R0,R1,R2,R3,R12,LR,PC和XPSR.

我还读过堆栈自动双字对齐.所以在我看来,检索返回地址就像这样简单:

  • 使用__builtin_frame_address(0)检索sp地址;
  • 添加堆叠PC的偏移量(0x18),并读取值,该值应该是处理程序返回时将恢复到PC的值.

检查附加的调试器,似乎不是这种情况,该内存地址的内容并不总是指向闪存区域,甚至指向有效区域,并且在任何情况下,它都不是PC在POP指令.

代码工作正常,所以我认为这是一个问题,我理解它是如何工作的.

如果我检查反汇编,在某些IRQ中,在POPping(?)之前向sp添加一个常量

00001924: 0x000009b0 ...TE_IRQHandler+280   add     sp, #36 ; 0x24
00001926: 0x0000f0bd ...TE_IRQHandler+282   pop     {r4, r5, r6, r7, pc}
Run Code Online (Sandbox Code Playgroud)

在其他IRQ中,这不会发生.

我知道可能会发生更多的寄存器被推送到堆栈,所以我如何确定在哪个偏移量来检索PC?

如果我在代码仍在IRQ处理程序中时检查SP周围的内存转储,我可以发现返回地址,但它始终位于一个奇怪的位置,与SP相比具有负偏移.我无法理解如何获得正确的地址.

stack arm watchdog irq cortex-m

4
推荐指数
1
解决办法
1618
查看次数

在 STOP 模式之前禁用 STM32 HAL IWDG 或 WWDG(看门狗)

我使用 STM32 (L0 5) HAL,在进入 STOP 模式之前,我需要禁用 IWDG 或 WWDG。在 IWDG 将 MCU 从 STOP 模式重置之前,以下代码可以正常工作。对于 WWDG 使用,这要快得多,并且在调用 HAL_PWR_EnterSTOPMode 之前重置,尽管 HAL_WWDG_Refresh 在每行之后调用。我也在 Nucleo L05 上测试了这些场景。

iwdgHandle.Instance = IWDG;
iwdgHandle.Init.Prescaler = IWDG_PRESCALER_64;
iwdgHandle.Init.Window = 4095;
iwdgHandle.Init.Reload = 4095;
if (HAL_IWDG_Init(&iwdgHandle) != HAL_OK) // almost 7secs until refresh has to be called
{
 _Error_Handler(__FILE__, __LINE__);
}

HAL_PWR_EnableWakeUpPin(WakeSpi_Pin);
HAL_PWREx_EnableUltraLowPower(); // Enable Ultra low power mode
HAL_PWREx_EnableFastWakeUp(); // Enable the fast wake up from Ultra low power mode

HAL_SuspendTick();
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
Run Code Online (Sandbox Code Playgroud)

hal watchdog stm32

4
推荐指数
1
解决办法
2万
查看次数

何时为嵌入式系统使用窗口看门狗

这篇文章不是要问如何使用它,而是何时使用它.

有很多关于窗口看门狗(WW)的文档,大多数微控制器已经包含它.每个供应商都声明WW适用于安全应用,但没有人更多地谈论这个主题.

我想指出一些具体的例子,但这些例子可能比"汽车制动系统"更多.

我们都知道WW必须既不太早也不太晚,但这种情况将如何有助于提高安全性?

谢谢!!

embedded watchdog windowed

3
推荐指数
1
解决办法
6774
查看次数

创建文件夹时使用 Python 看门狗库查看多个事件

我遇到了一些我没有预料到的额外事件的问题。

我在看文件夹C:\Users\kvasko\Downloads\data。如果我复制一个文件夹,2017\07\25\LogFile.xml我将看到以下 3 个“创建”事件,而我希望只看到 1 个。如果我提前创建日期文件夹结构(但在应用程序运行时查看文件夹),它只会生成一个像我期望的那样的事件。我从来没有因为创建文件夹而收到事件。就像为创建文件夹而生成事件一样,但是在检查我的on_created(self,event)所有三个外观事件上消息的实际事件时,它们看起来完全相同。这里发生了什么?

这是示例输出和最小示例。

2017-09-22 13:58:10,182 - root - INFO - Watchdog: file created C:\Users\kvasko\Downloads\data\2017\07\25\LogFile.xml
2017-09-22 13:58:11,184 - root - INFO - Watchdog: file created C:\Users\kvasko\Downloads\data\2017\07\25\LogFile.xml
2017-09-22 13:58:12,187 - root - INFO - Watchdog: file created C:\Users\kvasko\Downloads\data\2017\07\25\LogFile.xml
Run Code Online (Sandbox Code Playgroud)

我希望:

2017-09-22 13:58:12,187 - root - INFO - Watchdog: file created C:\Users\kvasko\Downloads\data\2017\07\25\LogFile.xml
Run Code Online (Sandbox Code Playgroud)

有没有办法从文件夹创建中检测它是否实际上有多个事件?

以下是我的观察者配置。

folder = "C:\\Users\\kvasko\\Downloads\\data"
observer = Observer(MyProcessHandler(patterns=["*.xml"]), folder, recursive=True)
observer.start_observer()

os.mkdirs("C:\\Users\\kvasko\\Downloads\\data\\2017\\07\\25")
shutil.copy2("C:\temp\LogFile.xml", "C:\\Users\\kvasko\\Downloads\\data\\2017\\07\\25")

try:
    while True:
        time.sleep(5)
except:
    print("Error")
Run Code Online (Sandbox Code Playgroud)

以下是我的处理程序类。

import …
Run Code Online (Sandbox Code Playgroud)

python watchdog

3
推荐指数
1
解决办法
3127
查看次数

如何从 2 个进程 ping /dev/watchdog?

在 Linux(在 ARM 上运行)中,有一个进程有一个打开的 fd ,并且每隔几秒/dev/watchdog/发送一个fd 作为保持活动状态:ioctl()

while (1) { 
    ioctl(fd, WDIOC_KEEPALIVE, 0);
    sleep(10);
}
Run Code Online (Sandbox Code Playgroud)

我也想从另一个进程发送保持活动状态,但我无法打开另一个 fd /dev/watchdog/:当我尝试回显时,/dev/watchdog/我收到错误“设备或资源忙”。

  1. 我在哪里可以看到看门狗被定义为一次仅适用于 1 个进程?(我在另一个Linux中看到有些进程可以打开fd /dev/watchdog/)。

  2. 我该怎么做才能从两个进程喂养看门狗?

c linux arm watchdog linux-kernel

3
推荐指数
1
解决办法
2059
查看次数

标签 统计

watchdog ×10

python ×3

arm ×2

embedded ×2

linux ×2

stm32 ×2

bash ×1

c ×1

cortex-m ×1

dns ×1

hal ×1

irq ×1

linux-kernel ×1

sockets ×1

stack ×1

sudo ×1

unix ×1

windowed ×1