Android手机通电自动开机(关机状态下)

Android  2022-03-21 02:07  165  


  • 继续折腾Usb手机共享网络, 以前是用的电池,很快鼓包了,换成18650限制充电量后,还是只能用一阵子就会莫名关机.
  • 最后选择使用5v直接接电池保护板,直流供电.但是有一个问题就是断电后不会自动启动,下面介绍通过修改boot完成关机充电时自动开机.

完成自动开机后,安装tasker为系统应用,实现开机自动启动我们的应用实现usb连接自动启用usb共享.



以下内容转自: https://zhuanlan.zhihu.com/p/418262993?ivk_sa=1024320u


  • 目的需求:在手机关机状态下,若是通电,则自动开机.
  • 使用场景:手机做4G路由器热点使用;备用手机常年通电做转发短信未接来电;做车载导航行车记录仪等;
  • 方法思路:确定手机关机状态下充电时会调用什么脚本命令,然后在脚本命令中添加入重启指令。

步骤预览:

  1. 提取手机boot.img镜像
  2. 解包boot.img镜像
  3. 修改init.rc文本
  4. 打包boot.img
  5. 刷入修改后的boot.img到手机
  6. 完成,测试

实践环境:

1. 提取手机boot.img镜像

  • 1.1. 手机打开USB调试(开发者选项)
  • 1.2. 手机USB连接电脑
  • 1.3. 在CMD窗口cd到adb.exe的路径,输入“adb devices”来检测一下链接状况。
C:\platform-tools>adb devices

List of devices attached

63d76abf device #连接成功
  • 1.4. 输入“adb shell”,回车,再输入“su”回车,这注意看,提示符应该已经从$符号变成了#号。
  • 1.5. 输入命令搜索”find /dev/block/platform/ -name by-name”来找到”by-name”文件夹路径
2|:/dev # find /dev/block/platform/ -name by-name

find /dev/block/platform/ -name by-name

find /dev/block/platform/ -name by-name

/dev/block/platform/soc/c0c4000.sdhci/by-name //找到需要的路径
  • 1.6. 输入命令列出搜索到的文件夹”ls -al /dev/block/platform/soc/c0c4000.sdhci/by-name”,找到boot对应文件名称为”mmcblk0p58”
ls -al /dev/block/platform/soc/c0c4000.sdhci/by-name

total 0

drwxr-xr-x 2 root root 1320 1970-01-01 08:02 .

drwxr-xr-x 3 root root 1380 1970-01-01 08:02 ..

lrwxrwxrwx 1 root root 21 1970-01-01 08:02 abl -> /dev/block/mmcblk0p25

lrwxrwxrwx 1 root root 21 1970-01-01 08:02 ablbak -> /dev/block/mmcblk0p26

lrwxrwxrwx 1 root root 21 1970-01-01 08:02 apdp -> /dev/block/mmcblk0p11

lrwxrwxrwx 1 root root 21 1970-01-01 08:02 bk1 -> /dev/block/mmcblk0p49

lrwxrwxrwx 1 root root 21 1970-01-01 08:02 bk2 -> /dev/block/mmcblk0p51

lrwxrwxrwx 1 root root 21 1970-01-01 08:02 bluetooth -> /dev/block/mmcblk0p38

lrwxrwxrwx 1 root root 21 1970-01-01 08:02 boot -> /dev/block/mmcblk0p58 //找到boot对应的文件名"mmcblk0p58"
  • 1.7. 开始提取,输入“dd if=/dev/block/mmcblk0p58 of=/sdcard/boot.img”,这里的”mmcblk0p58”就是刚才上面找到的boot对应文件.
  • 1.8. 把提取的”boot.img”文件拷贝到电脑

2. 解包boot.img镜像

  • 2.1. 电脑上把拷贝的boot.img和bootimg.exe放在相同目录下。最好单独建个目录,把这两个文件放进去,因为后续会产生很多文件,以免混乱。
  • 2.2 . CMD到bootimg.exe目录下执行“bootimg —unpack-bootimg” 解包 //路径不能有中文.否则报错
C:\platform-tools\bootimg>bootimg --unpack-bootimg

arguments: [bootimg file]

bootimg file: boot.img

output: kernel[.gz] ramdisk[.gz] second[.gz]

base: 0x0

ramdisk_addr: 0x1000000

second_addr: 0xf00000

tags_addr: 0x100

page_size: 4096

name: ""

cmdline: "console=ttyMSM0,115200,n8 androidboot.console=ttyMSM0 earlycon=msm_serial_dm,0xc170000 androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x37 ehci-hcd.park=3 lpm_levels.sleep_disabled=1 sched_enable_hmp=1 sched_enable_power_aware=1 service_locator.enable=1 swiotlb=1 firmware_class.path=/vendor/firmware_mnt/image loop.max_part=7 buildvariant=user"

padding_size=4096

arguments: [ramdisk file] [directory]

ramdisk file: ramdisk.gz

directory: initrd

output: cpiolist.txt

compress: True

3. 修改init.rc文本

  • 3.1. 解包boot.img后会获得”initrd”文件夹,里面有我们需要修改的”init.rc”文件
  • 3.2. 使用EmEditor修改init.rc文件,在”on charger”这一项目添加”setprop sys.powerctl reboot”
on charger

    class_start charger #这段自带不用删也可以,而且听说某些系统需要先进入charger流程,否则会卡第一屏

    setprop sys.powerctl reboot #添加进这段
  • 3.3. 修改init.rc完毕,保存.

4. 打包boot.img

  • 4.1. 现在要把修改的文件重新打包成boot.img。还是回到刚才的cmd窗口。输入“bootimg  --repack-bootimg”回车。程序会自动把文件打包回去。现在目录下就会变成3个文件,一个程序bootimg.exe,一个原始文件boot-old.img,一个新生成的文件boot-new.img。

5. 刷入修改后的boot.img到手机

  • 5.1. 把boot-new.img拷贝到adb.exe所在的目录,并且重命名为boot.img,在此目录打开命令窗口。
  • 5.2. 把手机进入到fastboot的状态。关机,同时按住音量减和电源键。这时你的手机会进入fastboot的状态,准备开始写入boot.img。
  • 5.3. 在命令窗口输入“fastboot flash boot boot.img”回车,开始刷写boot.img。因为文件很小,几秒钟就提示完成了。
  • 5.4. 输入“fastboot reboot”回车,会重启手机

6. 完成,测试


发布于 2022-03-21 02:07, 最后修改于2022-03-21 02:07