1、关机充电其实是进入adb shell很快的方式!

2、手机关机时候插入USB,手机将进入关机充电模式,那么这个模式究竟是怎么进行的,这里分析如下!

(1)uboot:这里代码大概浏览了一下:u-boot\arch\arm\lib\board.c下的函数board_init_r中倒数最后几行:do_cboot(NULL, 0, 1, NULL);选择启动模式

else if(charger_connected()){         DBG("%s: charger connected\n", __FUNCTION__);         charge_mode();

这里就进入了charge模式:vlx_nand_boot(BOOT_PART, "androidboot.mode=charge", BACKLIGHT_ON);

"androidboot.mode=charge",这个很重要,将会传递到内核中!!!!!!!!1

kernel:内核启动之类的。

system/core/init/init.c:内核启动完毕后将运行此程序,具体分析有前人分析过了!

这里主要是关注这里几点:

a、init_parse_config_file("/init.rc");涉及到了charge模式,提供的是一个服务

service charge /bin/charge
          user root
         oneshot

也就是进入charge.c文件

b、import_kernel_cmdline(0);获取从内核的一些参数,我获得参数如下:

/ # cat /proc/cmdline
initrd=0x4c00000,0xf9dfe lpj=3350528 mtdparts=sprd-nand:256k(spl),512k(2ndbl),256k(params),512k(vmjaluna),10m(modem),3840k(fixnv),3840k(backupfixnv),5120k(dsp),3840k(runtimenv),10m(boot),10m(recovery),200m(system),190m(userdata),60m(cache),256k(misc),1m(boot_logo),1m(fastboot_logo),3840k(productinfo),512k(kpanic) androidboot.mode=charge video=sprdfb:fb0_id=0x9486,fb1_id=0x0 factory ram=256M nandflash=nandid(0xad,0xbc,0x90,0x55,0x56),pagesize(2048),oobsize(64),eccsize(512),eccbit(4)  show-guest-banks=0x4 no_console_suspend console=ttyNK viomem=* linux-timer=virtual root=/dev/ram0 rw init=/init 
         可以看到uboot中传来的参数androidboot.mode=charge!!!!!!!

c、import_kernel_cmdline函数内部中调用import_kernel_nv:else if (!strcmp(name,"androidboot.mode")) {
            strlcpy(bootmode, value, sizeof(bootmode));

这里bootmode=charge

d、进入for循环模式

1、 execute_one_command();--》do_class_start(1, args);do_class_start()中调用service_start_if_not_disabled(), 再调用service_start(),用fork() + execve()来创建子进程并执行service指定的可执行文件来终于启动了service。这个过程会根据一些service的属性,例如SVC_DISABLED等来决定是否进行启动service

2、restart_processes();!!这个很重要的!调用了restart_service_if_needed--》 service_start(svc, NULL);

if(strcmp(svc->name,"zygote")==0) {
        if ((calibration[0]) ||
                    (fastsleep_enable) ||
                    (!strncmp(bootmode, "charge", 6))) { //!!!!!!!!!!!!!!此处看到了我们cmdline中传入的模式,是charge模式,因此不启动zygote,是进入charge模式!!
            PRINT("##: Don't start 'zygote'!\n");
            PRINT("##: Don't start 'zygote'!\n");
            PRINT("##: Don't start 'zygote'!\n");
            PRINT("##: Don't start 'zygote'!\n");
            return;
        }
        else {
            PRINT("####: Start [zygote] services normally.\n");
        }
    }

execve(svc->args[0], (char**) arg_ptrs, (char**) ENV);//是否是执行/root/bin/charge二进制执行文件???

就此就不断循环判断是否在充电模式!!!

android关机充电的更多相关文章

  1. 【转】android 电池(二):android关机充电流程、充电画面显示

    关键词:android 电池关机充电 androidboot.mode charger关机充电 充电画面显示 平台信息:内核:linux2.6/linux3.0系统:android/android4. ...

  2. android 电池(二):android关机充电流程、充电画面显示【转】

    本文转载自:http://blog.csdn.net/xubin341719/article/details/8498580 上一篇我们讲了锂电池的充放电的流程和电池的一些特性,这一节我们重点说一下a ...

  3. android 关机充电流程

    点击打开链接 0.主要流程 usb插入通过传递cmdline给init解析从而启动充电进程 1. LK lk\app\aboot\aboot.c update_cmdline ---------- i ...

  4. Android 电池关机充电

    android 电池(一):锂电池基本原理篇 android 电池(二):android关机充电流程.充电画面显示 android 电池(三):android电池系统 android电池(四):电池 ...

  5. Android 8.1 关机充电动画(一)模式选择

    system:Android 8.1 platform:RK3326/PX30 uboot kernel Android 8.1 关机充电动画(一)模式选择 Android 8.1 关机充电动画(二) ...

  6. Android 8.1 关机充电动画(三)Android模式

    system:Android 8.1 platform:RK3326/PX30 uboot kernel system/core/healthd Android 8.1 关机充电动画(一)模式选择 A ...

  7. Android 8.1 关机充电动画(二)Uboot模式

    system:Android 8.1 platform:RK3326/PX30 uboot kernel Android 8.1 关机充电动画(一)模式选择 Android 8.1 关机充电动画(二) ...

  8. Android MTK6580 客制化关机充电动画

    1.客制化关机充电图片 vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo/xxx 找到对应分辨率替换 2.调整显示图片位置.大小 ...

  9. android的充电图标显示

    最近RK3026的项目需要修改开机充电,才分析了Android原生态的充电过程. 充电的代码和图标在system/core/charger中,会编译成名字为charger的可执行文件,打包进ramdi ...

随机推荐

  1. C语言小结之链表

    链表的学习 在数据结构中有一种结构叫做线性表,线性表是储存一个线性数据的表格,本文就简要的介绍一下线性表的构成. 一.线性表的定义定义:由同种类型数据元素构成的有序数列的线性结构长度.表头.表尾Lis ...

  2. NSString NSMutableString copy mutableCopy retain weak strong整合

    copy retain assign的差别在于对象属性的set方法 NSString 与 NSMutableString NSString是不可变字符串对象,这句话的意思,结合代码: #import ...

  3. 使用自定义《UIActivity》进行内容分享-b

    简介 这段时间有很多朋友都问我关于怎么去集成ShareSDK或者友盟社会化分享SDK的问题, 其实我想说, Apple一开始就提供了一个类, 供我们去使用分享了, 在iOS 6之后更加增强了这个类, ...

  4. JavaScript的OOP编程1

    首先要说的是,javascript其实是可以进行OOP编程的,其次javascript的OOP编程实现方式有多种,我写的这一种只是我测试过,可行的一种 version1 // 父类 function ...

  5. VIM一些常用命令,方法,配置

    配置文件地址 github 工具只是为了更好的工具,选择一种,坚持使用学习记忆,熬过瓶颈期就可以了. 现在我基本大的项目是IDE+vim 插件,写小代码是VIM. 常用的操作,便捷的方法 1.如何选中 ...

  6. Sprint5

    进展:今天开始进行了登录界面的编写及实现. 燃尽图: 工作照:

  7. Word文献类型标志

    文献类型标识:专著:M:论文集:C:报纸文章:W:期刊文章:J:学位论文:D:研究报告:R:各种未定类型的文献:Z文献类型标识:专著:M:论文集:C:报纸文章:W:期刊文章:J:学位论文:D:研究报告 ...

  8. 【Bzoj 3295】 动态逆序对(树套树|CDQ分治)

    [题意] 每次删除一个数,然后问删除前逆序对数. [分析] 没有AC不开心.. 我的树状数组套字母树,应该是爆空间的,空间复杂度O(nlogn^2)啊..哭.. 然后就没有然后了,别人家的树套树是树状 ...

  9. ANDROID_MARS学习笔记_S04_007_从服务器获取微博数据时间线

    一.代码 1.xml(1)activity_main.xml <?xml version="1.0" encoding="utf-8"?> < ...

  10. 转载:win7JDK环境配置

    [win7JDK环境配置] 网址:http://blog.sina.com.cn/s/blog_6a9df2330100ms9q.html 系统变量下: (1) 新建->变量名:JAVA_HOM ...