- Android系统级深入开发
- 韩超 梁泉
- 447字
- 2020-08-26 21:43:42
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守护进程的可执行程序。