web-dev-qa-db-ja.com

U-Bootを介してUbuntuをARM用に起動する方法は?

U-Bootを介してUbuntuをARM用に起動する方法は?ファームウェアはUブートのみをサポートしています。

1
shaobing wang

ARMおよびU-bootをインストールするための一般的なガイドはありません。ハードウェアメーカーは一般にハードウェアを閉じたままにしたいためです。ハードウェアとハ​​ードウェアのメーカーに完全に依存します。そのハードウェア。

公式ドキュメント セクションを参照してください 5.1 は、u-bootを使用する必要がある場合に設定を識別および調整するための一般的な方法ですが、セクション3.7も参照してください。

3.7の前半:

3.7.1。 U-Bootファームウェアを備えたシステム

前述のとおり、ARMシステムにはシステムファームウェアの標準がありません。名目上同じファームウェアを使用する異なるシステムの動作でさえ、かなり異なる場合があります。これは、 ARMアーキテクチャを使用しているデバイスの大部分は組み込みシステムであり、メーカーは通常、大幅にカスタマイズされたファームウェアバージョンを構築し、デバイス固有のパッチを含めます。残念ながら、メーカーは多くの場合、変更や拡張機能を提出しませんメインラインのファームウェア開発者に戻るため、変更は元のファームウェアの新しいバージョンに統合されません。

その結果、新しく販売されたシステムでさえ、数年前に製造元が変更したファームウェアのバージョンに基づくファームウェアを使用することが多く、その間、メインラインのコードベースは大幅に進化し、追加機能を提供したり、特定の側面で異なる動作を示したりします。さらに、オンボードデバイスの名前は、同じファームウェアのメーカーが変更した異なるバージョン間で一貫していないため、ARMベースのシステムに使用可能な製品に依存しない命令を提供することはほぼ不可能です。

既知のシステムがある場合は、5.1.3.1項でその方法を詳しく説明します。ただし、一般的なガイドラインがあり、特定のケースに合わせて調整する必要がある場合があります。

5.1.3.1。 U-BootでのTFTPブート

U-Bootファームウェアを使用するシステムでのネットワークブートは、次の3つのステップで構成されます。

  • a)ネットワークの構成
  • b)イメージ(カーネル/初期ramdisk/dtb)をメモリにロードする
  • c)以前にロードされたコードを実際に実行する。

まず、ネットワークを構成する必要があります。

setenv autoload no
dhcp

またはいくつかの環境変数を設定して手動で

setenv ipaddr <ip address of the client>
setenv netmask <netmask>
setenv serverip <ip address of the tftp server>
setenv dnsip <ip address of the nameserver>
setenv gatewayip <ip address of the default gateway>

必要に応じて、次のコマンドを実行してこれらの設定を永続的にすることができます

saveenv

その後、イメージ(カーネル/初期ramdisk/dtb)をメモリにロードする必要があります。これは、tftpbootコマンドを使用して行います。このコマンドには、イメージをメモリに格納するアドレスを指定する必要があります。残念ながら、メモリマップはシステムによって異なる可能性があるため、どのアドレスを使用できるかについての一般的な規則はありません。

一部のシステムでは、U-Bootは適切なロードアドレスを使用して環境変数のセットを事前定義します:kernel_addr_r、ramdisk_addr_rおよびfdt_addr_r。あなたが実行することによってそれらが定義されているかどうかを確認できます

printenv kernel_addr_r ramdisk_addr_r fdt_addr_r

定義されていない場合は、システムのドキュメントで適切な値を確認し、手動で設定する必要があります。 Allwinner SunXi SOCに基づくシステム(Allwinner A10、アーキテクチャ名「Sun4i」、Allwinner A20、アーキテクチャ名など)

“Sun7i”), you can e.g. use the follwing values:

setenv kernel_addr_r 0x46000000
setenv fdt_addr_r 0x47000000
setenv ramdisk_addr_r 0x48000000

ロードアドレスが定義されると、以前に定義されたtftpサーバーからイメージをメモリにロードできます。

tftpboot ${kernel_addr_r} <filename of the kernel image>
tftpboot ${fdt_addr_r} <filename of the dtb>
tftpboot ${ramdisk_addr_r} <filename of the initial ramdisk image>

3番目の部分は、カーネルコマンドラインを設定し、ロードされたコードを実際に実行することです。 U-Bootは「bootargs」環境変数の内容をコマンドラインとしてカーネルに渡すため、カーネルお​​よびインストーラーのパラメーター-コンソールデバイス(セクション5.3.1、「ブートコンソール」を参照)または事前シードオプション(セクション5.3.2「Ubuntuインストーラーのパラメーター」および付録B「preseedingを使用したインストールの自動化」を参照)-次のようなコマンドで設定できます。

setenv bootargs console=ttyS0,115200 rootwait panic=10

以前にロードされたコードを実行するための正確なコマンドは、使用されるイメージ形式によって異なります。 uImage/uInitrdでは、コマンドは

bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}

ネイティブLinuxイメージでは

bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}

注:標準のLinuxイメージをブートする場合、U-Bootがfilesize変数を最後にロードされたファイルのサイズに設定し、bootzコマンドがramdiskイメージのサイズを要求するため、カーネルとdtbの後に初期ramdiskイメージをロードすることが重要です正しく動作します。プラットフォーム固有のカーネル、つまりデバイスツリーのないカーネルを起動する場合は、$ {fdt_addr_r}パラメータを省略します。

2
Rinzwind