看着
android source for the reboot command我们发现如下:
__reboot(LINUX_REBOOT_MAGIC1,LINUX_REBOOT_MAGIC2,\ LINUX_REBOOT_CMD_RESTART2,argv[optind]);
哪个是标准的Linux系统调用以使用特定命令重新启动系统,请参阅Unix System Call Reboot.
在Android中,此命令用于告知引导程序以恢复模式启动内核,或者在引导加载程序中进入快速引导模式.
我的问题是:引导程序如何接收命令?这个功能是否在U-Boot中实现? (我无法通过Google或U-Boot源找到它.)
此外,它似乎不是Android特有的,而是Linux执行“使用命令重新启动”的方式.有关在Linux中如何“正常”处理/使用的任何信息?
解决方法
当使用LINUX_REBOOT_CMD_RESTART2重新启动系统时,提供的命令字符串将传递给注册到register_reboot_notifer()的所有通知程序,最后传递给machine_restart() – 实际执行系统重新启动的体系结构特定功能.
大多数架构完全忽略了传递的命令 – 对于没有的命令,请参见SPARC. SPARC implementation of machine_restart()
将提供的字符串传递给PROM的引导命令.
ARM implementation of machine_restart()
最终将提供的命令传递给在每个ARM平台上单独实现的arch_reset() – 从我可以看到,至少在上游内核中,大多数(不是全部)这些实现忽略了传递的命令.这可能不是您要找的机器人.