Init.d不执行问题解决指南

4次阅读
没有评论

问题描述

使用三星S2和自定义ROM时,外部SD卡被挂载到 /emmc 而不是期望的 /mnt/sdcard/external_sd 目录。尝试通过 init.d 挂载,但没有成功。此过程可能会包含文件名为 99mount 的脚本或使用 BusyBox 命令,但仍未生效。

解决方案

需注意根据具体系统环境调整以下步骤中的时间间隔。

方案1:手动等待外部SD卡完全挂载

此方法通过在 init.d 脚本中加入延时和循环检查来确保外部SD卡已被充分挂载。如果发现设备在特定时间段内仍未挂载完成,可适当增加等待时间和重试次数。

步骤:

  1. 创建自定义 mount 脚本:在 init.d 文件夹下(一般为 /system/init.d/99mount)创建名为 99mount 的初始脚本文件,并确保拥有执行权限(例如,通过 chmod 755 /system/init.d/99mount 设置此权限)。

  2. 编写初始化脚本内容
    sh
    #!system/bin/sh
    sleep 10
    n=$(dumpsys mount | grep -c 'external')
    until [ $n -eq 1 ]
    do
    sleep 1
    n=$(dumpsys mount | grep -c 'external')
    done
    mount -o bind /emmc /mnt/sdcard/external_sd

  3. 检查脚本执行情况:重启设备后确认 99mount 脚本成功运行并正确挂载外部SD卡到指定目录。

方案2:调整系统服务或依赖关系(适用于更复杂场景)

若上述方法仍未能生效,可能需要在系统设置中插入额外的服务依赖性。这通常涉及编辑 .rc 文件或其他相关配置文件以确保 99mount 脚本能在适当的时间点调用。

步骤:

  1. 检查当前的 init 相关文件:定位并打开对应的 .rc.sh 配置文件,该文件位于 /system/etc/init/ 下或设备厂商提供的其他相应目录中。

  2. 修改依赖关系设置

    • 99mount 添加到特定启动脚本中。例如,假设需要在 boot.startup.sh 文件中添加:
      sh
      #!/bin/sh
      /system/init.d/01generic-powerd
      /system/init.d/99mount
    • 确保 99mount 扩展了必要的启动时间以确保所有挂载完成。
  3. 验证脚本执行情况:重启设备并查看外部SD卡是否按预期的路径 /mnt/sdcard/external_sd 挂载成功。

方案3:使用BusyBox命令(作为备用手段)

若选择直接通过 BusyBox 命令而非 sh 管理挂载,确保在脚本中添加适当处理。

步骤:

  1. 修改脚本文本
    sh
    #!system/bin/sh
    sleep 8
    mount -o bind /emmc /mnt/sdcard/external_sd
  2. 保证 BusyBox 可执行权限:确认 busybox 命令可在系统中找到且可被调用。如果未安装,可能需要手动安装 BusyBox。

通过以上方案逐个尝试直至问题获得解决。在此过程中,请确保了解你所操作系统的特性,并根据实际需求灵活调整每个步骤中的细节参数以匹配具体使用场景的要求。

正文完