Có thể khởi động điện thoại Android từ ổ USB không?


16

Có cách nào để khởi động điện thoại Android * từ ổ USB chạy bằng xe buýt ** không? Nếu vậy, các bước để đạt được điều này là gì?

* Ví dụ: một với chức năng USB OTG.

** Ví dụ một ổ đĩa flash.

Câu trả lời:


22

Hãy làm rõ mục tiêu dự định là gì và tại sao?

Điện thoại Android có bộ tải khởi động riêng và không thể bị ghi đè bằng các phương tiện khác.

Nó không giống như BIOS của PC, nơi bạn có thể chuyển đổi thứ tự khởi động để khởi động từ một số thiết bị nhất định như Network PXE, USB, HDD chính / phụ ..

Biên tập:

Sau các ý kiến ​​dưới đây và liên quan đến câu hỏi của OP

Có cách nào để khởi động điện thoại Android (Ví dụ: có chức năng USB OTG.) Thông qua ổ USB chạy bằng xe buýt

Trình tải khởi động chung (* nằm trên bộ chip) không có kiến ​​thức về USB, v.v., vì lk (Hạt nhân nhỏ) quan tâm nhiều hơn đến việc bẫy phím để tải chuỗi vào phục hồi hoặc khởi động trực tiếp vào môi trường Android (Khi giữ phím Vol + Down trong trường hợp này) - bằng mã giả ( đây là từ ngữ cảnh / khía cạnh của lk, và cũng vậy, các địa chỉ bộ nhớ liên quan đến cách đọc các phân vùng được mã hóa cứng vào lk này vì vậy nó sẽ biết cách xử lý logic! )

Hạt nhân lk là tiêu chuẩn thực tế của Qualcomm cho chipset MSM (Snapdragon) và được các nhà sản xuất như Sony, Motorola, LG, Samsung chấp nhận và có thể được tìm thấy trong nguồn AOSP bên dưới bootable/bootloader.

nếu ( phím Giảm âm lượng được nhấn? ) thì

  • hạt nhân tải chuỗi từ /recoveryphân vùng vào địa chỉ cụ thể trong bộ nhớ và nhảy tới nó và bắt đầu thực thi, trong việc đưa ra môi trường phục hồi

khác

  • chuỗi hạt nhân tải từ /systemphân vùng vào địa chỉ cụ thể trong bộ nhớ và nhảy tới nó và bắt đầu thực thi trong môi trường Android.

kết thúc nếu.

Vì kernel trong lk khá hạn chế, nên xem xét rằng hình ảnh nhị phân của kernel bị đốt cháy trong chip và do đó không có cách nào sửa đổi nó . Và cũng nên được đề cập rằng lk chứa các fastbootgiao thức để chuẩn bị cho nhấp nháy /boot, /recovery, /system/dataphân vùng. Có hai trình tự để khởi động, khởi động chính và khởi động phụ là:

  • Khởi động chính -> lk (tùy thuộc vào kết quả của logic)
  • Đi vào Khởi động phụ -> /boothoặc/recovery

Lưu ý bên lề: Samsung rất thích PBL / SBL (tương ứng là Trình tải khởi động chính và Trình tải khởi động phụ) trong thuật ngữ của họ khi nói đến việc sửa đổi. Điều đáng nói về Samsung, đó là, trong một số thiết bị cầm tay, PBL và SBL có thể được mã hóa (Samsung Wave GT-S8500 là một ví dụ như vậy, trong đó việc chuyển Android sang điều đó gần như không thể thực hiện được vì DRM trong bộ tải khởi động là một cơn ác mộng Tuy nhiên, để đối phó và thực hiện việc sửa đổi nó vô cùng khó khăn, đó là cách làm việc thông qua khai thác trong mã FOTA!)

Đây là lý do tại sao không có các tiện ích bổ sung như chức năng OTG hoặc bất cứ thứ gì khác như giao tiếp nối tiếp, đọc từ SDCard, đồ họa, v.v. vì nó sẽ làm cho hạt nhân lk lớn hơn dự định. Nói cách khác, đó là kích thước hạt nhân nhỏ nhất có thể được chỉ định để thực hiện mã giả ở trên.

Ngoài ra, một cách khác để nhìn vào nó là thế này, và điều này phụ thuộc vào phiên bản Android - USB OTG chức năng là hoàn toàn mang lên trong môi trường Android, tức là khi xuất hiện màn hình chủ quen thuộc, sau đó chức năng OTG được kích hoạt. Thật không may, không phải là trường hợp khi nhìn nó từ quan điểm của lk.

Nếu bạn tò mò, đây là mục Qualcomm trên lk ở trên, một phần của nguồn C nhỏ có lắp ráp ARM và được tìm thấy trong nguồn AOSP của JellyBean trongbootable/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;
}

Vấn đề gà / trứng ở đây: Tôi muốn có câu trả lời cho câu hỏi của mình để thu hẹp các trường hợp sử dụng dựa trên tính khả thi; bạn đang yêu cầu tôi đưa ra các trường hợp sử dụng trước :) Vì vậy, bây giờ tôi chỉ có thể làm rõ (các) mục tiêu của mình một cách mơ hồ. Người ta có thể đạt được mã hóa như toàn bộ ổ đĩa bằng cách khởi động từ ổ USB được mã hóa bằng phần cứng (Lok-It / dataShur / etc), do đó, việc nhập mật mã trên ổ đĩa không cần phải nhập mật khẩu giải mã trên thiết bị Android. Lý tưởng nhất có thể được thực hiện sao cho, khi điện thoại được khởi động, ổ đĩa có thể được gỡ bỏ, để điện thoại vẫn chạy tốt cho đến lần khởi động lại tiếp theo.
sampablokuper

Phải ... Thú vị - chưa bao giờ nghe về trường hợp như vậy - dù sao - tại sao? Thực phẩm cho tư tưởng, nơi bạn sẽ nhập mật mã như vậy? Android ICS trở lên có khả năng mã hóa toàn bộ tập IIRC - Bạn đã không xem xét điều đó chưa?
t0mm13b

Mật mã sẽ được nhập bằng bàn phím tích hợp trong ổ đĩa. (Nếu bạn không biết ý của tôi là gì, hãy tìm các ổ đĩa tôi đã đề cập.) Và vâng, tôi đã xem xét mã hóa tích hợp của Android, nhưng (a) nó không phải là không có nhược điểm (xem, ví dụ như bảo mật. stackexchange.com/q/10529 ; v.gd/6hOcmd ), (b) nó không hoạt động trên tất cả các điện thoại, ngay cả những điện thoại có sẵn ROM ROM + từ các nhà sản xuất (ví dụ: một số mẫu Xperia) và (c) có các loại khác trường hợp sử dụng tiềm năng có thể khởi động điện thoại / máy tính bảng từ thiết bị lưu trữ dung lượng lớn USB là điều mong muốn.
sampablokuper

Thành thật mà nói, điều đó là không thể đạt được, để bắt đầu, không có bộ tải khởi động điện thoại thông minh như vậy, đơn giản, từ quan điểm cấp cao, "tạm dừng" cho đến khi nhập mật mã! Những gì bạn yêu cầu là ở trên và ngoài diễn đàn này và yêu cầu chuyên môn, nếu không, đấu trường thích hợp của bộ tải khởi động tùy chỉnh để đạt được điều này! Để bắt đầu - bộ tải khởi động chung, lk (trong AOSP của nó có khả năng khởi động / bộ nạp khởi động) được Qualcomm áp dụng làm thực tế cho các chipset của họ , được sử dụng bởi Sony, LG, Motorola, để đặt tên cho một vài ... chỉ nói, câu hỏi không mang tính xây dựng!
t0mm13b

2
Nói tóm lại - có zero cách để thực hiện điều đó, bạn dường như quên rằng sự nhấn mạnh vào ý kiến của tôi liên quan đến bootloader và thực tế là điện thoại thông minh không có BIOS là một trong hai .... chỉ nói.
t0mm13b

6

Nó có thể trong một ý nghĩa, tuy nhiên. Với các giới hạn được đề cập trong câu trả lời của @ t0mm13b, có nghĩa là bộ tải khởi động được đề cập (lk) không có khả năng thực hiện việc này. Vì vậy, chúng tôi khởi động hạt nhân tùy chỉnh từ fastboot(để thử nghiệm), khởi động, kích hoạt chức năng OTG và một khi hạt nhân hợp lệ được tìm thấy trên thiết bị OTG được kết nối, tải chuỗi vào bộ nhớ và chuyển điều khiển cho nó. Điều này thậm chí có thể được tích hợp vào các phục hồi tùy chỉnh hiện đại như TWRP có cả OTG và (trong một số trường hợp) hỗ trợ MultiROM.

Điều này thực sự đã được sử dụng để khởi động Ubuntu trên máy tính bảng Nexus 9, sử dụng phương pháp:

  1. fastboot boot <otg_chainloader_kernel>
  2. <otg_chainloader_kernel> khởi động và cho phép OTG và chờ thiết bị OTG được kết nối.
  3. Thiết bị bị ngắt kết nối với PC và ổ flash USB có hình ảnh Ubuntu có thể khởi động được kết nối với nó thông qua OTG.
  4. <otg_chainloader_kernel> phát hiện hạt nhân Linux hợp lệ trên thiết bị OTG và chuyển quyền điều khiển cho nó sau khi tải chuỗi vào bộ nhớ.

Bây giờ, nếu bạn muốn, bạn có thể khởi động hình ảnh ROM Android tương thích theo cách tương tự, nhưng hãy nhớ rằng ổ OTG sẽ phải được kết nối với thiết bị cho đến khi bạn quyết định quay lại HĐH gốc (vì tất cả các ứng dụng sẽ tải từ và tất cả dữ liệu sẽ được ghi vào ổ flash USB, trừ khi toàn bộ ROM Android có thể được cấu hình dưới dạng ramdisk (đã từng nghe về Puppy Linux?), với dung lượng bộ nhớ hiện tại của các thiết bị Android thông thường và kích thước của Bản thân ROM hiện không thực tế). Điều đó cũng ngăn chặn việc sạc trong khi khởi động hệ điều hành OTG, trên hầu hết các thiết bị có cổng dữ liệu / bộ sạc thống nhất.

Nguồn: XDA-Nhà phát triển Nexus 9


Có thể làm điều này cho Android để tôi có thể khởi động bản xem trước N mà không cần cài đặt
Suici Doga

@SuiciDoga, tôi đoán TWRP MultiROM hỗ trợ OTG Boot? Nó sử dụng kỹ thuật trên AFAIK, chỉ cần không có tất cả các fastboots. Bản kexec-hardbootvá cho kernel được sử dụng bởi TWRP MultiROM về cơ bản là cái OTG-Chainloader-Kernelmà tôi nói đến.
Tamoghna Chowdhury

Bây giờ điều đó cũng phụ thuộc vào thiết bị bạn có thể muốn thử bài tập này. Nexus 9 và Nexus Player có TWRP, nhưng điều MultiROM không hoạt động trên chúng (các vấn đề x64 / ARM64?). IDK về Nexii hiện tại, quá.
Tamoghna Chowdhury

0

nó rõ ràng và tôi đã làm nó trên máy tính bảng biểu tượng acer của tôi !!!!

kết nối ổ đĩa flash với máy tính của bạn và định dạng cho fat32 sử dụng rufus để chuyển iso / dd sang ổ đĩa flash của bạn

kết nối nó với otg và vào điện thoại / máy tính bảng của bạn .. giữ phím nguồn và nhấn giảm âm lượng nếu nó không khởi động, hãy thử giữ phím nguồn và nhấn âm lượng lên

sau đó sử dụng các phím âm lượng sẽ chuyển sang UDisk (nhãn hiệu ổ đĩa flash của bạn) hoặc SATA; UDISK (không nhất thiết phải là thương hiệu usb của bạn, nó có thể nói là lưu trữ usb) và nhấp vào phím nguồn để xác nhận

tốt, tôi đã gặp rắc rối thứ bảy với việc khởi động vào menu, vì vậy tôi bằng cách nào đó đã tránh được kernel để khởi động và do đó dừng Android để khởi động

Tôi nghĩ nó giống như thế này: tôi đã kết nối với máy tính, sau đó xóa tất cả các hỗ trợ khỏi máy tính bảng, nhưng sao chép thư mục Android

kernel đã được gỡ bỏ và sau khi boot kết nối trở lại pc với một hub USB

cũng hy vọng tôi đã giúp :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.