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 ...
随机推荐
- C语言学习总结(一) 基本语法
第一章--C语言的基本概念 丹尼斯 里奇 一.什么是C语言? 定义:是一个面向过程的计算机高级语言--不需要任何运行环境便能运行的程序语言: 发展:目前是C11 (K&R C—> ...
- OC - 正则表达式 - RegexKitLite
正则表达式使用步骤: 1. 创建正则表达式对象, 设置约束条件; NSString *pattern = @"\\d{1,3}"; NSRegularExpression *reg ...
- Uva 1354 Mobile Computing
题目链接 题意: 在一个宽为r 的房间里, 有s个砝码, 每个天平的一端要么挂砝码, 要么挂另一个天平, 并且每个天平要保持平衡. 求使得所有砝码都放在天平上, 且总宽度不超过房间宽度的最大值. 思路 ...
- UML类图的6中关系
引用自: http://blog.csdn.net/tianhai110/article/details/6339565 UML类图分为如下四种关系: 1. 泛化 (Generalization) ...
- JavaScript自学代码--(三)
//通过 id 查找 HTML 元素 var x = document.getElementById("demo"); //通过标签名查找 HTML 元素 //本例查找 id=&q ...
- IAR ARM、IAR STM8、IAR MSP430共用一个IDE
转自IAR ARM.IAR STM8.IAR MSP430共用一个IDE 试了安装好多个不同版本不同编译器的IAR,终于明白不同编译器的IAR共用IDE的条件,把几个不同编译器的IAR安装在一起,共用 ...
- [topcoder]BinaryCards
现在觉得有空时可以刷一下topcoder的DIV 2的Lvl 3的题目.感觉和刷LeetCode和WikiOi都是不一样的. http://community.topcoder.com/stat?c= ...
- Windows编程中的堆管理(过于底层,一般不用关心)
摘要: 本文主要对Windows内存管理中的堆管理技术进行讨论,并简要介绍了堆的创建.内存块的分配与再分配.堆的撤销以及new和delete操作符的使用等内容. 关键词: 堆:堆管理 1 引言 在大多 ...
- 计算机中的大小端模式及C语言中如何鉴别他们
我的博客:www.while0.com 参考http://blog.csdn.net/ce123_zhouwei/article/details/6971544 写的很详细. 大小端主要是对数字类型来 ...
- Codevs_1048_石子归并_(动态规划)
描述 http://codevs.cn/problem/1048/ 1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Des ...