华为解锁adb命令mate7怎么使用adb命令进行关机

2016年8月 移动开发大版内专家分月排行榜第二
2016年9月 移动开发大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。android 系统重启关机
非常好的一篇文章 - CSDN博客
android 系统重启关机
非常好的一篇文章
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 0x
#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(&&);
reboot_device(0);
void cmd_reboot_bootloader(const char *arg, void *data, unsignedsz)
dprintf(INFO, &rebooting the device\n&);
fastboot_okay(&&);
reboot_device(FASTBOOT_MODE);
bootable/bootloader/lk/target/msm7630_surf/init.c:311:
void reboot_device(unsigned reboot_reason)
bootable/bootloader/lk/target/msm7627_ffa/init.c:174:
void reboot_device(unsigned reboot_reason)
void reboot_device(unsigned reboot_reason)
reboot(reboot_reason);
调用的是c函数:
bionic/libc/unistd/reboot.c:33:
int reboot (int mode)
return __reboot( LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, mode,NULL );
bootable/bootloader/lk/app/aboot/aboot.c:59:
#define FASTBOOT_MODE 0x
if (!strcmp(cmd, &bootloader&)) {
restart_reason = 0x;
1.5.4 系统关机
正常按键关机
./frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java
void showGlobalActionsDialog()
mGlobalActions.showDialog(keyguardShowing,isDeviceProvisioned());
调用文件:
./frameworks/policies/base/phone/com/android/internal/policy/impl/GlobalActions.java
中的函数:
public void showDialog(boolean keyguardShowing, booleanisDeviceProvisioned)
mDialog = createDialog();
调用本文件中的函数:
private AlertDialog createDialog()
public void onPress() {
ShutdownThread.shutdownAfterDisablingRadio(mContext, true);
调用文件:
./frameworks/policies/base/phone/com/android/internal/policy/impl/ShutdownThread.java
中的函数:
public static void shutdownAfterDisablingRadio(final Contextcontext, boolean confirm)
beginShutdownSequence(context)
调用本文件中的函数:
private static void beginShutdownSequence(Context context)
sInstance.start()
进入关机线程的run函数:
public void run() {
首先关蓝牙,关射频,然后再关电源
sBluetooth.disable(false)
sPhone.setRadio(false)
SystemClock.sleep(PHONE_STATE_POLL_SLEEP_MSEC);
Power.shutdown()
frameworks/base/core/java/android/os/Power.java:92:
public static native void shutdown();
frameworks/base/core/jni/android_os_Power.cpp:107:
{ &shutdown&, &()V&, (void*)android_os_Power_shutdown },
static void android_os_Power_shutdown(JNIEnv *env, jobjectclazz)
#ifdef HAVE_ANDROID_OS
reboot(RB_POWER_OFF);
因为有 bionic/libc/include/sys/reboot.h:42:
#define RB_POWER_OFF LINUX_REBOOT_CMD_POWER_OFF
所以实际相对执行
reboot(LINUX_REBOOT_CMD_POWER_OFF);
__reboot( LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,LINUX_REBOOT_CMD_POWER_OFF, NULL );
这里的 __reboot 是libc中的系统调用
bionic/libc/arch-x86/syscalls/__reboot.S
#include&sys/linux-syscalls.h&
.type __reboot, #function
.globl __reboot
.save {r4, r7}
stmfd sp!, {r4, r7}
ldr r7, =__NR_reboot
ldmfd sp!, {r4, r7}
movs r0, r0
b __set_syscall_errno
1.5.5 内核中的系统调用 reboot
__NR_reboot 执行的是内核中的系统调用:
kernel/kernel/sys.c:310:
SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int,cmd,
void __user *, arg)
char buffer[256];
int ret = 0;
if (!capable(CAP_SYS_BOOT))
return -EPERM;
if (magic1 != LINUX_REBOOT_MAGIC1 ||
(magic2 != LINUX_REBOOT_MAGIC2&&
magic2 != LINUX_REBOOT_MAGIC2A&&
magic2 != LINUX_REBOOT_MAGIC2B&&
magic2 != LINUX_REBOOT_MAGIC2C))
return -EINVAL;
if ((cmd == LINUX_REBOOT_CMD_POWER_OFF)&& !pm_power_off)
cmd = LINUX_REBOOT_CMD_HALT;
lock_kernel();
switch (cmd) {
case LINUX_REBOOT_CMD_RESTART:
kernel_restart(NULL);
case LINUX_REBOOT_CMD_CAD_ON:
C_A_D = 1;
case LINUX_REBOOT_CMD_CAD_OFF:
C_A_D = 0;
case LINUX_REBOOT_CMD_HALT:
kernel_halt();
unlock_kernel();
do_exit(0);
panic(&cannot halt&);
case LINUX_REBOOT_CMD_POWER_OFF:
kernel_power_off();
unlock_kernel();
do_exit(0);
case LINUX_REBOOT_CMD_RESTART2:
if (strncpy_from_user(&buffer[0], arg,sizeof(buffer) - 1) & 0) {
unlock_kernel();
return -EFAULT;
buffer[sizeof(buffer) - 1] = '\0';
kernel_restart(buffer);
#ifdef CONFIG_KEXEC
case LINUX_REBOOT_CMD_KEXEC:
ret = kernel_kexec();
#ifdef CONFIG_HIBERNATION
case LINUX_REBOOT_CMD_SW_SUSPEND:
ret = hibernate();
ret = -EINVAL;
unlock_kernel();
void kernel_restart(char *cmd)
kernel_restart_prepare(cmd);
printk(KERN_EMERG &Restarting system.\n&);
printk(KERN_EMERG &Restarting system with command '%s'.\n&,cmd);
machine_restart(cmd);
kernel/kernel/sys.c:341:
void kernel_power_off(void)
kernel_shutdown_prepare(SYSTEM_POWER_OFF);
if (pm_power_off_prepare)
pm_power_off_prepare();
disable_nonboot_cpus();
sysdev_shutdown();
printk(KERN_EMERG &Power down.\n&);
machine_power_off();
./kernel/arch/arm/kernel/process.c:219:
void machine_restart(char *cmd)
arm_pm_restart(reboot_mode, cmd);
void machine_power_off(void)
if (pm_power_off)
pm_power_off();
因为./kernel/arch/arm/mach-msm/pm2.c:1740:中有:
arm_pm_restart = msm_pm_
pm_power_off = msm_pm_power_
所以 arm_pm_restart 调用的是:
static void msm_pm_restart(char str, const char *cmd)
msm_rpcrouter_close();
msm_proc_comm(PCOM_RESET_CHIP, &restart_reason,0);
pm_power_off 调用的是:
static void msm_pm_power_off(void)
msm_rpcrouter_close();
msm_proc_comm(PCOM_POWER_DOWN, 0, 0);
msm_proc_comm 是芯片级别的操作
msm_proc_comm_reset_modem_now 对modem芯片进行重启
kernel/arch/arm/mach-msm/proc_comm.c:98:
int msm_proc_comm(unsigned cmd, unsigned *data1, unsigned*data2)
writel(cmd, base + APP_COMMAND);
writel(data1 ? *data1 : 0, base + APP_DATA1);
writel(data2 ? *data2 : 0, base + APP_DATA2);
内核里面writel是如何实现的
http://blog.chinaunix.net/u2/77776/showart_1404857.html
补充信息:
static int msm_reboot_call
(struct notifier_block *this, unsigned long code, void*_cmd)
if ((code == SYS_RESTART) &&_cmd) {
char *cmd = _
if (!strcmp(cmd, &bootloader&)) {
restart_reason = 0x;
} else if (!strcmp(cmd, &recovery&)) {
restart_reason = 0x;
} else if (!strcmp(cmd, &eraseflash&)) {
restart_reason = 0x776655EF;
} else if (!strncmp(cmd, &oem-&, 4)) {
unsigned code = simple_strtoul(cmd + 4, 0, 16) &0
restart_reason = 0x6f656d00 |
restart_reason = 0x;
return NOTIFY_DONE;
static struct notifier_block msm_reboot_notifier = {
.notifier_call = msm_reboot_call,
static int __init msm_pm_init(void)
register_reboot_notifier(&msm_reboot_notifier);
内核编译相关:
kernel/arch/arm/mach-msm/pm2.c:1701: restart_reason =0x;
kernel/arch/arm/mach-msm/pm.c:696: restart_reason =0x;
kernel/arch/arm/mach-msm/Makefile:84:
ifdef CONFIG_MSM_N_WAY_SMSM
obj-$(CONFIG_PM) += pm2.o
obj-$(CONFIG_PM) += pm.o
kernel/arch/arm/configs/msm7630-perf_defconfig:256:CONFIG_MSM_N_WAY_SMSM=y
kernel/arch/arm/configs/msm7627-perf_defconfig:247:CONFIG_MSM_N_WAY_SMSM=y
make -C kernelO=../out/target/product/msm7627_ffa/obj/KERNEL_OBJ ARCH=armCROSS_COMPILE=arm-eabi- msm7627-perf_defconfig
out/target/product/msm7627_ffa/obj/KERNEL_OBJ/.config
CONFIG_MSM_N_WAY_SMSM=y
本文已收录于以下专栏:
相关文章推荐
Runtime.getRuntime().exec(&su -c \&/system/bin/shutdown\&&);
Runtime.getRuntime()...
重启应用private void restartApp() {
final Intent intent = getPackageManager().getLaunchIntentF...
第一种方法:
记得有一本书上介绍 说 0权限重启手机,原理是 在android 系统中,当显示一个toast,其实是将该toast挂载到窗体上, 而窗体又是系统的一个服务, 如果单位时间内不断地向窗体...
最近使用手机时候发现,手机的电源按键不灵敏了。因为主要作为测试机使用所以经常会为了,省电经常会用到关机或者重启。想着就自己写了一个简单的小程序。本以为很简单,结果发现网上的很多看不懂,要么就是给了几行...
重启Android手机代码 作者:[tcconan] 来源:[13COM.NET收集整理] 浏览:[27] 评论:[0] 关键字:package com.test.import java...
/apk/res/android&
    package=&com.lw&
    android:versionCode=&1&
Android实训案例(二)——Android下的CMD命令之关机重启以及重启recovery&Android刚兴起的时候,着实让一些小众软件火了一把,切水果,Tom猫,吹裙子就是其中的代表,当然还有...
refer:http://blog.csdn.net/airk000/article/details/9177077
refer:http://blog.csdn.net/leerobin83/art...
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)android&adb命令实用举例
掌握常用adb命令,可以让我们更加轻松地玩转手机,拒绝悲剧。同时也可以在刷机的时候节省不少步骤。
最实用的场景是,当你的手机电池是内置的,在手机死机时无法抠电池,如果你掌握一定的adb命令,就不用坐等电池耗光了,只需手机连上电脑,打开命令提示符界面,输入adb
reboot即可快速重启手机。
当然,使用adb命令首先要有adb包,下载地址:【】。下载后,解压,cd到adb目录,即可执行adb命令了。
简单的如push,pull,install,uninstall之类的读者自行百度,下面给出几个刷机常用的命令:
重启:adb reboot
关机:adb reboot -p
进入Recovery:adb reboot recovery
进入bootloader:adb reboot bootloader
是不是很实用?不用在按各种组合键了,一条命令搞定。
此外,如果对反编译、汉化、美化感兴趣的同学,可以看看【】这个资源,里面集成了完备的工具包。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。android usb adb流程,Android系统关机或重启的几种实现方式 - CSDN博客
android usb adb流程,Android系统关机或重启的几种实现方式
3 android usb adb流程
4 Android系统关机或重启的几种实现方式
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
在控制台上执行命令setprop sys.usb.config none 将关闭adb功能&
三. Runtime调用Linux-shell
我们知道,Runtime这个Java类是可以用来调用并执行shell命令的,而Android是支持Linux-shell语言的,基于这一点,可以利用Runtime来执行 关机或重启的shell命令,这一点和上面介绍的方式二原理上大致相同。功能代码如下:
//Runtime执行linux-shell
case R.id.shutdown_btn3:
Log.v(TAG, &root Runtime-&shutdown&);
//Process proc =Runtime.getRuntime().exec(new String[]{&su&,&-c&,&shutdown&});
Process proc =Runtime.getRuntime().exec(new String[]{&su&,&-c&,&reboot -p&});
proc.waitFor();
}catch(Exception e){
e.printStackTrace();
case R.id.reboot_btn3:
Log.v(TAG, &root Runtime-&reboot&);
Process proc =Runtime.getRuntime().exec(new String[]{&su&,&-c&,&reboot &});
proc.waitFor();
}catch (Exception ex){
ex.printStackTrace();
使用该方法需要注意的是,普通用户是没有权限执行reboot和shutdown的,自然而然也无法实现关机或重启。使用的设备必须已经root过,上面的代码加上su命令其实也就是为了获取管理员权限。另外一点,需要注意的是,该方法能够奏效的前提是,你的androidsystem/bin
目录下存在reboot和shutdown文件(其实跟上面的原理一样,也是调用bin目录下的文件),听说大部分设备存在reboot和shutdown这两个文件,可使用的Android系统偏偏没有shutdown文件,所以,无法直接使用
Runtime.getRuntime().exec(new String[]{&su&,&-c&,&shutdown&})
只能执行下面命令来进行关机(好神奇的p参数)
Runtime.getRuntime().exec(new String[]{&su&,&-c&,&reboot -p&});
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enable_adb() disable_adb()的实现
本文已收录于以下专栏:
相关文章推荐
默认的SDK并没有提供应用开发者直接的Android系统关机或重启的API接口,一般来讲,实现Android系统的关机或重启,需要较高的权限(系统权限甚至Root权限)。所以,在一般的APP中,如果想...
ooooooooooooooo
系统重启流程分析
原文出自:/welenwho/archive//2494984.html
       android想要获得系统权限有几种途...
在应用层如何通过代码实现 Android 系统的重启,分享给大家。
这篇博客是在 android 系统开发的基础之上进行实践的,所以如果你是纯粹的 app 开发,可能要让你失望了。
Android实现系统关机和重启
一、将APP提升至系统权限
在AndroidMenifest.xml中添加如下代码:
android:sharedUserId=&android.uid....
1.5 android 系统重启关机流程分析
1.5.1 c语言中调用 reboot 函数  HAL层中重启系统的方法
bionic/libc/unistd/reboot.c:33:
上篇博客中分析过adb root pc到adbd的流程,这篇博客我们再来讲下adb root是adbd重启并且获取root的流程。我们再来回顾之前的函数:
void restart_root_serv...
(摘录一本书中的部分章节,对理解整个Android系统的架构有帮助,转载如下。)
       1.1.1  Android 的系统构架
        ...
——摘录一本书中的部分章节,对理解整个Android系统的架构有帮助,转载如下。)
       1.1.1  Android 的系统构架
       ...
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)android adb 关机实现方式 - CSDN博客
android adb 关机实现方式
&& 笔者遇到需要控制android emulator关机的问题,主要有以下几种方法实现:
&&& Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);
&&& intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);
&&& intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
&&& startActivity(intent);
&&&& 这里需要注意的一点是,需要将frameworks.jar导入到eclipse工程,否则没有Intent.ACTION_REQUEST_SHUTDOWN这一项&&&
&&& frameworks.jar在源码目录地址为./out/target/product/generic/system/framework
&&&&& public void shutdown() {
&& &&& &try {
&& &&& &&& &// 获得ServiceManager类
&& &&& &&& &Class&?& ServiceManager = Class
&& &&& &&& &&& &&& &.forName(&android.os.ServiceManager&);
&& &&& &&& &// 获得ServiceManager的getService方法
&& &&& &&& &Method getService = ServiceManager.getMethod(&getService&,
&& &&& &&& &&& &&& &java.lang.String.class);
&& &&& &&& &// 调用getService获取RemoteService
&& &&& &&& &Object oRemoteService = getService.invoke(null,
&& &&& &&& &&& &&& &Context.POWER_SERVICE);
&& &&& &&& &// 获得IPowerManager.Stub类
&& &&& &&& &Class&?& cStub = Class.forName(&android.os.IPowerManager$Stub&);
&& &&& &&& &// 获得asInterface方法
&& &&& &&& &Method asInterface = cStub.getMethod(&asInterface&,
&& &&& &&& &&& &&& &android.os.IBinder.class);
&& &&& &&& &// 调用asInterface方法获取IPowerManager对象
&& &&& &&& &Object oIPowerManager = asInterface.invoke(null, oRemoteService);
&& &&& &&& &// 获得shutdown()方法
&& &&& &&& &Method shutdown = oIPowerManager.getClass().getMethod(&shutdown&,
&& &&& &&& &&& &&& &boolean.class, boolean.class);
&& &&& &&& &// 调用shutdown()方法
&& &&& &&& &shutdown.invoke(oIPowerManager, false, true);
&& &&& &} catch (Exception e) {
&& &&& &&& &Log.e(&SystemStatusSetting&, e.toString(), e);
&&&&& 该方法是利用了反射机制调用PowerManagerService shutdown,PowerManager类没有提供关机的接口,而是通过IBinder与PowerManagerService 类进行通信。PowerManagerService调用Power 类来与下一层进行通信. PowerManagerService实现了shutdown接口,power服务实现了关机功能。 IPowerManager是AIDL文件自动生成的类,便于远程通信。IPowerManage.aidl文件目录framework/base/core/java/android/os/IPowerManage.aidl
IPowerManager实现了shutdown接口,所以,如果我们能够获得Power服务的IBinder,通过反射调用shutdown方法就能实现关机功能PowerManager提供了reboot接口可以直接调用PowerManager pManager=(PowerManager) getSystemService(Context.POWER_SERVICE);& //重启到fastboot模式&& &&& &&& &&&& pManager.reboot(&&);
&&&&&&& 通过adb shell 登录后,发现system/bin 下面只有reboot命令,没有shutdown命令。经过研究发现可以通过reboot -p命令来实现关机,于是
&&&&&&& try{
&& &&& &&& &&& &&& &Process process =Runtime.getRuntime().exec(new String[]{&su&,&-c&,&reboot -p&});& //关机
&& &&& &&& &&& &&&& proc.waitFor();
&& &&& &&& &&& &}catch(Exception e){
&& &&& &&& &&& &&&& e.printStackTrace();
&& &&& &&& &&& &}
&&&&& 使用该方法需要注意的是,使用的Android设备必须已经root过
本文已收录于以下专栏:
相关文章推荐
pre.western
{font-family:&DejaVu Sans Mono&,monospace}
{font-family:&DejaVu Sans&...
转自:http://blog.csdn.net/dengxiayehu/article/details/6848829
自己实现Android关机命令
分类: Android201...
1、安装APK(如果加 -r 参数,保留已设定数据,重新安装filename.apk)
adb install xxx.apk
adb install -r xxx.apk
adb shell mount -o remount rw /       将/改为可写
adb kill-server //终止adb服务进程
adb wait-for-device //在模拟器/...
在init进程执行动作(action)或启动服务(service)时,默认已将标准输入、标准输出、标准错误从定向到
/dev/__null__这个“无底洞”节点,所以任何的输出都会被忽略,但有时我们...
1.Android Debug Bridge
Android Debug Bridge,我们一般简称为adb,主要存放在sdk安装目录下的platform-tools文件夹中,...
解决方法1:
lsusb列出设备id
sudo vim /etc/udev/rules.d/51-android.rules
SUBSYSTEM=&usb&, ATTRS{idVendo...
1) YUV 4:4:4
YUV三个信道的抽样率相同,因此在生成的图像里,每个象素的三个分量信息完整(每个分量通常8比特),经过8比特量化之后,未经压缩的每个像素占用3个字节。
下面的四个像素...
原文地址:.cn/s/blog_9e1be75f0101a2gh.html
人脸数据库汇总
■Annotated Database ...
转自网上,网上没找到出处,只看到一些论坛中有这篇文章,组织的有点混乱,这篇文章感觉讲的挺好的。
http://www.bangchui.org/read.php?tid=7572&page=1
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 华为手机adb命令入库 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信