क्या यूएसबी ड्राइव से एंड्रॉइड फोन को बूट करना संभव है?


17

क्या एक बस-संचालित यूएसबी ड्राइव ** से एक एंड्रॉइड फोन * बूट करने का कोई तरीका है? यदि हां, तो इसे प्राप्त करने के लिए क्या कदम हैं?

* यूएसबी ओटीजी कार्यक्षमता के साथ एक।

** एक फ्लैश ड्राइव।

जवाबों:


23

कृपया स्पष्ट करें कि इच्छित लक्ष्य क्या है और क्यों?

एंड्रॉइड फोन के अपने बूट-लोडर हैं और अन्य तरीकों से इसे ओवरराइड नहीं किया जा सकता है।

यह एक पीसी के BIOS की तरह नहीं है जहां आप कुछ उपकरणों जैसे कि नेटवर्क पीएक्सई, यूएसबी, प्राइमरी / सेकेंडरी एचडीडी से बूट करने के लिए बूट करने का क्रम बदल सकते हैं।

संपादित करें:

नीचे टिप्पणी के बाद, और ओपी के सवाल के संबंध में

क्या एक बस-संचालित यूएसबी ड्राइव के माध्यम से एक एंड्रॉइड फोन (जैसे यूएसबी ओटीजी कार्यक्षमता के साथ।) बूट करने का कोई तरीका है

जेनेरिक बूट-लोडर (* जो चिप-सेट पर रहता है) को USB आदि का कोई ज्ञान नहीं है, क्योंकि lk (लिटिल कर्नेल) चेन-लोड में रिकवरी या सीधे एंड्रॉइड वातावरण में बूट करने के लिए कीस्ट्रोक्स को फंसाने के बारे में अधिक चिंतित है। (जब इस उदाहरण में वॉल्यूम + डाउन की को दबाए रखें) - छद्म-कोड में ( यह lk के संदर्भ / पहलू से है, और यह भी, कि कैसे विभाजन को पढ़ने के लिए संबंधित स्मृति पते इस lk में हार्ड-कोडित हैं इसलिए पता है कि तर्क की प्रक्रिया कैसे करें! )

Lk कर्नेल MSM चिपसेट (स्नैपड्रैगन) के लिए क्वालकॉम द्वारा डी-फैक्टो मानक है और सोनी, मोटोरोला, एलजी, सैमसंग जैसे निर्माताओं द्वारा अपनाया गया है और इसके तहत AOSP स्रोत में पाया जा सकता है bootable/bootloader

अगर ( क्या वॉल्यूम डाउन कुंजी दबाया गया है? ) तो

  • श्रृंखला-लोड कर्नेल को /recoveryविभाजन से विशेष पते में मेमोरी में डाल दिया जाता है और पुनर्प्राप्ति वातावरण को लाने के लिए इसमें कूदना और निष्पादन शुरू करना होता है

अन्य

  • श्रृंखला-लोड कर्नेल को /systemविभाजन से विशेष रूप से स्मृति में संबोधित करते हैं और इसे कूदते हैं और एंड्रॉइड वातावरण को लाने में निष्पादन शुरू करते हैं।

अगर अंत।

जैसा कि lk के भीतर कर्नेल बहुत सीमित है, यह देखते हुए कि कर्नेल की द्विआधारी छवि चिप में जल गई है और इसलिए इसे संशोधित करने का कोई तरीका नहीं है । और यह भी उल्लेखनीय है कि लालकृष्ण शामिल fastbootचमकती के लिए तैयारी में प्रोटोकॉल /boot, /recovery, /systemऔर /dataविभाजन। बूट करने के लिए दो क्रम हैं, प्राथमिक बूट और द्वितीयक बूट जैसा कि यह है:

  • प्राथमिक बूट -> lk (तर्क के परिणाम पर निर्भर करता है)
  • सेकेंडरी बूट में जाएँ -> /bootया/recovery

साइड नोट: सैमसंग पीबीएल / एसबीएल (जो कि प्राथमिक बूट लोडर और सेकेंडरी बूट लोडर क्रमशः है) के शौकीन हैं, जब यह मोडिंग की बात आती है। सैमसंग के बारे में, यह है कि, कुछ हैंडसेट में, PBL और SBL को एन्क्रिप्ट किया जा सकता है (Samsung Wave GT-S8500 एक ऐसा उदाहरण है, जहां बूट लोडर के भीतर DRM के कारण एंड्रॉइड को पोर्ट करना लगभग असंभव था जो एक बुरा सपना था। से निपटने के लिए और इसे बेहद कठिन बना दिया , फिर भी, यह FOTA कोड में एक कारनामे के माध्यम से काम करने की तरह है!)

