android关机充电
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关机充电的更多相关文章
- 【转】android 电池(二):android关机充电流程、充电画面显示
关键词:android 电池关机充电 androidboot.mode charger关机充电 充电画面显示 平台信息:内核:linux2.6/linux3.0系统:android/android4. ...
- android 电池(二):android关机充电流程、充电画面显示【转】
本文转载自:http://blog.csdn.net/xubin341719/article/details/8498580 上一篇我们讲了锂电池的充放电的流程和电池的一些特性,这一节我们重点说一下a ...
- android 关机充电流程
点击打开链接 0.主要流程 usb插入通过传递cmdline给init解析从而启动充电进程 1. LK lk\app\aboot\aboot.c update_cmdline ---------- i ...
- Android 电池关机充电
android 电池(一):锂电池基本原理篇 android 电池(二):android关机充电流程.充电画面显示 android 电池(三):android电池系统 android电池(四):电池 ...
- Android 8.1 关机充电动画(一)模式选择
system:Android 8.1 platform:RK3326/PX30 uboot kernel Android 8.1 关机充电动画(一)模式选择 Android 8.1 关机充电动画(二) ...
- Android 8.1 关机充电动画(三)Android模式
system:Android 8.1 platform:RK3326/PX30 uboot kernel system/core/healthd Android 8.1 关机充电动画(一)模式选择 A ...
- Android 8.1 关机充电动画(二)Uboot模式
system:Android 8.1 platform:RK3326/PX30 uboot kernel Android 8.1 关机充电动画(一)模式选择 Android 8.1 关机充电动画(二) ...
- Android MTK6580 客制化关机充电动画
1.客制化关机充电图片 vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo/xxx 找到对应分辨率替换 2.调整显示图片位置.大小 ...
- android的充电图标显示
最近RK3026的项目需要修改开机充电,才分析了Android原生态的充电过程. 充电的代码和图标在system/core/charger中,会编译成名字为charger的可执行文件,打包进ramdi ...
随机推荐
- [简历] JAVA 软件工程师
首先,一份好的简历不光说明事实,更通过FAB模式来增强其说服力. Feature:是什么 Advantage:比别人好在哪些地方 Benefit:如果雇佣你,招聘方会得到什么好处 其次,写简历和写议论 ...
- LDR伪指令与ADR伪指令的区别
测试代码 ldr r0, _start adr r0, _start ldr r0, =_start nop mov pc, lr _start: nop 设置代码的起始地址为 0x0c008000, ...
- UITextView -- 基础备忘
UITextView 这篇文章只涉及到基本的使用,日后会写一些关于结合TextKit的备忘 基本属性 let screenSize = UIScreen.mainScreen().bounds.siz ...
- HIVE编程指南之HiveQL的学习笔记1
// HiveQLa) 数据定义语言1 数据库表的一个目录或命名空间,如果用户没有指定数据库的话,那么将会使用默认的数据库default-----创建数据库CREATE DATABASE guoyon ...
- Android入门教程之我见
真正的从安卓入门学习到实际工作也差不多一年时间了,也做了几个项目.在这期间经历了一开始学习Android的基本知识后仍旧无从下手,不知道如何开始开发一个app,到现在也开始学会注意Android架构的 ...
- sublime搭建c++/java/lua/python/ruby的配置文件
本人电脑win7 64位 提前装一下convert to utf-8插件,编译运行出现乱码,组合键ctrl+shift+c把源文件转成gbk编码. 仍乱码的话,重启编辑器|电脑|重新编辑中文部分. c ...
- python面向对象编程实例解析
1. 类和函数 面向对象编程的例子: #!/usr/bin/env python # -*- coding: utf-8 -*- class Person(object): #在属性和变量的前面增加“ ...
- [原博客] POJ 2975 Nim 统计必胜走法个数
题目链接题意介绍了一遍Nim取石子游戏,可以看上一篇文章详细介绍.问当前状态的必胜走法个数,也就是走到必败状态的方法数. 我们设sg为所有个数的Xor值.首先如果sg==0,它不可能有必胜走法,输出0 ...
- JAVA 反序列化攻击
Java 反序列化攻击漏洞由 FoxGlove 的最近的一篇博文爆出,该漏洞可以被黑客利用向服务器上传恶意脚本,或者远程执行命令. 由于目前发现该漏洞存在于 Apache commons-collec ...
- 【HDU 1542】Atlantis 矩形面积并(线段树,扫描法)
[题目] Atlantis Problem Description There are several ancient Greek texts that contain descriptions of ...