AndroidドライブをUSBドライブから起動することはできますか?


16

バスパワーのUSBドライブ**からAndroidフォン*を起動する方法はありますか?もしそうなら、これを達成するための手順は何ですか?

*例えば、USB OTG機能を備えたもの。

**フラッシュドライブなど。

回答:


22

意図された目標とその理由を明確にしてください。

Androidフォンには独自のブートローダーがあり、他の方法でオーバーライドすることはできません。

ネットワークPXE、USB、プライマリ/セカンダリHDDなどの特定のデバイスから起動するように起動の順序を切り替えることができるPCのBIOSとは異なります。

編集:

以下のコメントの後、OPの質問に関連して

バスパワーのUSBドライブ経由でAndroidスマートフォン(USB OTG機能を備えたものなど)を起動する方法はありますか

一般的なブートローダー(*はチップセットにあります)はUSBなどを認識しません。LK(リトルカーネル)は、回復にチェーンロードするため、またはAndroid環境に直接ブートするためにキーストロークをトラップすることをより重視します。 (このインスタンスでVol + Downキーを保持する場合)-擬似コード(これはlkのコンテキスト/アスペクトからのものです。また、パーティションの読み取り方法に関係するメモリアドレスはこのlkにハードコードされているため、ロジックの処理方法を知ってください!

lkカーネルは、MSMチップセット(Snapdragon)用のQualcommによる事実上の標準であり、Sony、Motorola、LG、Samsungなどのメーカーによって採用されており、AOSPのソースにありbootable/bootloaderます。

ifボリュームダウンキーが押されていますか?then

  • カーネルを/recoveryパーティションからメモリ内の特定のアドレスにチェーンロードし、そこにジャンプして実行を開始し、復旧環境を立ち上げます

そうしないと

  • カーネルを/systemパーティションからメモリ内の特定のアドレスにチェーンロードし、そこにジャンプしてAndroid環境を立ち上げて実行を開始します。

終了する場合。

lk内のカーネルはかなり制限されているため、カーネルのバイナリイメージがチップに焼き付けられ、それを変更する方法がないことを考慮してください。そしてまた、LKが含まれていることに言及しなければならないfastboot点滅の準備のためのプロトコルを/boot/recovery/systemおよび/dataパーティション。ブートには、プライマリブートとセカンダリブートの2つのシーケンスがあります。

  • プライマリブート-> lk(ロジックの結果による)
  • セカンダリブートに移動-> /bootまたは/recovery

サイドノート:サムスンは、改造に関しては専門用語でPBL / SBL(それぞれプライマリブートローダーとセカンダリブートローダー)が好きです。サムスンについては、一部の携帯電話では、PBLとSBLが暗号化されている可能性があります(Samsung Wave GT-S8500はそのような例の1つであり、Androidへの移植は、悪夢であったブートローダー内のDRMによりほとんど不可能でした)それに対処し、改造を非常に困難にしましたが、それでもFOTAコードのエクスプロイトを介して動作しています!)

これが、OTG機能や、シリアル通信、SDCardからの読み取り、グラフィックスなど、lkカーネルを意図したよりも大きくするような追加機能がない理由です。言い換えれば、上記の擬似コードを実行するように指定されているのは、カーネルの最小サイズです。

また、それを見て別の方法がこれです、これはAndroidのバージョンに依存している- USB OTG機能が十分にされて持ち込ま Androidの環境の中まで、すなわち時におなじみのホーム画面が表示され、その後、 OTGの機能が有効になっています。残念ながら、lkの観点から見るとそうではありません。

好奇心が強い方は、上記のlkにあるQualcommエントリがあります。これは、ARMアセンブリが含まれ、JellyBeanのAOSPソースにある小さな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;
}

チキン/卵の問題がここに:私は、実現可能性に基づいてユースケースを絞り込むために、私の質問への答えを望んでいました。あなたは、第1の使用例を与えるために私を求めている:)ので、私は今だけのために漠然と私の目標(複数可)を明確にすることができます。ハードウェアで暗号化されたUSBドライブ(Lok-It / dataShur / etc)から起動することにより、フルディスク暗号化のようなsthを達成することができます。そのため、ドライブにパスコードを入力すると、Androidデバイスで復号化パスワードを入力する必要がなくなります。理想的には、電話が起動したらドライブを取り外して、次の再起動まで電話が正常に動作するようにすることができます。
サンパブロクパー

右...興味深い-そのようなケースを聞いたことがない-とにかく-なぜですか?思考のための食品、あなたがそのようなパスコードを入力しますでしょうか?Android ICSには、ボリュームIIRC全体を暗号化する機能があります-これを検討していませんか?
t0mm13b