यही कारण है कि इसमें ओटीजी कार्यक्षमता या अन्य कुछ भी नहीं है, जैसे कि धारावाहिक संचार, एसडीकार्ड, ग्राफिक्स आदि से पढ़ना, क्योंकि यह एलके कर्नेल को उद्देश्य से बड़ा बना देगा। दूसरे शब्दों में, यह कर्नेल का सबसे छोटा संभव आकार है जो केवल उपरोक्त छद्म कोड होने के लिए निर्दिष्ट है।

इसके अलावा, इसे देखने का एक और तरीका यह है, और यह एंड्रॉइड संस्करण पर निर्भर है - यूएसबी ओटीजी कार्यक्षमता पूरी तरह से एंड्रॉइड वातावरण में लाया जाता है, अर्थात जब परिचित होम स्क्रीन दिखाई देती है, तो ओटीजी की कार्यक्षमता सक्षम होती है। दुर्भाग्य से मामला नहीं है जब इसे देखने के दृष्टिकोण से।

यदि आप उत्सुक हैं, तो उपरोक्त lk पर क्वालकॉम प्रविष्टि है जो कि छोटे सी स्रोत का एक हिस्सा है जिसमें ARM असेंबली शामिल है और JellyBean के AOSP स्रोत में पाया गया हैbootable/bootloader/legacy/usbloader/main.c

int boot_linux_from_flash(void)
{
    boot_img_hdr *hdr = (void*) raw_header;
    unsigned n;
    ptentry *p;
    unsigned offset = 0;
    const char *cmdline;

    if((p = flash_find_ptn("boot")) == 0) {
        cprintf("NO BOOT PARTITION\n");
        return -1;
    }

    if(flash_read(p, offset, raw_header, 2048)) {
        cprintf("CANNOT READ BOOT IMAGE HEADER\n");
        return -1;
    }
    offset += 2048;

    if(memcmp(hdr->magic, BOOT_MAGIC, BOOT_MAGIC_SIZE)) {
        cprintf("INVALID BOOT IMAGE HEADER\n");
        return -1;
    }

    n = (hdr->kernel_size + (FLASH_PAGE_SIZE - 1)) & (~(FLASH_PAGE_SIZE - 1));
    if(flash_read(p, offset, (void*) hdr->kernel_addr, n)) {
        cprintf("CANNOT READ KERNEL IMAGE\n");
        return -1;
    }
    offset += n;

    n = (hdr->ramdisk_size + (FLASH_PAGE_SIZE - 1)) & (~(FLASH_PAGE_SIZE - 1));
    if(flash_read(p, offset, (void*) hdr->ramdisk_addr, n)) {
        cprintf("CANNOT READ RAMDISK IMAGE\n");
        return -1;
    }
    offset += n;

    dprintf("\nkernel  @ %x (%d bytes)\n", hdr->kernel_addr, hdr->kernel_size);
    dprintf("ramdisk @ %x (%d bytes)\n\n\n", hdr->ramdisk_addr, hdr->ramdisk_size);

    if(hdr->cmdline[0]) {
        cmdline = (char*) hdr->cmdline;
    } else {
        cmdline = board_cmdline();
        if(cmdline == 0) {
            cmdline = "mem=50M console=null";
        }
    }
    cprintf("cmdline = '%s'\n", cmdline);

    cprintf("\nBooting Linux\n");

    create_atags(ADDR_TAGS, cmdline,
                 hdr->ramdisk_addr, hdr->ramdisk_size);

    boot_linux(hdr->kernel_addr);
    return 0;
}

चिकन / अंडे का मुद्दा यहां: मैं व्यवहार्यता के आधार पर उपयोग के मामलों को कम करने के लिए अपने प्रश्न का उत्तर चाहता था; आप मुझे पहले उपयोग के मामले देने के लिए कह रहे हैं :) इसलिए, मैं केवल अभी के लिए अपने लक्ष्य को स्पष्ट कर सकता हूं। एक हार्डवेयर-एन्क्रिप्टेड यूएसबी ड्राइव (लोक-इट / डेटाशूर / आदि) से बूट करके पूर्ण डिस्क एन्क्रिप्शन की तरह sth को प्राप्त किया जा सकता है, ताकि ड्राइव पर पासकोड दर्ज करने से एंड्रॉइड डिवाइस पर डिक्रिप्शन पासवर्ड दर्ज करने की आवश्यकता समाप्त हो जाए। आदर्श रूप से यह ऐसा किया जा सकता है, जब एक बार फोन बूट हो जाता है, तो ड्राइव को हटाया जा सकता है, जिससे फोन को अगले रिबूट तक ठीक चल रहा है।
सम्पाबलोकुपर

