Android init进程中鲜为人知的charger mode 模式

作者:K_Linux_Man

假如基于Andriod系统平台的手机在没有硬件充电指示灯的情况下,你如何知道电池是否在充电呢,进入andriod系统才能进行充电指示,而我们有时候仅仅需要充电而不需要进入系统,一般的情况是,当你关机的时候,插上充电器,屏幕会出现充电的图标。这是如何做到的呢?

android 为我们提供了一个c程序,在system/core/charger/目录下。

首先说明一下charger目录下的东西,一个charger.c 判断电池的电量,以及显示充电图标的功能。 iamges存放了图标,还有一个Android.mk

init进程是如何去判断charger mode的呢?

他是从cmdline上获取的。查看的话路径在/proc/cmdl。

那如何让android的init进程进入这种模式呢,当然需要你在bootloader或者在uboot里,让androidboot.mode=charger。

init.rc中还需要进行配置,

添加

system batteryserver  /charger

     oneshot


on charger

  class_start charger


在device目录下device.mk中的PRODUCT_PACKAGES :=

添加charger  还有charger_res_images  两项。

编译一下,make bootiamge之后,烧机。

开机之后你就会看到一个电池的图标在不断的充电。。


如有问题,请即使留言。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Android系统,高通(Qualcomm)内核驱动可以通过访问特定的系统文件来获取设备的启动模式(boot mode)。通常,这些信息会存储在内核参数或者设备树(Device Tree)。一种常见的方法是通过读取系统文件`/proc/cmdline`来获取启动参数,该文件包含了启动时传递给内核的参数。 例如,可以通过打开`/proc/cmdline`文件,然后读取内容并解析其的参数来判断启动模式。如果参数有`androidboot.mode=charger`,则表示设备处于充电模式启动。如果参数有`androidboot.mode=download`,则表示设备处于下载模式启动,等等。 在高通的内核驱动,通常会有一些辅助函数来读取和解析这些启动参数。例如,在内核的源码可能会定义一些宏或函数,如`is_charging_enabled()`、`is_download_mode()`等,用于直接检查当前的启动模式。 具体实现代码可能如下所示(仅作为示例,实际代码可能会根据内核版本和设备型号有所不同): ```c #include <linux/module.h> #include <linux/init.h> #include <linux/proc_fs.h> static int __init bootmode_init(void) { char buffer[1024]; unsigned long len = sizeof(buffer); // 读取启动参数 if (kernel_read_file_from_path("/proc/cmdline", buffer, &len, NULL, 0) == 0) { printk(KERN_INFO "Boot Mode: %s\n", buffer); // 这里可以添加逻辑来解析buffer的启动模式信息 // 例如使用strcasestr函数查找特定的boot mode字符串 } return 0; } static void __exit bootmode_exit(void) { printk(KERN_INFO "Module removed\n"); } module_init(bootmode_init); module_exit(bootmode_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("A module to get Android boot mode on Qualcomm platform"); ``` 需要注意的是,具体的文件路径和参数可能会因为Android版本和设备制造商的不同而有所不同。因此,开发者需要根据实际设备的内核源码和文档来确定正确的路径和参数。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值