【问题标题】:Android Linux kernel power-off sequenceAndroid Linux 内核关机顺序
【发布时间】:2014-11-28 20:34:58
【问题描述】:

我正在使用 Android 的 Linux 内核,但遇到了问题。我正在尝试制作我的 Android 手机内核关机代码序列的流程图。

如果我按下手机上的电源按钮并选择“关机”以关闭我的设备。我想知道系统内部发生了什么。哪个内核模块将是断电序列的初始模块?整个关机过程中哪些内核模块调用了哪些系统调用?

我得到了我的设备的日志文件如下..

...
ghost[362]: [Ghost] Now, 50th boot.
[  119.307156] msm_hsl_power: Unknown PM state 1
[  129.966017] pil-q6v5-mss fc880000.qcom,mss: PBL returned unexpected status -284491765
[  129.972866] pil-q6v5-mss fc880000.qcom,mss: mba: Failed to bring out of reset
[  129.992102] modem_notifier_cb: sysmon_send_event error -19
[  129.996628] M-Notify: General: 5
[  129.999825] msm_ipc_load_default_node: Failed to load modem
[  131.336799] pil-q6v5-mss fc880000.qcom,mss: PBL returned unexpected status -284491765
[  131.343844] pil-q6v5-mss fc880000.qcom,mss: mba: Failed to bring out of reset
[  131.351708] modem_notifier_cb: sysmon_send_event error -19
[  131.356216] M-Notify: General: 5
[  131.359430] smd_pkt_open failed on smd_pkt_dev id:0 - subsystem_get failed for modem
[  132.385289] param_sec_operation FAIL LLSEEK
[  132.388448] sec_open_param PARAM OPEN FAIL
[  132.392715] set_dload_mode <0> ( c01882a0 )
[  132.397069] (sec_debug_set_upload_magic) 0
[  132.496318] Power down.
[  132.497733] Powering off the SoC
[  132.500972] set_dload_mode <0> ( c0188348 )
[  132.505717] Calling SCM to disable SPMI PMIC

我想知道“arch\arm\mach-msm”中的restart.c是否是我按下“Power off”软按钮后第一个初始化断电序列的模块?

我是 Linux 的新手。非常感谢您的帮助!

【问题讨论】:

  • 您使用的内核版本是什么?手机的制造细节是什么?
  • 我使用的是内核版本 3.4.0-g63e50df-dirty,systemd 初始化,Qualcomm 芯片组。
  • 你是如何获得这个内核版本的?做一个uname -r
  • 我在内核命令行中使用了命令“uname -r”
  • @iqstatic:可以肯定地说这是一部 Android 手机,您不会从您期望的台式机/服务器获得通常的 uname -r 输出。 ;)

标签: linux sequence power-off


【解决方案1】:

我假设这是一部 Android 手机?

尽管 Android 基于 Linux 内核,但 Linux 和 Android 的关机顺序是不同的。 Linux 关闭序列的作用是通过将运行级别设置为 0 来启动;这将导致所有服务在允许完全停止和断电之前关闭。

但 Android 没有运行级别,因为它们不是 Linux 内核的特性,而是 initd 的特性。

希望这将为您提供一些有关 Linux 关闭序列的信息。您应该从了解运行级别开始。

内核关闭顺序的详细信息是in this question

【讨论】:

  • 我已经用谷歌搜索过这个问题,但我没有找到任何与我的问题密切相关的东西。我正在尝试在整个断电过程中详细制作代码序列。我已经阅读了您提到的主题,这很有帮助。如果您能对我的问题进行更详细的解释,我将不胜感激。
【解决方案2】:

当您在 linux 系统上按下电源按钮时,会调用一个 shell 脚本,该脚本通常位于 /etc/acpi/actions/power.sh。此脚本在内部查找第一个活动 X11 会话的 ID。然后它检查是否有电源管理器,否则它调用关机命令。我建议您查看shutdown 命令的源代码,并亲自查看它在内部调用的所有函数/系统调用。希望对您有所帮助。

【讨论】:

  • 感谢您的回答。我正在尝试了解我的 Android 手机关机序列的代码流。我看过 Android 的目录结构,发现它类似于 Linux。我在任何目录中都找不到模块 shutdown.c。你能再给点建议吗?非常感谢!
  • 正如 chiastic-security 在他的回答中所建议的,Android 和 Linux 是不同的,即使 Android 基于 Linux 内核。
  • 我可以看到 iqstatic 的回答中提到的序列。 OP的问题是Linux。 +1 愚蠢的反对票。
  • @Ben 感谢您的建议。我已经更正了我的问题。
猜你喜欢
  • 2018-11-14
  • 2020-09-12
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
  • 2017-12-26
  • 2012-08-26
  • 1970-01-01
相关资源
最近更新 更多