如何将 Android 的 WifiService 操作调试到驱动程序级别?
How do I debug Android's WifiService operation down to the driver level?
我需要了解消息如何遍历 Android 系统,从服务级别到驱动程序调用。
我决定从 WiFi 入手,尽管我当前的硬件平台 - 带有 TI 划艇的 Beaglebone Black 开发板 (Android 4.2.2) - 没有 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,我找到了这个代码片段
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插入了一个log函数,如下
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.
看来我还有很长的路要走,所以任何帮助将不胜感激。
我需要了解消息如何遍历 Android 系统,从服务级别到驱动程序调用。
我决定从 WiFi 入手,尽管我当前的硬件平台 - 带有 TI 划艇的 Beaglebone Black 开发板 (Android 4.2.2) - 没有 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,我找到了这个代码片段
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插入了一个log函数,如下
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.
看来我还有很长的路要走,所以任何帮助将不胜感激。