我在一个终端上做了sudo cat /dev/char/10:130
,它uevent
的名称是看门狗,它从内核输出一条消息,说watchdog did not stop !
,几秒钟后它就断电了,为什么?
我到底在做什么?
我在 Raspberry 3b+ 上运行 Raspbian lite。
答案1
/dev/char/10:130
是一个字符设备,主设备号为 10,次设备号为 130。在非嵌入式 Linux 系统中,它更常见的名称是/dev/watchdog
。
当您打开看门狗设备时,计时器(通常是硬件级计时器)开始计时。打开看门狗设备的程序应该定期向打开的设备写入一些内容(实际上是任何东西),以表明系统仍然正常运行。这将重置硬件计时器,然后该计时器将再次开始向零计时。
如果这种情况没有发生,例如由于系统挂起或过载,硬件定时器将达到零,然后看门狗机制将激活硬件级复位信号以执行硬重启。它相当于一个死人开关用于操作系统和/或系统上运行的其他软件。
如果管理看门狗的软件需要停止,某些看门狗驱动程序需要在关闭文件之前向看门狗设备发送特定字符。然后内核中的看门狗驱动程序应该解除看门狗定时器。你sudo cat /dev/char/10:130
没有这样做。
问题是,某些硬件看门狗定时器一旦激活,显然无法在不重新启动的情况下停止。如果内核是使用 CONFIG_WATCHDOG_NOWAYOUT 选项编译的,则驱动程序将期望一旦看门狗被激活,就应该始终存在看门狗管理器进程,因此看门狗停用请求将被拒绝。