パスコードは、ドライブに組み込まれたキーパッドを使用して入力されます。(これがどういう意味かわからない場合は、私が言及したドライブを調べてください。)はい、Androidの組み込み暗号化を調べましたが、(a)欠点がないわけではありません(セキュリティなどを参照)。 stackexchange.com/q/10529 ; v.gd/6hOcmd)、(b)すべての電話、メーカーから入手可能なICS + ROMを搭載した電話(一部のXperiaモデルなど)でも動作しない、および(c)他のものがあるUSB大容量記憶装置から電話/タブレットを起動できることが望ましいユースケース。
サンパブロクパー

率直に言って、それは達成できません。最初は、パスコードが入力されるまで、単に高レベルの観点から「一時停止」するようなスマートフォンブートローダーはありません。あなたが求めているのはこのフォーラム以上であり、これを達成するには、カスタムブートローダーのニッチな分野ではないにしても、専門的な分野が必要です!まず、一般的なブートローダーであるlk(ブート可能/ブートローダーの下のAOSP内)は、ソニー、LG、モトローラなどが使用しているチップセットのデファクトとしてクアルコムに採用されています。ただ、質問は建設的ではありません!
t0mm13b

2
要するに-そこにあるゼロのことを行う方法、あなただけ言って....ブートローダやスマートフォンは、BIOS持っていないという事実に関連して私のコメントに重点がどちらかだということを忘れているようです。
t0mm13b

6

ただし、ある意味では可能です。@ t0mm13bの回答で言及された制限を考えると、言及されたブートローダー(lk)がこれを実行できないことは理にかなっています。そのfastbootため、(テスト用)からカスタムカーネルを起動します。これにより、起動し、OTG機能が有効になり、接続されているOTGデバイスで有効なカーネルが見つかると、それをメモリにチェーンロードし、制御を渡します。これはおそらく、OTGと(場合によっては)MultiROMの両方をサポートするTWRPなどの最新のカスタムリカバリに統合することもできます。

これは実際、次の方法を使用して、Nexus 9タブレットでUbuntuを起動するために使用されています。

  1. fastboot boot <otg_chainloader_kernel>
  2. <otg_chainloader_kernel> OTGを起動して有効にし、OTGデバイスが接続されるのを待ちます。
  3. デバイスはPCから切断され、ブート可能なUbuntuイメージを持つUSBフラッシュドライブがOTGを介して接続されます。
  4. <otg_chainloader_kernel> OTGデバイスで有効なLinuxカーネルを検出し、メモリにチェーンロードした後に制御を渡します。

必要に応じて、互換性のあるAndroid ROMイメージを同様の方法で起動できますが、ネイティブOSに戻ることを決定するまでOTGドライブをデバイスに接続したままにする必要があることに注意してください(すべてのアプリが読み込まれるためから、すべてのデータはUSBフラッシュドライブに書き込まれます。ただし、Android ROM全体をRAMディスクとして構成できない場合(Puppy Linuxを聞いたことはありませんか?)、これは一般的なAndroidデバイスの現在のメモリ容量とROM自体は現在非実用的です)。統合データ/充電器ポートを備えたほとんどのデバイスでは、OTG OSでの起動中の充電もできません。

出典:XDA-Developers Nexus 9サブフォーラム


私はインストールせずにNプレビューを起動することができますので、Androidのためにこれを行うことは可能だろう
Suiciドーガ

@ SuiciDoga、TWRP MultiROMはOTGブートをサポートしていると思いますか?これは、すべてのfastboots なしで、上記のテクニックAFAIKを使用します。kexec-hardbootTWRP MultiROMで使用されるカーネルのパッチは、基本的にOTG-Chainloader-Kernel私が話しているものです。
タモグナチョードリー

これは、このエクササイズを試してみたいデバイスによっても異なります。Nexus 9とNexus PlayerにはTWRPがありますが、MultiROMの機能はそれらで動作しません(x64 / ARM64の問題?)。現在のNexiiに関するIDKも。
タモニアチョードリー

0

その可能性と私は私のエイサーアイコニアタブレットでそれをやった!!!!

フラッシュドライブをPCに接続し、fat32にフォーマットします。RUFUSを使用してiso / ddをフラッシュドライブに移植します。

それをOTGに接続し、携帯電話/タブレットに接続します。電源キーを押したままにして、起動しない場合は音量を下げます。電源キーを押しながら音量を上げてみてください。

次に、ボリュームキーを使用してUDisk(フラッシュドライブのブランド)またはSATAに移動します。UDISK(USBブランドである必要はありません、USBストレージと言うことができます)そして電源キーをクリックして確認します

まあ、私はメニューを起動する際に重大な問題を抱えていたので、どういうわけかカーネルの起動を回避し、それによってアンドロイドの起動を停止しました

私はそれがこのようだったと思います:私はPCに接続し、タブレットからすべての昆虫を削除しましたが、Androidフォルダをコピーします

カーネルが削除され、ブート後にUSBハブでPCに接続された

私が助けたことを願っています:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.