4.3.6 ADB Garget驱动程序

ADB Garget驱动程序是一种USB Garget驱动程序。如果选定此Garget驱动,Android设备作为一个USB设备的时候,提供ADB的接口。

在Linux中,USB Garget的功能是在设备端使用的功能,每一个硬件只能选定一个。这个ADB Garget是其中的一个,它实际包含了adb调试功能和大容量存储器(Mass Storage)的功能。

ADB Garget驱动程序是在drivers/usb/gadget目录中,其Makefile的相关内容如下所示:

    obj-$(CONFIG_USB_ANDROID)  += g_android.o
    g_android-objs                := android.o f_adb.o f_mass_storage.o

其中,android.c为实现USB Garget功能主要的文件,f_adb.c是adb功能的文件, f_mass_storage.c是标准的文件,需要包含它的目的是为了同时实现大容量存储器的功能。

实现的主要结构体为usb_composite_driver,这表示的就是一种USBGarget驱动的描述,内容如下所示:

    static struct usb_composite_driver android_usb_driver = {
        .name     = "android_usb",
        .dev      = &device_desc,
        .strings = dev_strings,
        .bind     = android_bind,
    };

android.c中同时注册了一个MISC设备:/dev/android_adb_enable,当打开这个设备的时候,表示使能ADB Garget的功能。

这里实现的具体内容是根据Android的ADB的协议来完成的。具体的实现在f_adb.c中完成,这个文件实现了一个USB的功能,调用如下函数增加功能。

    ret = usb_add_function(c, &dev->function);

f_adb.c中也注册了一个MISC设备:/dev/android_adb,这个设备可以读/写。

在Android系统的用户空间中,/system/core/adb目录中的内容和ADB相关。这里生成了主机使用的adb工具和目标机器使用的adbd守护进程的可执行程序。