如何将 Android 的 WifiService 操作调试到驱动程序级别?
Posted
技术标签:
【中文标题】如何将 Android 的 WifiService 操作调试到驱动程序级别?【英文标题】:How do I debug Android's WifiService operation down to the driver level? 【发布时间】:2015-03-07 11:15:13 【问题描述】:我需要了解消息是如何从服务级别到驱动程序调用遍历 android 系统的。
我决定从 WiFi 入手,尽管我当前的硬件平台 - 带有 TI 的 Rowboat (Android 4.2.2) 的 Beaglebone Black 板 - 没有 WiFi 功能。
我的计划是在源代码中插入日志函数调用,并通过 am 程序向 WifiService 发送 Intent 以触发向驱动程序发送消息。
我发现,在init.rc中,ServiceManager是通过以下代码启动的
service servicemanager /system/bin/servicemanager
class core
user system
group system
critical
onrestart restart zygote
onrestart restart media
onrestart restart surfaceflinger
onrestart restart drm
此外,从 frameworks/base/services/java/com/android/server/SystemServer.java,我找到了这段代码 sn-p
try
Slog.i(TAG, "Wi-Fi Service");
wifi = new WifiService(context);
ServiceManager.addService(Context.WIFI_SERVICE, wifi);
catch (Throwable e)
reportWtf("starting Wi-Fi Service", e);
我相信它会启动 WifiService。
但是,我无法确定 SystemServer 是如何启动的。
除此之外,我还设法在frameworks/base/wifi/java/android/net/wifi/WifiManager.java插入了一个日志函数,如下
public WifiManager(Context context, IWifiManager service)
mContext = context;
mService = service;
Log.i(TAG, "WiFiManager Created. Calling init()"); // inserted log
init();
我可以看到它通过使用logcat -s WifiManager
起作用,结果是
I/WifiManager( 317): WiFiManager Created. Calling init()
I/WifiManager( 396): WiFiManager Created. Calling init()
I/WifiManager( 968): WiFiManager Created. Calling init()
但是,我无法确定为什么它会被调用 3 次或调用来自哪里。
至于C代码,我希望通过dmesg
看到它的日志信息。
我已将 cscope 和 ctags 配置为浏览代码,但我无法找到 WifiService 或 WifiManager。
看来我还有很长的路要走,所以任何帮助都将不胜感激。
【问题讨论】:
【参考方案1】:此演示文稿中的幻灯片 8 可能能够回答您的几个问题
WifiService 和 WifiController 的来源也可能会有所帮助,您可以在 frameworks/base/services/java/com/android/server/wifi
中找到它们。还要检查那里的README.txt
。
【讨论】:
这在理论上可以回答这个问题,但最好将答案的基本部分包含在此处以供将来的用户使用,并提供链接以供参考。 Link-dominated answers 可以通过link rot 失效。 @Mogsdad 我很清楚,并且真的很想这样做,但我不允许包含图像:( 也许你可以这样做?this 是 URL 完成...但您仍然可以提供文字来解释与问题的相关性。 谢谢,@aaahaaap。我的研究基于“marakana”的幻灯片。由于已经一年了,我不记得我是否能够找到所有的电话。如果我找到自己的幻灯片,我会在这里发布。非常感谢!以上是关于如何将 Android 的 WifiService 操作调试到驱动程序级别?的主要内容,如果未能解决你的问题,请参考以下文章
怎样从C++代码直接訪问android framework层的WifiService