सही ... दिलचस्प है - इस तरह के मामले के बारे में कभी नहीं सुना - वैसे भी - क्यों? भोजन के लिए सोचा, आप इस तरह के पासकोड कहाँ दर्ज करेंगे? एंड्रॉइड आईसीएस ऊपर की तरफ पूरे वॉल्यूम को एन्क्रिप्ट करने की क्षमता है IIRC - क्या आपने उस पर ध्यान नहीं दिया है?
t0mm13b

ड्राइव में निर्मित कीपैड का उपयोग करके पासकोड दर्ज किया जाएगा। (यदि आप नहीं जानते कि मेरा इससे क्या मतलब है, तो मेरे द्वारा बताए गए ड्राइव को देखें।) और हां, मैंने एंड्रॉइड के अंतर्निहित एन्क्रिप्शन में देखा है, लेकिन (ए) यह बिना कमियां के नहीं है (देखें, उदाहरण के लिए सुरक्षा। stackexchange.com/q/10529 ; v.gd/6hOcmd ), (b) यह सभी फोन पर काम नहीं करता है, यहां तक ​​कि जिनके पास ICS + ROM हैं जो निर्माताओं से उपलब्ध हैं (उदाहरण के लिए कुछ Xperia मॉडल), और (c) अन्य भी हैं संभावित उपयोग के मामले जिनके लिए USB मास स्टोरेज डिवाइस से फोन / टैबलेट को बूट करने में सक्षम होना वांछनीय होगा।
सम्पाबलोकुपर

काफी स्पष्ट होने के लिए, यह प्राप्त करने योग्य नहीं है, एक शुरुआत के लिए ऐसा कोई स्मार्टफोन बूटलोडर नहीं है जो बस उच्च स्तर के दृष्टिकोण से, "पॉज़" करेगा जब तक कि एक पासकोड दर्ज नहीं किया जाता है! आप इस मंच से ऊपर और आगे क्या पूछ रहे हैं, इसे प्राप्त करने के लिए कस्टम बूटलोडर्स के आला अखाड़े की आवश्यकता नहीं है, विशेष रूप से आवश्यक है! एक शुरुआत के लिए - जेनेरिक बूटलोडर, lk (इसकी बूट योग्य / बूटलोडर के तहत AOSP में) को उनके चिपसेट के लिए क्वालकॉम द्वारा डी-फैक्टो के रूप में अपनाया जाता है, जिसका उपयोग सोनी, एलजी, मोटोरोला की पसंद के नाम से किया जाता है, लेकिन कुछ ... सिर्फ कह रहा है, सवाल रचनात्मक नहीं है!
t0mm13b

2
संक्षेप में - ऐसा करने का शून्य तरीका है, आप भूल रहे हैं कि बूटलोडर के संबंध में मेरी टिप्पणियों पर जोर दिया गया है और यह तथ्य कि स्मार्टफोन में BIOS या तो नहीं है .... बस कह रहा है।
t0mm13b

7

यह एक मायने में संभव है। @ T0mm13b के उत्तर में उल्लिखित सीमाओं को देखते हुए, यह समझ में आता है कि उल्लिखित बूट लोडर (lk) ऐसा करने में असमर्थ है। इसलिए, हम एक कस्टम कर्नेल को fastboot(परीक्षण के लिए) से बूट करते हैं , जो बूट करता है, OTG कार्यक्षमता को सक्षम करता है और एक बार OTG डिवाइस पर एक वैध कर्नेल पाया जाता है, जो जुड़ा हुआ है, जो मेमोरी में जाता है और इसे नियंत्रित करता है। यह शायद TWRP जैसी आधुनिक कस्टम वसूली में भी एकीकृत किया जा सकता है, जिसमें OTG और (कुछ मामलों में) MultiROM समर्थन दोनों हैं।

यह वास्तव में एक नेक्सस 9 टैबलेट पर उबंटू को बूट करने के लिए उपयोग किया गया है, विधि का उपयोग करते हुए:

  1. fastboot boot <otg_chainloader_kernel>
  2. <otg_chainloader_kernel> बूट और OTG सक्षम करता है और OTG डिवाइस के कनेक्ट होने का इंतजार करता है।
  3. डिवाइस को पीसी और यूएसबी फ्लैश ड्राइव से डिस्कनेक्ट किया गया है जिसमें बूट करने योग्य उबंटू छवि है जो ओटीजी के माध्यम से जुड़ा हुआ है।
  4. <otg_chainloader_kernel> OTG डिवाइस पर एक वैध लिनक्स कर्नेल का पता लगाता है और इसे मेमोरी में चेनलोड करने के बाद इसे नियंत्रित करता है।

