버스 전원 공급 USB 드라이브 **에서 Android 전화 *를 부팅 할 수있는 방법이 있습니까? 그렇다면이를 달성하기위한 단계는 무엇입니까?
* 예를 들어 USB OTG 기능이있는 것.
** 예 : 플래시 드라이브.
버스 전원 공급 USB 드라이브 **에서 Android 전화 *를 부팅 할 수있는 방법이 있습니까? 그렇다면이를 달성하기위한 단계는 무엇입니까?
* 예를 들어 USB OTG 기능이있는 것.
** 예 : 플래시 드라이브.
답변:
의도 한 목표가 무엇이며 이유가 무엇입니까?
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
파티션을. 부팅에는 기본 부팅과 보조 부팅의 두 가지 순서가 있습니다.
/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;
}
그러나 어떤 의미에서는 가능합니다. @ t0mm13b의 답변에 언급 된 제한 사항을 감안할 때 언급 된 부트 로더 (lk)는이 작업을 수행 할 수 없다는 것이 합리적입니다. 따라서 우리는 fastboot
(테스트를 위해) 사용자 정의 커널을 부팅하여 부팅하고 OTG 기능을 활성화하며 유효한 커널이 연결되어있는 OTG 장치에서 발견되면 메모리에 체인로드하고 제어를 전달합니다. 이것은 아마도 OTG와 MultiROM을 지원하는 TWRP와 같은 최신 사용자 지정 복구에 통합 될 수도 있습니다.
이것은 실제로 다음 방법을 사용하여 Nexus 9 태블릿에서 Ubuntu를 부팅하는 데 사용되었습니다.
fastboot boot <otg_chainloader_kernel>
<otg_chainloader_kernel>
부팅하고 OTG를 활성화하고 OTG 장치가 연결될 때까지 기다립니다.<otg_chainloader_kernel>
OTG 장치에서 유효한 Linux 커널을 감지하고 메모리에 체인로드 한 후 제어를 전달합니다.원하는 경우 비슷한 방식으로 호환되는 Android ROM 이미지를 부팅 할 수 있지만 모든 앱이로드되므로 기본 OS로 돌아갈 때까지 OTG 드라이브는 장치에 연결되어 있어야합니다. 전체 안드로이드 ROM을 램 디스크 (Puppy Linux에 대해 들어 본 적이 있습니까?)로 구성 할 수 없다면 모든 데이터는 USB 플래시 드라이브에 기록됩니다. ROM 자체는 현재 실용적이지 않습니다). 통합 된 데이터 / 충전기 포트가있는 대부분의 장치에서 OTG OS로 부팅하는 동안 충전 할 수 없습니다.
fastboot
. kexec-hardboot
TWRP MultiROM에서 사용하는 커널 패치는 기본적으로 인 OTG-Chainloader-Kernel
에 대한 I 이야기.
그것의 가능한 그리고 나는 나의 에이서 iconia 정제에 그것을했다 !!!!
플래시 드라이브를 PC에 연결하고 fat32로 포맷하십시오. rufus를 사용하여 iso / dd를 플래시 드라이브에 이식하십시오
otg와 휴대 전화 / 태블릿에 연결합니다. 부팅되지 않으면 전원 키를 누른 상태에서 볼륨을 줄입니다.
그런 다음 볼륨 키를 사용하여 UDisk (플래시 드라이브 브랜드) 또는 SATA로 이동하십시오. UDISK (USB 브랜드 일 필요는 없습니다. USB 저장소라고 할 수 있습니다) 전원 키를 클릭하여 확인하십시오
글쎄, 나는 메뉴로 부팅하는 데 심각한 문제가 있었기 때문에 어떻게 든 커널이 부팅되는 것을 피하고 안드로이드가 부팅을 멈출 수 없었다.
나는 그것이 같다고 생각합니다 : 나는 PC에 연결 한 다음 태블릿에서 모든 엉덩이를 삭제했지만 안드로이드 폴더를 복사
커널이 제거되었고 부팅 후 USB 허브로 PC에 다시 연결됨
잘 도와 주길 바랍니다 :)