【问题标题】:Can't boot Android device after replacing system.img更换 system.img 后无法启动 Android 设备
【发布时间】:2016-05-19 16:33:05
【问题描述】:

我正在使用 NXP(前身为飞思卡尔)的 i.MX53 板开发定制的 android 设备。我有操作系统源代码、各种中间文件,以及曾经由另一个开发人员(他定制了操作系统,但后来离开了我们公司)生成的最终结果文件。我现在需要修改这些设备上系统分区的内容。我尝试使用 make_ext4fs.exe 和包含先前开发人员必须使用的文件的原始集合的目录来构建和加载新的 system.img 文件。我相信我已经创建了与之前使用的几乎相同的系统映像。它们都是 ext4,200MB。

此板有一个实用程序(称为 MfgTool),只需单击按钮即可自动为您复制和安装图像。该 MfgTool 成功地将我的图像写入设备。但是,当我尝试启动时,它会失败并且只是循环显示自定义启动映像。如果我在此过程中换出新的系统映像并恢复之前的系统映像,一切都会再次运行。因此,只需正确构建此系统映像即可。

可能是什么原因?图像中的什么差异可能会导致这种情况?是否可能需要签名,或者我没有考虑到其他类型的保护?

【问题讨论】:

  • 如果自定义启动图像(我假设正常的 android 徽标已被替换)显示,很有可能 Logcat 已启动并运行。您可以连接到设备并查看报告的内容吗?
  • 我无法进入它。我看到的一切都表明它已启用,但除了通过此 MfgTool 之外,我没有看到与设备交互的方法。我确实有它的来源,所以我想如果需要我可以剖析它。
  • 还有其他常用的查看日志/调试输出的方法吗?
  • 是的,显示的是我公司的自定义徽标,而不是库存的 Android 图像。

标签: android image boot


【解决方案1】:

将其中一个系统映像服务可执行文件替换为将 kmsg 和 logcat 转储到文件(例如在数据分区或外部存储中)然后调用原始可执行文件的 shell。然后,启动到您之前的系统并收集这些日志。

【讨论】:

  • 这是一个我也成功使用过的技巧。但我不会将输出转储到 /data/local/tmp - 该位置在成功启动时经常被清除。 /data 中的其他任何地方都应该没问题。
  • 这听起来是个好建议!谢谢!我会试试看。
  • 任何建议将包装器添加到哪个服务?如果该映像是有问题的映像,那么在系统映像上执行此操作是否有意义?
  • 在您的 init.*rc 文件中搜索非关键服务。并在有问题的系统映像上执行此操作,这就是重点:)
  • 我不是 Android 架构方面的专家,如果这是 nube 问题,请原谅,但是 bootanimation 会显示我的启动标志吗?我可以看到它已显示,所以我想也许我可以利用我所知道的成功执行的内容?
【解决方案2】:

事实证明,我的主要问题是,当通过 make_ext4fs 创建映像时,我需要将映像的挂载点设置为“system”而不是“/system”,尽管所有文档都与之相反!我通过仔细阅读 ASOP 源代码发现了这一点:...build\tools\releasetools\img_from_target_files。

值得注意的是,在这个障碍之后,我又遇到了另一个问题,即设备表现得很古怪。结果证明是图像中没有任何符号链接的结果。看起来至少你通常有符号链接将你的“bash”命令指向 system/bin 中的工具箱二进制文件。我不知道您通常如何获得这些链接,但是创建这些链接然后将它们捆绑到图像中可以解决该问题。如果您手动创建这样的系统映像,我建议检查 bin 目录中的符号链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多