अब, यदि आप चाहते हैं, तो आप एक समान तरीके से एक संगत एंड्रॉइड रॉम इमेज को बूट कर सकते हैं, लेकिन याद रखें कि ओटीजी ड्राइव को डिवाइस से कनेक्ट रखना होगा जब तक आप मूल ओएस पर लौटने का फैसला नहीं करते (क्योंकि सभी ऐप लोड होंगे से, और सभी डेटा को USB फ्लैश ड्राइव पर लिखा जाएगा, जब तक कि पूरे एंड्रॉइड रोम को एक रैमडिस्क (कभी पिल्ला लिनक्स के बारे में नहीं सुना?) के रूप में कॉन्फ़िगर किया जा सकता है, जिसने आम एंड्रॉइड डिवाइसों की वर्तमान मेमोरी कैपेसिटी और आकार दिया? ROM वर्तमान में अव्यावहारिक है)। OTG OS को बूट करने के दौरान चार्जिंग को रोकता है, एकीकृत डेटा / चार्जर पोर्ट के साथ अधिकांश उपकरणों पर भी।

स्रोत: एक्सडीए-डेवलपर्स नेक्सस 9 सबफोर्म


क्या एंड्रॉइड के लिए ऐसा करना संभव हो सकता है इसलिए मैं एन प्रीव्यू को इंस्टॉल किए बिना बूट कर सकता हूं
Suici Doga

@SuiciDoga, मुझे लगता है कि TWRP MultiROM OTG बूट का समर्थन करता है? यह उपरोक्त तकनीक AFAIK का उपयोग करता है, बस सभी fastboots के बिना । kexec-hardbootTWRP MultiROM द्वारा प्रयोग किया जाता कर्नेल के लिए पैच मूल रूप से है OTG-Chainloader-Kernelके बारे में मैं बात करते हैं।
तमोग्ना चौधरी

अब यह इस बात पर भी निर्भर करता है कि आप किस उपकरण पर इस अभ्यास को आज़माना चाहते हैं। Nexus 9 और Nexus प्लेयर में TWRP है, लेकिन मल्टीमोन चीज़ उन पर काम नहीं करती है (x64 / ARM64 समस्याएँ!)। वर्तमान Nexii के बारे में IDK, भी।
तमोग्ना चौधरी

0

इसके पॉसिबल और मैंने इसे अपने एसर आइकोनिया टेबलेट पर किया !!!!

अपने फ़्लैश ड्राइव में iso / dd को पोर्ट करने के लिए अपने पीसी के लिए एक फ्लैश ड्राइव को कनेक्ट करें और fat32 का उपयोग करें

इसे ओटीजी से और अपने फोन / टैबलेट में कनेक्ट करें .. पॉवर की को होल्ड करें और वॉल्यूम को टैप करें अगर यह पावर की को होल्ड करने की कोशिश नहीं करता है और वॉल्यूम को टैप करें

तब वॉल्यूम कुंजियों का उपयोग करके UDisk (आपका फ्लैश ड्राइव ब्रांड) या SATA पर चला जाता है; UDISK (इसमें आपका USB ब्रांड नहीं है, इसे usb स्टोरेज कह सकते हैं) और पुष्टि करने के लिए पावर कुंजी पर क्लिक करें

ठीक है, मुझे मेनू में बूट करने में समस्या थी, इसलिए मैं किसी तरह से कर्नेल को बूट करने से बचने में कामयाब रहा और इसके द्वारा एंड्रॉइड को बूट करने के लिए रोक दिया

मुझे लगता है कि यह इस तरह था: मैं पीसी से जुड़ा था, फिर टैबलेट से सभी पुलों को हटा दिया, लेकिन एंड्रॉइड फ़ोल्डर की प्रतिलिपि बना रहा था

कर्नेल को हटा दिया गया था और बूट के बाद पीसी पर एक यूएसबी हब के साथ जुड़ा हुआ था

अच्छी उम्मीद है कि मैं मदद की :)


यह कुछ असाधारण SoC होना चाहिए, UEFI का समर्थन कर सकता है। एंड्रॉइड डिवाइस में इन दिनों उपयोग नहीं किए गए कई SoCs आपको बूट ऑर्डर को कॉन्फ़िगर करने देते हैं।
इरफान लतीफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.