- Android系統級深入開發
- 韓超 梁泉
- 447字
- 2018-12-29 13:39:33
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守護進程的可執行程序。
推薦閱讀
- Java系統分析與架構設計
- Linux C/C++服務器開發實踐
- Cross-platform Desktop Application Development:Electron,Node,NW.js,and React
- Python自動化運維快速入門
- Oracle 12c中文版數據庫管理、應用與開發實踐教程 (清華電腦學堂)
- 深入理解Java7:核心技術與最佳實踐
- Building an RPG with Unity 2018
- Java編程技術與項目實戰(第2版)
- C++從入門到精通(第5版)
- Java Hibernate Cookbook
- Web編程基礎:HTML5、CSS3、JavaScript(第2版)
- Drupal Search Engine Optimization
- Arduino Electronics Blueprints
- 從零開始學Unity游戲開發:場景+角色+腳本+交互+體驗+效果+發布
- Python計算機視覺與深度學習實戰