0

我正在使用 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是否是我按下“关机”软按钮后初始化关机序列的第一个模块?

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

4

2 回答 2

3

我假设这是一部Android手机?

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

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

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

内核关闭顺序的详细信息在这个问题中。

于 2014-11-28T10:22:56.630 回答
0

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

于 2014-11-28T10:49:05.640 回答