我正在我的应用程序中实现 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 机制执行重新启动。