android 系统重启关机 方法 非常好的一篇文章

本文深入探讨了Android系统重启和关机的过程,包括C语言中的reboot函数、通过ADB重启、fastboot模式下的重启以及系统关机流程。涉及关键函数如`reboot()`,`adb`命令解析,内核中的系统调用等。
摘要由CSDN通过智能技术生成

1.5 android 系统重启关机流程分析

1.5.1 c语言中调用 reboot 函数  HAL层中重启系统的方法

bionic/libc/unistd/reboot.c:33:

使用需要的头文件:#include <sys/reboot.h> 

int reboot (int mode)

{

return __reboot( LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, mode,NULL );

}

1.5.2 通过 adb 让系统重启

adb reboot recovery 进入 recovery 模式

adb reboot bootloader 进入 fastboot 模式

adb reboot-bootloader

adb reboot 不带参数 系统正常重启

adb 是pc端工具,adbd是服务端,运行在手机

adbd 读取 socket 解析由 adb 传过来的命令串

int service_to_fd(const char *name)

if(!strncmp(name, "reboot:", 7)) {

void* arg = strdup(name + 7);

if(arg == 0) return -1;

ret = create_service_thread(reboot_service, arg);

system/core/adb/services.c:176:

void reboot_service(int fd, void *arg)

{

。。。

ret = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,

LINUX_REBOOT_CMD_RESTART2, (char *)arg);

。。。

}

bionic/libc/kernel/common/linux/reboot.h

#define LINUX_REBOOT_CMD_RESTART 0x01234567

#define LINUX_REBOOT_CMD_HALT 0xCDEF0123

kernel/include/linux/reboot.h:33:

#define LINUX_REBOOT_CMD_RESTART2 0xA1B2C3D4

arg 对应字符串: recovery bootloader

./kernel/arch/arm/mach-msm/pm2.c

system/core/adb/commandline.c

if (!strcmp(argv[0], "reboot-bootloader"))

snprintf(command, sizeof(command), "reboot:bootloader");

如果输入 adb reboot-bootloader adb 会对该命令进行转换 相当于执行 adb rebootbootloader

1.5.3 fastboot 模式下系统重启

fastboot reboot 系统正常重启

fastboot reboot-bootloader 重启进入fastboot 模式

fastboot 是 appboot 提供的功能,可以用它来烧写 system 等镜像文件

bootable/bootloader/lk/app/aboot/aboot.c

APP_START(aboot)

.init = aboot_init,

void aboot_init(const struct app_descriptor *app)

。。。

fastboot_register("reboot", cmd_reboot);

fastboot_register("reboot-bootloader",cmd_reboot_bootloader);

。。。

void cmd_reboot(const char *arg, void *data, unsigned sz)

{

dprintf(INFO, "rebooting the device\n");

fastboot_okay("");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值