1

为了更好地澄清我的一般问题:

根据 Google 文档,我已经通过运行完整的“make full-eng”构建来让 Android 模拟器工作。但是,我想调试它,所以一旦我运行模拟器,并调用“$ adb shell dmesg”并将其路由到输出文本文件,我发现了几行奇怪的行:

...
<4>goldfish_new_pdev goldfish_interrupt_controller at ff000000 irq -1
<4>goldfish_new_pdev goldfish_device_bus at ff001000 irq 1
<4>goldfish_new_pdev goldfish_timer at ff003000 irq 3
<4>goldfish_new_pdev goldfish_rtc at ff01000

所以当你运行 Android 完整版本时,它会给你 Goldfish 作为系统映像?我想知道它是否在测试我想要的 Galaxy Nexus 的东西。内核是 Galaxy Nexus 的修改后的 maguro 内核(omap 项目),我将其放入构建树中。但我想测试的平台是 IceCreamSandwich。模拟器在测试这个平台吗?(b/c 这个日志中的输出让我相信它不是)或者模拟器正在测试“通用”图像?

此外,还有一个重要的问题:我修改了内核的“socket.h”文件,以使用未定义的协议 (FINS) 覆盖 INET 协议。理论上手机应该可以开机,但不能上网。手机模拟器关心你对互联网协议做了什么吗?它是否使用主机的网络功能?

进一步跟进:手机的哪些进程/系统服务/事件(涉及启动到稳定状态)依赖于传统底层网络堆栈的互联网协议?(定义的协议来设置网络套接字)

4

1 回答 1

1

在我写这个问题的时候,我不明白一些事情,并认为我在“内核级别”搞乱模拟器时学到了一些东西。首先,模拟器测试一个“通用”手机品牌的“金鱼内核”(Linux版本2.6.29,采用ARM架构)。就好像模拟器本身就是一种手机,你不能混合这些图像内核。例如,我尝试使用金鱼内核(换句话说,没有 crespo 内核)构建一个 Nexus S crespo 手机映像,并且手机只是“挂起”在 Google 闪屏上(至少它不是引导循环)。

我的研究(FINS)在这个模拟器上工作,但没有在实际硬件支持的 3 个平台上工作:Nexus S、Galaxy Nexus 和摩托罗拉 Xoom。我不知道为什么,因为谷歌似乎没有让用户能够在手机的最低级别进行调试(我确信实际的开发人员在构建这些手机/测试它们时会使用这类工具)。这导致了一个主要问题,它回答了我最后的后续问题:Android 调试桥依赖于 INET 协议。我的模拟器成功启动并按我想要的方式运行(没有互联网,b/c 没有 INET),但这些实际的手机却没有。我的假设是:如果 INET 被一个空的协议覆盖(在这种情况下,那将是 FINS,它打算在用户空间级别处理 INET,但这似乎为时已晚,无法满足电话系统), ADB 守护进程(可能被归类为一种系统服务)无法工作/连接,Android 硬件将因此崩溃。我认为模拟器比真正的手机更灵活,因为硬件可能是虚拟表示的,并且没有与物理硬件相同的限制。

您可以查阅我与 Android 手机启动过程的斗争的 wiki/文档(我的研究团队较大网站的一部分),了解更多详细信息和我的各种尝试: http: //finsframework.org/mediawiki/index.php/Alexander_G._Ororbia_II

如果有人想出如何从 Nexus S、Galaxy Nexus 或摩托罗拉 Xoom 中获取工作启动日志而陷入“启动循环”(没有 ADB),请告诉我,因为我将继续努力这个问题会持续一段时间(我将更新我的其他 Stack Overflow-Android 问题以反映这一更正)。对我的理解的任何更正也将不胜感激。

注意:这个答案是可编辑的,因为我仍然认为有一些方法可以让手机在没有 ADB 守护程序的情况下在主机上生成引导日志。

于 2012-07-31T17:26:15.790 回答