android - 引导加载程序如何在 "restarting system with command"之后获取命令?

标签 android linux linux-kernel bootloader u-boot

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 的 boot 命令。

ARM implementation of machine_restart()最终将提供的命令传递给在每个 ARM 平台上单独实现的 arch_reset() - 据我所知,大多数(如果不是全部)这些实现都忽略了传递的命令,至少在上游内核中是这样.这可能不是您正在寻找的机器人。

关于android - 引导加载程序如何在 "restarting system with command"之后获取命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5472761/

相关文章:

android - 在 Android 上查找 SD 卡卷标

linux - inotifywait -m 长时间运行后不会处理超过 1 个文件

c - 两次向 Linux 内核双链表添加元素

linux - Linux 命令行上多个文件的总和列

memory-management - 烧录到闪存的​​特定扇区

linux - 如何从 Linux 内核镜像获取 .config?

android - 正确实现/初始化大量新变量,取自 RadioGroups 和 Spinners

android - 接入网络状态(ACCESS_NETWORK_STATE)和WIFI状态(ACCESS_WIFI_STATE)权限有什么区别?

android - 当返回按下android时从返回 Activity 中获取值

c++ - 有没有办法在 Linux 上用 C++ 原子地刷新二进制信号量?