Последовательность выключения ядра Android Linux

Я работаю с ядром Linux Android и у меня есть проблема. Я пытаюсь создать блок-схему последовательности кодов выключения ядра моего телефона 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

Интересно, является ли restart.c в "arch\arm\mach-msm" первым модулем, который запускает последовательность выключения после нажатия программной кнопки "Выключение"?

Я новичок в Linux. Буду очень признателен за вашу помощь!

2 ответа

Решение

Я предполагаю, что это телефон Android?

Существует разница между последовательностью выключения для Linux и для Android, хотя Android основан на ядре Linux. Последовательность выключения Linux должна начинаться с установки уровня запуска на 0; это приведет к отключению любых служб, прежде чем будет произведена полная остановка и отключение питания.

Но у Android нет уровней запуска, потому что они не являются частью ядра Linux, а являются initd.

Надеюсь, это даст вам возможность начать с последовательности выключения Linux. Вы должны начать с изучения уровней запуска.

Подробности последовательности выключения ядра находятся в этом вопросе.

Когда вы нажимаете кнопку питания в системе Linux, вызывается сценарий оболочки, который обычно присутствует в /etc/acpi/actions/power.sh, Этот скрипт внутренне ищет идентификатор первого активного сеанса X11. Затем он проверяет, есть ли диспетчер питания, в противном случае он вызывает команду выключения. Я предлагаю вам заглянуть в исходный код команды shutdown и убедиться в том, какие все функции / системные вызовы она вызывает внутри. Надеюсь, поможет.

Другие вопросы по тегам