USB 드라이브에서 Android 전화를 부팅 할 수 있습니까?


17

버스 전원 공급 USB 드라이브 **에서 Android 전화 *를 부팅 할 수있는 방법이 있습니까? 그렇다면이를 달성하기위한 단계는 무엇입니까?

* 예를 들어 USB OTG 기능이있는 것.

** 예 : 플래시 드라이브.

답변:


23

의도 한 목표가 무엇이며 이유가 무엇입니까?

Android 전화에는 자체 부트 로더가 있으며 다른 방법으로 재정의 할 수 없습니다.

Network PXE, USB, Primary / Secondary HDD와 같은 특정 장치에서 부팅 순서를 전환 할 수있는 PC의 BIOS와 다릅니다.

편집하다:

아래 의견과 OP의 질문과 관련하여

버스 전원 공급 USB 드라이브를 통해 Android 전화 (예 : USB OTG 기능이있는 전화)를 부팅 할 수있는 방법이 있습니까?

lk (리틀 커널)는 복구에 체인로드하거나 Android 환경으로 직접 부팅하기 위해 키 입력 트랩에 더 관심이 있기 때문에 일반적인 부트 로더 (* 칩셋에 상주)는 USB 등에 대한 지식이 없습니다. (이 인스턴스에서 Vol + Down 키를 누른 경우)-의사 코드 ( lk의 컨텍스트 / 가상 에서 가져온 것입니다. 또한 파티션을 읽는 방법과 관련된 메모리 주소는이 lk로 하드 코딩됩니다. 논리를 처리하는 방법을 알고있다! )

lk 커널은 Qualcomm에서 MSM 칩셋 (Snapdragon)에 대한 사실상의 표준이며 Sony, Motorola, LG, Samsung과 같은 제조업체에서 채택한 AOSP 소스에서 찾을 수 있습니다 bootable/bootloader.

경우 (이 볼륨 작게 키를 누르면 있습니까? ) 다음

  • /recovery파티션 에서 커널을 메모리의 특정 주소로 체인로드 하고 복구 환경을 불러 오기 위해 커널 로 점프하여 실행을 시작하십시오.

그밖에

  • /system파티션 에서 커널을 메모리의 특정 주소로 체인로드하고 커널 환경으로 이동하여 Android 환경을 불러옵니다.

경우 종료하십시오.

lk 내의 커널은 꽤 제한적이므로 커널의 이진 이미지가 칩에 태워서 수정하는 방법이 없다는 것을 고려하십시오 . 또한 LK가 포함되어 언급해야 fastboot점멸을 준비 프로토콜 /boot, /recovery, /system/data파티션을. 부팅에는 기본 부팅과 보조 부팅의 두 가지 순서가 있습니다.

  • 기본 부팅-> lk (논리 결과에 따라 다름)
  • 보조 부팅으로 이동-> /boot또는/recovery

참고 사항 : 삼성은 모딩과 관련하여 전문 용어로 PBL / SBL (각각 주 부트 로더 및 보조 부트 로더 임)을 좋아합니다. 삼성에 관한 것은 일부 핸드셋에서 PBL과 SBL이 암호화 될 수 있다는 것입니다. 그럼에도 불구하고 다루기가 매우 어려웠지만 FOTA 코드의 악용을 통해 일종의 작업입니다!)

이것이 OTG 기능과 같은 추가 기능이나 직렬 통신, SDCard에서 읽기, 그래픽 등 lk 커널을 의도 한 것보다 크게 만드는 추가 기능이없는 이유입니다. 다시 말해, 위의 의사 코드가 발생하도록 지정된 것이 가장 작은 크기의 커널입니다.

또한, 보는 또 다른 방법은 이것이다, 이것은 안드로이드 버전에 따라 달라집니다 - OTG 기능이 완벽하게되어있는 USB 가져 친숙한 홈 화면이 나타납니다이 때 안드로이드 환경에서 최대 즉, 다음 OTG의 기능을 사용할 수 있습니다. 불행히도 lk의 관점에서 볼 때 그렇지 않습니다.

