文档章节

Adb reboot流程

eric-PAY4
 eric-PAY4
发布于 2013/06/25 16:53
字数 306
阅读 1527
收藏 1

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

ADB 根据ADB_HOST可以编译出电脑上使用adb和手机内使用的adbd,代码目录在system/core/adb
 
作为adb  adb_commandline是主要的命令处理函数。
 
作为adbd service_to_fd是接收到socket命令后的处理函数。
adb_main
transport_registration_func
transport_socket_events
handle_packet
create_local_service_socket
service_to_fd 
 
以下部分是reboot的代码执行流程
__reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,LINUX_REBOOT_CMD_RESTART2, (char *)arg);
这个__reboot是调用了bionic/libc/arch-arm/syscalls/__reboot.S
                    
.text
    .type __reboot, #function
    .globl __reboot
    .align 4
    .fnstart
__reboot:
    .save   {r4, r7}
    stmfd   sp!, {r4, r7}
    ldr     r7, =__NR_reboot
    swi     #0
    ldmfd   sp!, {r4, r7}
    movs    r0, r0
    bxpl    lr
    b       __set_syscall_errno
    .fnend

swi # 0系统调用应该等同于int 0x80
__NR_reboot调用定义在kernel/include/asm-generic/unistd.h
#define __NR_reboot 142
__SYSCALL(__NR_reboot, sys_reboot)
 
sys_reboot实现 LINUX_REBOOT_CMD_RESTART2应该是后来实现,用来拓展参数的。
SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,void __user *, arg)
{
    .....
    case LINUX_REBOOT_CMD_RESTART2:
        if (strncpy_from_user(&buffer[0], arg, sizeof(buffer) - 1) < 0) {
            ret = -EFAULT;
            break;
        }
        buffer[sizeof(buffer) - 1] = '\0';
 
        kernel_restart(buffer);
        break;
    ......
}

 
kernel_restart接口
    kernel_restart_prepare(cmd);     //这里会调用到msm_reboot_call,在这个接口里会根据str来赋值reboot reason 
     if ( !cmd)
        printk(KERN_EMERG "Restarting system.\n");
     else
        printk(KERN_EMERG "Restarting system with command '%s'.\n", cmd);
    kmsg_dump(KMSG_DUMP_RESTART);
    machine_restart(cmd);       //这里会调用到msm_pm_restart
  
msm_pm_restart 调用 msm_proc_comm(PCOM_RESET_CHIP, &restart_reason, 0);
把reboot reason写到内存里,机器开启后aboot.c会判断reason后进入对应的模式。

© 著作权归作者所有

eric-PAY4
粉丝 6
博文 12
码字总数 1635
作品 0
深圳
程序员
私信 提问
[RK3288][Android6.0] 调试笔记 --- 打印当前reboot或shutdown进程信息

Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 背景: 遇到一台机器黑屏,无法连接adb和uart,但是工作指示灯还亮着  Log: Logcat并未发现异常,Kernel log如下: 分析: 最后一条Log...

kris_fei
2018/04/20
0
0
高通方案的Android设备几种开机模式的进入与退出

高通方案的Android设备主要有以下几种开机模式,Android、EDL、Fastboot、Recovery和FFBM,其进入及退出的方式如下表。 开机模式 屏幕表现 冷启动 热启动 按键退出 命令退出 Android/Normal...

sunrain_hjb
2018/10/13
0
0
Android adb 常用命令

adb devices //列出所有的连接设备 adb connect <host>[:<port>] //通过tcp/ip连接,5555是默认端口 设备命令: adb push <local> <remote> //拷贝文件/目录到设备 adb pull <remote> [<loca......

牛牛张
2014/06/24
17
0
android adb 读写模式 挂载文件系统

如下读写方式挂载/system/app/目录:>adb shell shell@android :/ $ su su shell@android :/ # mount -o rw,remount yassf2 /system/ shell@android :/ # chmod 777 /system/app/ 通常push到......

SuShine
2015/09/09
987
0
安卓开发环境搭建

目录 安卓开发环境搭建 SDK管理(是针对硬盘容量有限) SQLite 管理 安卓开发环境搭建 环境Eclipse 4.4( for java )注 , ADT 推荐国内下载地址:http://tools.android-studio.org/index.php...

import_key
2016/07/11
98
0

没有更多内容

加载失败,请刷新页面

加载更多

Kubernetes 时代的安全软件供应链

作者 汤志敏 阿里云容器服务高级技术专家 汪圣平 阿里云云平台安全高级安全专家 导读:从 Docker image 到 Helm, 从企业内部部署到全球应用分发,作为开发者的我们如何来保障应用的交付安全。...

一肥仔
16分钟前
3
0
web前端入门到实战:图解原生dialog标签(非常详细)

在html5中,新增了很多语义化的标签。如footer、header之类的,今天的主角是dialog标签 顾名思义,就是用来定义对话框的。目前只有Chrome和Safari支持该标签,所以用的不多,不过确实挺好用的...

梦想编程
41分钟前
4
0
一些php常用函数积累

本文链接<?php// id: ecffe70d3af54df9bad97b61918ace7d global $ct_path, $ct_log_path;$log_path = "test_php.txt";// 是否先log到buffer,再通过CT_flush()一次性写入文件$......

一字见心
42分钟前
4
0
IntelliJ idea中 注释代码折叠

visual studio中有#region 可以折叠代码,IntelliJ idea 中也有类似功能 //region 描述代码//endregion

format
42分钟前
6
0
oracle表中更改主键

一、数据表有主键但无主键约束名 先删除之前的主键,后添加主键 ,执行SQL: a. alter table 表名 drop primary key; b. alter table 表名 add primary key(想要更改的字段名称); 二、数据表...

_Somuns
44分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部