android recovery下使用adb出现device offline问题

进入recovery后,执行adb devices,提示device offline。

说明设备的USB口是device role了,但adb server跟device通信不上。

对比了网上很多文章,各种修改都无法解决。

于是,将adb和adbd和adb driver的log打开。

//system/core/adb

//kernel-3.18/drivers/usb/gadget/f_adb.c

发现adb driver的读写都没有调用,于是在adb代码里寻找打开adb driver “/dev/android_adb”的地方,一步步跟踪,到了问题点:

system\core\adb\usb_linux_client.cpp 

void usb_init()

{

    if (access(USB_FFS_ADB_EP0, F_OK) == 0)

        usb_ffs_init();

    else

        usb_adb_init();

}

能正常连接adb的走usb_adb_init();,而不能正常连接的走usb_ffs_init();

#define USB_FFS_ADB_PATH  "/dev/usb-ffs/adb/"

#define USB_FFS_ADB_EP(x) USB_FFS_ADB_PATH#x

#define USB_FFS_ADB_EP0   USB_FFS_ADB_EP(ep0)

也就是说,不能正常连接adb的是因为access(USB_FFS_ADB_EP0, F_OK)成功了,

经过对比,recovery下的bootable/recovery/etc/init.rc 多了下面几行:

on fs

    write /proc/bootprof "start mobicore (on fs)"    

    //....    

    mkdir /dev/usb-ffs 0770 shell shell

    mkdir /dev/usb-ffs/adb 0770 shell shell

    mount functionfs adb /dev/usb-ffs/adb uid=2000,gid=2000

这就导致设备的adbd执行的是ffs初始化,而不是adb初始化的原因。

屏蔽上面几行,连接adb成功。显示:

$ adb devices

List of devices attached

0123456789ABCDEF recovery

你可能感兴趣的:(Android,recovery,adb,device,offline)