回答:
意図された目標とその理由を明確にしてください。
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つのシーケンスがあります。
/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;
}
ただし、ある意味では可能です。@ 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ドライブをデバイスに接続したままにする必要があることに注意してください(すべてのアプリが読み込まれるためから、すべてのデータはUSBフラッシュドライブに書き込まれます。ただし、Android ROM全体をRAMディスクとして構成できない場合(Puppy Linuxを聞いたことはありませんか?)、これは一般的なAndroidデバイスの現在のメモリ容量とROM自体は現在非実用的です)。統合データ/充電器ポートを備えたほとんどのデバイスでは、OTG OSでの起動中の充電もできません。
fastboot
s なしで、上記のテクニックAFAIKを使用します。kexec-hardboot
TWRP MultiROMで使用されるカーネルのパッチは、基本的にOTG-Chainloader-Kernel
私が話しているものです。
その可能性と私は私のエイサーアイコニアタブレットでそれをやった!!!!
フラッシュドライブをPCに接続し、fat32にフォーマットします。RUFUSを使用してiso / ddをフラッシュドライブに移植します。
それをOTGに接続し、携帯電話/タブレットに接続します。電源キーを押したままにして、起動しない場合は音量を下げます。電源キーを押しながら音量を上げてみてください。
次に、ボリュームキーを使用してUDisk(フラッシュドライブのブランド)またはSATAに移動します。UDISK(USBブランドである必要はありません、USBストレージと言うことができます)そして電源キーをクリックして確認します
まあ、私はメニューを起動する際に重大な問題を抱えていたので、どういうわけかカーネルの起動を回避し、それによってアンドロイドの起動を停止しました
私はそれがこのようだったと思います:私はPCに接続し、タブレットからすべての昆虫を削除しましたが、Androidフォルダをコピーします
カーネルが削除され、ブート後にUSBハブでPCに接続された
私が助けたことを願っています:)