궁금한 점이 있다면 위의 lk에 있는 Qualcomm 항목 이 있습니다. 여기 에는 JellyBean의 AOSP 소스에서 ARM 어셈블리가 포함되어있는 작은 C 소스의 일부입니다.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;
}

닭 / 계란 문제는 여기에 : 나는 가능성에 따라 사용 사례를 좁히기 위해 내 질문에 대답을 원했다; 당신은 처음 사용 사례를 제공하기 위해 나 한테 묻는거야 :) 그래서, 나는 단지 지금은 막연하게 내 목표 (들)을 명확히 할 수 있습니다. 하드웨어 암호화 USB 드라이브 (Lok-It / dataShur / etc)에서 부팅하여 전체 디스크 암호화와 같은 sth를 달성 할 수 있으므로 드라이브에 암호를 입력하면 Android 장치에서 암호 해독 암호를 입력 할 필요가 없습니다. 이상적으로는 전화가 부팅되면 드라이브를 제거하여 다음에 다시 부팅 할 때까지 전화가 계속 정상적으로 작동하도록 할 수 있습니다.
sampablokuper

맞아요 .. 흥미 롭습니다. 그런 경우는 들어 본 적이 없습니다. 어쨌든-왜요? 생각할 음식 , 그러한 암호를 어디에 입력 하시겠습니까? Android ICS 이상에는 전체 볼륨 IIRC를 암호화 할 수있는 기능이 있습니다.
t0mm13b

암호는 드라이브에 내장 된 키패드를 사용하여 입력됩니다. (이것이 무엇을 의미하는지 모르는 경우 언급 한 드라이브를 찾으십시오.) 그렇습니다 .Android의 내장 암호화를 살펴 보았지만 (a) 결점이없는 것은 아닙니다 (예 : 보안 참조) . stackexchange.com/q/10529 ; v.gd/6hOcmd ), (b) 모든 전화, 일부 제조업체에서 제공하는 ICS + ROM이있는 전화 (예 : 일부 Xperia 모델) 및 (c) 다른 전화에서도 작동하지는 않습니다. USB 대용량 저장 장치에서 전화 / 태블릿을 부팅 할 수있는 잠재적 사용 사례가 바람직합니다.
sampablokuper

솔직히 말해서, 그것은 달성 할 수 없습니다. 처음에는 패스 코드를 입력 할 때까지 간단히 "일시 정지"하는 스마트 폰 부트 로더가 없습니다! 당신이 요구하는 것은이 포럼의 위와 그 이상이며 이것을 달성하기 위해서는 맞춤형 부트 로더의 틈새 시장이 필요합니다! 시작 용 - 일반 부트 로더, LK (그 AOSP에서 부팅 / 부트 로더에서)으로 채택되어 사실상 퀄컴에 의해 자신의 이름에 소니, LG, 모토로라의 좋아하는에 의해 사용되는 칩셋,하지만 몇 가지 ... 단지 질문은 건설적인 것이 아닙니다!
t0mm13b

2
즉 -이 제로 그 일의 방법, 당신은 단지 말을 .... 부트 로더와 스마트 폰 BIOS가없는 사실에 관하여 내 의견에 대한 강조가 하나의 잊고 것으로 보인다.
t0mm13b

7

그러나 어떤 의미에서는 가능합니다. @ t0mm13b의 답변에 언급 된 제한 사항을 감안할 때 언급 된 부트 로더 (lk)는이 작업을 수행 할 수 없다는 것이 합리적입니다. 따라서 우리는 fastboot(테스트를 위해) 사용자 정의 커널을 부팅하여 부팅하고 OTG 기능을 활성화하며 유효한 커널이 연결되어있는 OTG 장치에서 발견되면 메모리에 체인로드하고 제어를 전달합니다. 이것은 아마도 OTG와 MultiROM을 지원하는 TWRP와 같은 최신 사용자 지정 복구에 통합 될 수도 있습니다.

