在"使用命令重启系统"后,引导加载程序如何获取命令?

Bja*_*sen 12 linux android linux-kernel bootloader u-boot

查看android源代码中的reboot命令,我们找到以下行:

__reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, \
         LINUX_REBOOT_CMD_RESTART2, argv[optind]);
Run Code Online (Sandbox Code Playgroud)

哪个是使用特定命令重启系统的标准Linux系统调用,请参阅Unix系统调用重新启动.

在Android中,此命令用于告诉引导加载程序在恢复模式下启动内核或在引导加载程序中转到fastboot模式.

我的问题是:引导加载程序如何获取命令?这个功能是在U-Boot中实现的吗?(我无法通过Google或U-Boot源找到它.)

此外,它似乎并非特定于Android,而是Linux执行"使用命令重启"的方式.有关如何在Linux中"正常"处理/使用它的任何信息?

caf*_*caf 7

使用时重新启动系统时LINUX_REBOOT_CMD_RESTART2,提供的命令字符串将传递给注册的所有通知程序register_reboot_notifer(),最后传递给machine_restart()实际执行系统重新启动的体系结构特定功能.

大多数体系结构完全忽略传递的命令 - 对于没有传递命令的例子,请参阅SPARC.的SPARC执行machine_restart()传递提供的字符串到bootPROM中的命令.

的ARM实现machine_restart()最终传递提供命令arch_reset()被单独实现每个ARM平台上-从我所看到的,如果不是所有这些实现的忽略过去了命令,至少在上游内核.这可能不是您正在寻找的机器人.