Exemplo n.º 1
0
void adb_init_usb(void)
{
    mkdir_with_perms("/dev/usb-ffs", 0770, "shell", "shell");
    mkdir_with_perms("/dev/usb-ffs/adb", 0770, "shell", "shell");
    mount("adb", "/dev/usb-ffs/adb", "functionfs", 0, "uid=2000,gid=2000");

    sleep(10);
    write_file("/sys/class/android_usb/android0/enable", "0");

    char serial[64] = { 0 };
    adb_get_serial(serial, sizeof(serial));

    // this vid and pid is used in TWRP, CWM and AOSP recovery
    // for all devices, so I guess it is universal
    write_file("/sys/class/android_usb/android0/idVendor", "18d1");
    write_file("/sys/class/android_usb/android0/idProduct", "d001");
    write_file("/sys/class/android_usb/android0/f_ffs/aliases", "adb");
    write_file("/sys/class/android_usb/android0/functions", "adb");
    write_file("/sys/class/android_usb/android0/iManufacturer", PRODUCT_MANUFACTURER);
    write_file("/sys/class/android_usb/android0/iProduct", PRODUCT_MODEL);
    write_file("/sys/class/android_usb/android0/iSerial", serial);
    write_file("/sys/class/android_usb/android0/f_adb/on", "1");
    write_file("/sys/class/android_usb/android0/f_mtp/on", "0");

    write_file("/sys/class/android_usb/android0/enable", "1");
    write_file("/sys/devices/platform/android_usb/usb_function_switch", "3");
}
Exemplo n.º 2
0
int mkdir_recursive_with_perms(const char *pathname, mode_t mode, const char *owner, const char *group)
{
    char buf[128];
    const char *slash;
    const char *p = pathname;
    int width;
    int ret;
    struct stat info;

    while ((slash = strchr(p, '/')) != NULL) {
        width = slash - pathname;
        p = slash + 1;
        if (width < 0)
            break;
        if (width == 0)
            continue;
        if ((unsigned int)width > sizeof(buf) - 1) {
            ERROR("path too long for mkdir_recursive\n");
            return -1;
        }
        memcpy(buf, pathname, width);
        buf[width] = 0;
        if (stat(buf, &info) != 0) {
            ret = mkdir_with_perms(buf, mode, owner, group);
            if (ret && errno != EEXIST)
                return ret;
        }
    }
    ret = mkdir(pathname, mode);
    if (ret && errno != EEXIST)
        return ret;
    return 0;
}