이것은 실제로 다음 방법을 사용하여 Nexus 9 태블릿에서 Ubuntu를 부팅하는 데 사용되었습니다.

  1. fastboot boot <otg_chainloader_kernel>
  2. <otg_chainloader_kernel> 부팅하고 OTG를 활성화하고 OTG 장치가 연결될 때까지 기다립니다.
  3. 부팅 가능한 Ubuntu 이미지가있는 USB 플래시 드라이브와 PC의 장치 연결이 끊어졌으며 OTG를 통해 장치에 연결되었습니다.
  4. <otg_chainloader_kernel> OTG 장치에서 유효한 Linux 커널을 감지하고 메모리에 체인로드 한 후 제어를 전달합니다.

원하는 경우 비슷한 방식으로 호환되는 Android ROM 이미지를 부팅 할 수 있지만 모든 앱이로드되므로 기본 OS로 돌아갈 때까지 OTG 드라이브는 장치에 연결되어 있어야합니다. 전체 안드로이드 ROM을 램 디스크 (Puppy Linux에 대해 들어 본 적이 있습니까?)로 구성 할 수 없다면 모든 데이터는 USB 플래시 드라이브에 기록됩니다. ROM 자체는 현재 실용적이지 않습니다). 통합 된 데이터 / 충전기 포트가있는 대부분의 장치에서 OTG OS로 부팅하는 동안 충전 할 수 없습니다.

출처 : XDA 개발자 Nexus 9 하위 포럼


Android 용으로이 작업을 수행 할 수 있었으므로 설치하지 않고 N 미리보기를 부팅 할 수 있습니다
Suici Doga

@SuiciDoga, TWRP MultiROM이 OTG Boot를 지원하는 것 같아요? 위의 기술 AFAIK를 모두 사용하지 않고 사용합니다 fastboot. kexec-hardbootTWRP MultiROM에서 사용하는 커널 패치는 기본적으로 인 OTG-Chainloader-Kernel에 대한 I 이야기.
Tamoghna Chowdhury

이제이 연습을 시도 할 장치에 따라 다릅니다. Nexus 9와 Nexus Player에는 TWRP가 있지만 MultiROM은 작동하지 않습니다 (x64 / ARM64 문제?). 현재 Nexii에 대한 IDK.
Tamoghna Chowdhury

0

그것의 가능한 그리고 나는 나의 에이서 iconia 정제에 그것을했다 !!!!

플래시 드라이브를 PC에 연결하고 fat32로 포맷하십시오. rufus를 사용하여 iso / dd를 플래시 드라이브에 이식하십시오

otg와 휴대 전화 / 태블릿에 연결합니다. 부팅되지 않으면 전원 키를 누른 상태에서 볼륨을 줄입니다.

그런 다음 볼륨 키를 사용하여 UDisk (플래시 드라이브 브랜드) 또는 SATA로 이동하십시오. UDISK (USB 브랜드 일 필요는 없습니다. USB 저장소라고 할 수 있습니다) 전원 키를 클릭하여 확인하십시오

글쎄, 나는 메뉴로 부팅하는 데 심각한 문제가 있었기 때문에 어떻게 든 커널이 부팅되는 것을 피하고 안드로이드가 부팅을 멈출 수 없었다.

나는 그것이 같다고 생각합니다 : 나는 PC에 연결 한 다음 태블릿에서 모든 엉덩이를 삭제했지만 안드로이드 폴더를 복사

커널이 제거되었고 부팅 후 USB 허브로 PC에 다시 연결됨

잘 도와 주길 바랍니다 :)


UEFI를 지원하는 일부 SoC 여야합니다. 요즘에는 Android 장치에서 사용되는 SoC가 많지 않아 부팅 순서를 구성 할 수 있습니다.
Irfan Latif
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.