⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fastboot.c

📁 Android 一些工具
💻 C
📖 第 1 页 / 共 2 页
字号:
    *x = 0;    val[0] = x + 1;    for(count = 1; count < MAX_OPTIONS; count++) {        x = strchr(val[count - 1],'|');        if (x == 0) break;        *x = 0;        val[count] = x + 1;    }        name = strip(name);    for(n = 0; n < count; n++) val[n] = strip(val[n]);        name = strip(name);    if (name == 0) return -1;        /* work around an unfortunate name mismatch */    if (!strcmp(name,"board")) name = "product";    out = malloc(sizeof(char*) * count);    if (out == 0) return -1;    for(n = 0; n < count; n++) {        out[n] = strdup(strip(val[n]));        if (out[n] == 0) return -1;    }    fb_queue_require(name, invert, n, out);    return 0;}static void setup_requirements(char *data, unsigned sz){    char *s;    s = data;    while (sz-- > 0) {        if(*s == '\n') {            *s++ = 0;            if (setup_requirement_line(data)) {                die("out of memory");            }            data = s;        } else {            s++;        }    }}void queue_info_dump(void){    fb_queue_notice("--------------------------------------------");    fb_queue_display("version-bootloader", "Bootloader Version...");    fb_queue_display("version-baseband",   "Baseband Version.....");    fb_queue_display("serialno",           "Serial Number........");    fb_queue_notice("--------------------------------------------");}void do_update_signature(zipfile_t zip, char *fn){    void *data;    unsigned sz;    data = unzip_file(zip, fn, &sz);    if (data == 0) return;    fb_queue_download("signature", data, sz);    fb_queue_command("signature", "installing signature");}void do_update(char *fn){    void *zdata;    unsigned zsize;    void *data;    unsigned sz;    zipfile_t zip;    queue_info_dump();    zdata = load_file(fn, &zsize);    if (zdata == 0) die("failed to load '%s'", fn);    zip = init_zipfile(zdata, zsize);    if(zip == 0) die("failed to access zipdata in '%s'");    data = unzip_file(zip, "android-info.txt", &sz);    if (data == 0) {        char *tmp;            /* fallback for older zipfiles */        data = unzip_file(zip, "android-product.txt", &sz);        if ((data == 0) || (sz < 1)) {            die("update package has no android-info.txt or android-product.txt");        }        tmp = malloc(sz + 128);        if (tmp == 0) die("out of memory");        sprintf(tmp,"board=%sversion-baseband=0.66.04.19\n",(char*)data);        data = tmp;        sz = strlen(tmp);    }    setup_requirements(data, sz);    data = unzip_file(zip, "boot.img", &sz);    if (data == 0) die("update package missing boot.img");    do_update_signature(zip, "boot.sig");    fb_queue_flash("boot", data, sz);    data = unzip_file(zip, "recovery.img", &sz);    if (data != 0) {        do_update_signature(zip, "recovery.sig");        fb_queue_flash("recovery", data, sz);    }    data = unzip_file(zip, "system.img", &sz);    if (data == 0) die("update package missing system.img");    do_update_signature(zip, "system.sig");    fb_queue_flash("system", data, sz);}void do_send_signature(char *fn){    void *data;    unsigned sz;    char *xtn;	    xtn = strrchr(fn, '.');    if (!xtn) return;    if (strcmp(xtn, ".img")) return;	    strcpy(xtn,".sig");    data = load_file(fn, &sz);    strcpy(xtn,".img");    if (data == 0) return;    fb_queue_download("signature", data, sz);    fb_queue_command("signature", "installing signature");}void do_flashall(void){    char *fname;    void *data;    unsigned sz;    queue_info_dump();    fname = find_item("info", product);    if (fname == 0) die("cannot find android-info.txt");    data = load_file(fname, &sz);    if (data == 0) die("could not load android-info.txt");    setup_requirements(data, sz);    fname = find_item("boot", product);    data = load_file(fname, &sz);    if (data == 0) die("could not load boot.img");    do_send_signature(fname);    fb_queue_flash("boot", data, sz);    fname = find_item("recovery", product);    data = load_file(fname, &sz);    if (data != 0) {        do_send_signature(fname);        fb_queue_flash("recovery", data, sz);    }    fname = find_item("system", product);    data = load_file(fname, &sz);    if (data == 0) die("could not load system.img");    do_send_signature(fname);    fb_queue_flash("system", data, sz);   }#define skip(n) do { argc -= (n); argv += (n); } while (0)#define require(n) do { if (argc < (n)) usage(); } while (0)int do_oem_command(int argc, char **argv){    int i;    char command[256];    if (argc <= 1) return 0;        command[0] = 0;    while(1) {        strcat(command,*argv);        skip(1);        if(argc == 0) break;        strcat(command," ");    }    fb_queue_command(command,"");        return 0;}int main(int argc, char **argv){    int wants_wipe = 0;    int wants_reboot = 0;    int wants_reboot_bootloader = 0;    void *data;    unsigned sz;    skip(1);    if (argc == 0) {        usage();        return 0;    }    if (!strcmp(*argv, "devices")) {        list_devices();        return 0;    }    while (argc > 0) {        if(!strcmp(*argv, "-w")) {            wants_wipe = 1;            skip(1);        } else if(!strcmp(*argv, "-s")) {            require(2);            serial = argv[1];            skip(2);        } else if(!strcmp(*argv, "-p")) {            require(2);            product = argv[1];            skip(2);        } else if(!strcmp(*argv, "-c")) {            require(2);            cmdline = argv[1];            skip(2);        } else if(!strcmp(*argv, "getvar")) {            require(2);            fb_queue_display(argv[1], argv[1]);            skip(2);        } else if(!strcmp(*argv, "erase")) {            require(2);            fb_queue_erase(argv[1]);            skip(2);        } else if(!strcmp(*argv, "signature")) {            require(2);            data = load_file(argv[1], &sz);            if (data == 0) die("could not load '%s'", argv[1]);            if (sz != 256) die("signature must be 256 bytes");            fb_queue_download("signature", data, sz);            fb_queue_command("signature", "installing signature");            skip(2);        } else if(!strcmp(*argv, "reboot")) {            wants_reboot = 1;            skip(1);        } else if(!strcmp(*argv, "reboot-bootloader")) {            wants_reboot_bootloader = 1;            skip(1);        } else if(!strcmp(*argv, "boot")) {            char *kname = 0;            char *rname = 0;            skip(1);            if (argc > 0) {                kname = argv[0];                skip(1);            }            if (argc > 0) {                rname = argv[0];                skip(1);            }            data = load_bootable_image(kname, rname, &sz, cmdline);            if (data == 0) return 1;            fb_queue_download("boot.img", data, sz);            fb_queue_command("boot", "booting");        } else if(!strcmp(*argv, "flash")) {            char *pname = argv[1];            char *fname = 0;            require(2);            if (argc > 2) {                fname = argv[2];                skip(3);            } else {                fname = find_item(pname, product);                skip(2);            }            if (fname == 0) die("cannot determine image filename for '%s'", pname);            data = load_file(fname, &sz);            if (data == 0) die("cannot load '%s'\n", fname);            fb_queue_flash(pname, data, sz);        } else if(!strcmp(*argv, "flash:raw")) {            char *pname = argv[1];            char *kname = argv[2];            char *rname = 0;            require(3);            if(argc > 3) {                rname = argv[3];                skip(4);            } else {                skip(3);            }            data = load_bootable_image(kname, rname, &sz, cmdline);            if (data == 0) die("cannot load bootable image");            fb_queue_flash(pname, data, sz);        } else if(!strcmp(*argv, "flashall")) {            skip(1);            do_flashall();            wants_reboot = 1;        } else if(!strcmp(*argv, "update")) {            if (argc > 1) {                do_update(argv[1]);                skip(2);            } else {                do_update("update.zip");                skip(1);            }            wants_reboot = 1;        } else if(!strcmp(*argv, "oem")) {            argc = do_oem_command(argc, argv);        } else {            usage();        }    }    if (wants_wipe) {        fb_queue_erase("userdata");        fb_queue_erase("cache");    }    if (wants_reboot) {        fb_queue_reboot();    } else if (wants_reboot_bootloader) {        fb_queue_command("reboot-bootloader", "rebooting into bootloader");    }    usb = open_device();    fb_execute_queue(usb);    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -