Android telefonu bir USB sürücüden önyüklemek mümkün müdür?


17

Otobüsle çalışan bir USB sürücüsünden bir Android telefonu * önyüklemenin herhangi bir yolu var mı? Öyleyse, bunu başarmak için atılacak adımlar nelerdir?

* Örneğin USB OTG işlevselliğine sahip bir tane.

** Örneğin bir flash sürücü.

Yanıtlar:


23

Lütfen amaçlanan amaç nedir ve neden açıklayınız?

Android telefonların kendi önyükleme yükleyicileri vardır ve başka yollarla geçersiz kılınamaz.

Network PXE, USB, Birincil / İkincil HDD gibi belirli cihazlardan önyükleme sırasını değiştirebileceğiniz bir bilgisayarın BIOS'u gibi değildir.

Düzenle:

Aşağıdaki yorumlardan sonra ve OP'nin sorusuyla ilgili olarak

Otobüsle çalışan bir USB sürücü yoluyla bir Android telefonu (USB OTG işlevselliğine sahip bir tane) önyüklemenin herhangi bir yolu var mı?

Lk (Küçük Çekirdek) kurtarma işlemine zincirle yükleme veya doğrudan Android ortamına önyükleme yapmak için tuş vuruşlarını yakalama konusunda daha fazla endişe duyduğundan, genel önyükleyicinin (* yonga setinde bulunan *) USB vb. Bilgisi yoktur. (Bu örnekte Vol + Down tuşunu basılı tutarken) - sözde kodda ( bu, lk'nin bağlamından / yönünden ve ayrıca bölümlerin nasıl okunacağına ilişkin bellek adresleri bu lk'ye sabit olarak kodlanır, böylece mantığın nasıl işleneceğini öğrenin! )

Lk çekirdeği Qualcomm tarafından MSM yonga setleri (Snapdragon) tarafından fiili standarttır ve Sony, Motorola, LG, Samsung gibi üreticiler tarafından benimsenmiştir ve altındaki AOSP kaynağında bulunabilir bootable/bootloader.

eğer ( Sesi Azalt tuşuna basıldığında mı? ) sonra

  • /recoverykurtarma ortamını getirirken, çekirdekten bellekteki belirli bir adrese zincir yükü çekirdeği üzerine atlayın ve yürütmeye başlayın

Başka

  • çekirdeği /systembölümden bellekteki belirli bir adrese yükleyin ve ona atlayın ve Android ortamını getirmek için yürütmeye başlayın.

eğer biterse.

Lk içindeki çekirdek oldukça sınırlı olduğundan, çekirdeğin ikili görüntüsünün çipin içine yandığı ve dolayısıyla değiştirmenin bir yolu olmadığı düşünülür . Ve ayrıca lk içerdiğini belirtmek gerekir fastbootyanıp sönen için hazırlık protokolü /boot, /recovery, /systemve /databölümleri. Önyükleme için iki sıra vardır, birincil önyükleme ve ikincil önyükleme olduğu gibi:

  • Birincil Önyükleme -> lk (mantığın sonucuna bağlı olarak)
  • İkincil Önyükleme'ye gidin -> /bootveya/recovery

Yan not: Samsung, modifikasyon söz konusu olduğunda jargonunda PBL / SBL'ye (sırasıyla Birincil Önyükleme Yükleyicisi ve İkincil Önyükleme Yükleyicisi) düşkündür. Samsung hakkında bir şey, bazı el cihazlarında, PBL ve SBL'nin şifrelenebileceği (Samsung Wave GT-S8500, Android'i bir kabus olan önyükleme yükleyicileri içindeki DRM nedeniyle bunun neredeyse imkansız olduğu bir örnektir. Bununla başa çıkmak ve modifikasyonu son derece zorlaştırmak, yine de, FOTA kodunda bir istismar yoluyla çalışmak!)

Bu nedenle OTG işlevselliği veya seri iletişimi, SDCard'dan okuma, grafik vb.Gibi ekstra özellikler yoktur, çünkü lk çekirdeği amaçlanandan daha büyük hale getirir. Başka bir deyişle, sadece yukarıdaki sahte kodun gerçekleşmesi için tasarlanan mümkün olan en küçük çekirdek boyutudur.

Ayrıca, ona bakarak bir başka yolu budur ve bu Android sürümü bağlıdır - OTG işlevselliği tam bir USB getirdi tanıdık ana ekran görüntülenir, ne zaman Android ortamında yukarı, yani daha sonra OTG işlevselliği etkindir. Ne yazık ki lk perspektifinden bakarken durum böyle değil.

Merak ediyorsanız , ARM montajının dahil olduğu ve JellyBean'ın AOSP kaynağında bulunan küçük C kaynağının bir parçası olan yukarıdaki lk'deki Qualcomm girişibootable/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;
}

Tavuk / yumurta sorunu burada: Ben fizibilite dayalı kullanım durumları daraltmak için Sorumun cevabını istedi; benden önce kullanım senaryoları vermemi istiyorsun :) Yani, şimdilik hedeflerimi belirsiz bir şekilde netleştirebilirim. Birincisi, donanım şifreli bir USB sürücüden (Lok-It / dataShur / vb.) Önyükleme yaparak tam disk şifrelemesi gibi bir şey elde etmek olabilir, böylece sürücüde bir parola girilmesi Android cihazında bir şifre çözme parolası girme ihtiyacını ortadan kaldırır. İdeal olarak bu, telefon başlatıldıktan sonra sürücünün çıkarılabilmesi ve bir sonraki yeniden başlatmaya kadar telefonun iyi çalışmasını sağlayacak şekilde yapılabilir.
sampablokuper

Doğru ... İlginç - böyle bir vakayı hiç duymadım - neyse - neden? Düşünce için yiyecek, böyle bir şifre nereye girerdiniz? Android ICS yukarı doğru tüm birimi şifreleme yeteneğine sahiptir IIRC - Buna bakmadınız mı?
t0mm13b

Parola, sürücüye yerleşik tuş takımı kullanılarak girilir. (Bununla ne demek istediğimi bilmiyorsanız, bahsettiğim sürücülere bakın.) Ve evet, Android'in yerleşik şifrelemesine baktım, ancak (a) dezavantajları yok değil (bkz . Örneğin güvenlik. stackexchange.com/q/10529 ; v.gd/6hOcmd ), (b) hatta bu ICS + üreticilerden temin ROM'ları (örneğin bazı Xperia modelleri) ve sahip oldukları (c) diğer vardır, tüm telefonlarda çalışması değil bir USB yığın depolama cihazından bir telefon / tablet önyükleme yapabilmek için potansiyel kullanım durumları arzu edilir.
sampablokuper

Oldukça açık olmak gerekirse, bu mümkün değil, bir başlangıç ​​için, bir şifre girilene kadar, sadece üst düzey perspektiften "duraklatacak" gibi bir akıllı telefon önyükleyicisi yoktur! İstediğiniz şey bu forumun üstünde ve ötesindedir ve bunu başarmak için özel önyükleyicilerin niş arenasını gerektirir! Başlangıç için - jenerik bootloader, lk (onun AOSP içinde önyüklenebilir / bootloader altında) olarak benimsenir fiili için Qualcomm tarafından kendi isim Sony, LG, Motorola sever tarafından kullanılan yonga setleri, ancak birkaç ... sadece söylemek, soru yapıcı değil!
t0mm13b

2
Kısacası - bunu yapmanın sıfır yolu var, bootloader ve akıllı telefonların BIOS'a sahip olmadığı gerçeğiyle ilgili yorumlarımın vurgulandığını da unutuyorsunuz.
t0mm13b 13:13

7

Ancak bir anlamda mümkündür. @ T0mm13b'nin cevabında belirtilen sınırlamalar göz önüne alındığında, bahsedilen önyükleme yükleyicisinin (lk) bunu yapamayacağı mantıklıdır. Bu nedenle, önyükleme yapan fastboot, OTG işlevselliğini sağlayan ve bağlanan OTG cihazında geçerli bir çekirdek bulunduğunda, bunu belleğe yükler ve kontrolü ona geçirir. Bu, muhtemelen hem OTG hem de (bazı durumlarda) MultiROM desteğine sahip TWRP gibi modern özel kurtarmalara entegre edilebilir.

Bu, aslında bir Nexus 9 tablette Ubuntu'yu önyüklemek için kullanılmıştır:

  1. fastboot boot <otg_chainloader_kernel>
  2. <otg_chainloader_kernel> OTG'yi başlatır ve etkinleştirir ve OTG cihazının bağlanmasını bekler.
  3. Aygıtın PC ile bağlantısı kesilmiş ve önyüklenebilir Ubuntu görüntüsü olan USB flash sürücü, OTG aracılığıyla bağlanmıştır.
  4. <otg_chainloader_kernel> OTG cihazında geçerli bir Linux çekirdeği algılar ve belleğe zincir yüklendikten sonra kontrolü ona aktarır.

İsterseniz, uyumlu bir Android ROM görüntüsünü benzer şekilde önyükleyebilirsiniz, ancak yerel işletim sistemine dönmeye karar verene kadar OTG sürücüsünün cihaza bağlı kalması gerektiğini unutmayın (tüm uygulamalar yükleneceğinden) ve tüm Android ROM, yaygın Android cihazların mevcut bellek kapasiteleri ve boyutuna bağlı olarak bir ramdisk (Puppy Linux'u duydunuz mu?) olarak yapılandırılmadıkça tüm veriler USB flash sürücüye yazılır. ROM'un kendisi şu anda pratik değildir). Bu, birleşik veri / şarj cihazı bağlantı noktalarına sahip çoğu cihazda OTG OS'ye önyükleme yapıldığında şarj etmeyi engeller.

Kaynak: XDA-Developers Nexus 9 subforum


Android için bunu yapmak mümkün olabilir, bu yüzden yüklemeden N önizlemesini önyükleyebilirim
Suici Doga

@SuiciDoga, sanırım TWRP MultiROM OTG Boot'u destekliyor mu? Yukarıdaki teknik AFAIK kullanır, sadece hepsi olmadan fastboot. kexec-hardbootTWRP Multirom tarafından kullanılan çekirdek için yama temelde OTG-Chainloader-Kernelhakkında ben konuşmak.
Tamoghna Chowdhury

Şimdi bu da hangi egzersizi denemek isteyebileceğinize bağlı. Nexus 9 ve Nexus Player'da TWRP var, ancak MultiROM olayı bunlar üzerinde çalışmıyor (x64 / ARM64 sorunları?). Mevcut Nexii hakkında da IDK.
Tamoghna Chowdhury

0

onun makul ve benim acer iconia tablet üzerinde yaptım !!!!

pc'nize bir flash sürücü bağlayın ve fat32 formatı iso / dd flash sürücünüze bağlamak için rufus kullanın

otg'a ve telefonunuza / tabletinize bağlayın .. güç tuşunu basılı tutun ve önyükleme yapmazsa ses seviyesini azaltın güç tuşunu basılı tutmaya çalışın ve ses seviyesini artırın

ses seviyesi tuşlarını kullanarak UDisk'e (flash sürücü markanız) veya SATA'ya geçin; UDISK (usb markanız olması gerekmez, usb depolama alanı diyebilir) ve onaylamak için güç tuşuna tıklayın

iyi, menüye önyükleme ile ilgili ciddi bir sorun vardı, bu yüzden bir şekilde önyükleme çekirdeğini önlemek başardı ve bu tarafından önyükleme android durdurmak

bence böyle oldu: PC'ye bağlı, sonra tabletten tüm varlıkları sildi, ancak Android klasörü kopyalama

çekirdek kaldırıldı ve önyükleme sonra bir usb hub ile bilgisayara geri bağlandıktan sonra

umarım yardımcı oldum :)


Bu istisnai bir SoC olmalı, UEFI'yi destekliyor olabilir. Bu günlerde Android cihazlarda kullanılan pek çok SoC, önyükleme sırasını yapılandırmanıza izin veriyor.
Irfan Latif
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.