The shutdown procedure within Linux (based on BSP v13.05):
1. Android call __reboot( LINUX_REBOOT_MAGIC1,
LINUX_REBOOT_MAGIC2,
mode,
NULL);
/bionic/libc/unistd/reboot.c
to pass parameters and target mode to Linux.
2. Linux receivs parameters and mode(cmd) in
/kernel/kernel/sys.c
SYSCALL_DEFINE4(reboot,
int, magic1,
int, magic2,
unsigned int, cmd, //cmd is the mode in Android
void __user *, arg)
if the cmd is LINUX_REBOOT_CMD_POWER_OFF, call:
3. kernel_power_off() in /kernel/kernel/sys.c
this function will call below functions in a row:
a. kernel_shutdown_prepare() ///kernel/kernel/sys.c
--> device_shutdown() ///kernel/drivers/base/core.c
b. machine_power_off() ///arch/arm/kernel/process.c
To understand the complete shutdown procedure, reference:
http//blog.csdn.net/hufik/article/details/8964674
1. Android call __reboot( LINUX_REBOOT_MAGIC1,
LINUX_REBOOT_MAGIC2,
mode,
NULL);
/bionic/libc/unistd/reboot.c
to pass parameters and target mode to Linux.
2. Linux receivs parameters and mode(cmd) in
/kernel/kernel/sys.c
SYSCALL_DEFINE4(reboot,
int, magic1,
int, magic2,
unsigned int, cmd, //cmd is the mode in Android
void __user *, arg)
if the cmd is LINUX_REBOOT_CMD_POWER_OFF, call:
3. kernel_power_off() in /kernel/kernel/sys.c
this function will call below functions in a row:
a. kernel_shutdown_prepare() ///kernel/kernel/sys.c
--> device_shutdown() ///kernel/drivers/base/core.c
b. machine_power_off() ///arch/arm/kernel/process.c
To understand the complete shutdown procedure, reference:
http//blog.csdn.net/hufik/article/details/8964674