具有故障转移功能的 Reboot() 命令

具有故障转移功能的 Reboot() 命令

我正在我的应用程序中实现 Reboot() 调用。它是一个嵌入式应用程序,因此没有控制台、键盘或电源开关。无论如何,Reboot() 最终都必须重新启动系统。理想情况下,我希望它能够优雅地失败。

我过去曾遇到过系统因调用reboot或未shutdown导致机器重新启动而导致问题的情况。例如,无法同步驱动器,请卸载已移除的 USB 闪存驱动器。

我的系统是嵌入式的,带有只读安装的根文件系统,因此突然断电并不是一个大问题。但我确实将日志写入闪存盘,并且我想尽可能保留它。

我当前的 Reboot() 看起来像这样:

void Reboot()
{
    system( "reboot" );     // try the reboot
    sleep(2);
    system( "reboot -f" );      // force
    sleep(2);
    system( "reboot -f -n" );   // force and don't try to sync
    sleep(2);
    system( "kill 1" );     // process 1 is the root process of all
    sleep(2);
    Reset();
}

重置命令是不会失败的硬系统重置。该系统还有一个看门狗定时器。

人们愿意对我的 Reboot() 函数中添加/替换/更改的任何内容发表评论吗?

例如我应该使用魔法系统请求

答案1

该系统还有一个看门狗定时器。

我认为这就是你的答案 - 刷新块缓存并停止踢看门狗。我曾在许多嵌入式系统上工作过,但不记得有哪个系统使用传统的服务器/PC 机制执行重新启动。

相关内容