/dev/usb-ffs/adb ep0 ep1 ep2
配置目录
/sys/kernel/config/usb_gadget/g1
/sys/kernel/config/usb_gadget/g1/configs/c.1
/sys/kernel/config/usb_gadget/g1/functions/ffs.adb
在 Linux-3.8 以后,Android 的内核分支,便去掉了 f_adb,改使用 USB function FS,在用户空间实现 USB adb 功能。
configfs on /sys/kernel/config type configfs (rw,relatime) mount none cfg -t configfs adb on /dev/usb-ffs/adb type functionfs (rw,relatime) mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb
在adbd的初始化流程中,我们在adbd_main()函数中看到有调用usb_init()函数,usb_init()函数就是usb初始化的入口。我们先看看usb_init()函数是如何被调用的:
bool is_usb = false; if (access(USB_FFS_ADB_EP0, F_OK) == 0) { // Listen on USB. usb_init(); is_usb = true; } void usb_init() { dummy_fd = adb_open("/dev/null", O_WRONLY); CHECK_NE(dummy_fd, -1); usb_ffs_init(); }