jessie の arm64 debian-installer
イメージではグラフィカルインストーラは有効化されていないため、シリアルコンソールを利用します。コンソールデバイスはファームウェアによって自動的検出されるはずですが、検出されなかった場合は GRUB メニューから linux をブートした後「Booting Linux」メッセージを見ることになります。そうなるともう何も起こりません。
この問題が起きた場合はカーネルコマンドラインで特定のコンソール設定を行う必要があります。GRUB メニューで e
を押して 「Edit Kernel command-line」 に進み、
--- quiet
を
console=<デバイス>,<速度>
、例えば
console=ttyAMA0,115200n8
のように変更します。変更できたら Control+x を押して新しい設定でブートを続けます。
Juno には UEFI があるためインストールは明快です。最も実践的なのはUSBメモリからインストールする方法です。USBでのブートを機能させるためには最新のファームウェアが必要です。2015年3月以降にビルドされた http://releases.linaro.org/latest/members/arm/ でテストが成功しています。ファームウェアの更新については Juno の文書を参照してください。
USBメモリに書き込んだ標準の arm64 CD イメージを用意します。背面のUSBポートに差し込みます。シリアルケーブルを背面の上部にある9ピンのシリアルポートに差し込みます。ネットワーク接続が必要 (netboot イメージ) であればイーサネットケーブルをマシン全面のソケットに差し込んでください。
Run a serial console at 115200, 8bit no parity, and boot the Juno. It should boot from the USB stick to a GRUB menu. The console config is not correctly detected on Juno so just hitting Enter will show no kernel output. Set the console to
console=ttyAMA0,115200n8
(as described in 「コンソール設定」). Control+x to boot should show you the debian-installer
screens, and allow you to proceed with a standard installation.
このマシンでは UEFI が利用できますが、通常は U-Boot を使うようになっているため、UEFI ファームウェアをまずインストールしてから標準のブート/インストールを行う方法か、U-Boot を使ってブートする方法のどちらかが必要です。また、jessie カーネルではUSBをサポートしていないため、USBメモリからのインストールは機能しません。arm64 アーキテクチャではグラフィカルインストーラは有効化されていないため、インストール処理の制御にはシリアルコンソールを使う必要があります。
推奨するインストール方法はマシンに同梱されている openembedded システムを使って debian-installer
カーネルと initrd をハードドライブにコピーし、それをインストーラからブートします。TFTP を使ってカーネル/dtb/initrd をコピーし、ブートする方法 (「U-Boot での TFTP のブート」) もあります。インストールしたイメージからブートするためには、インストール後に手作業での調整が必要です。
シリアルコンソールを 115200、8ビットパリティなしで実行し、マシンをブートします。マシンを再起動して「Hit any key to stop autoboot:」が表示されたら何かキーを押して Mustang# プロンプトに入ります。それから U-Boot のコマンドを使ってカーネル、dtb、initrd を読み込み、ブートします。
ネットワークからの起動には、ネットワーク接続と TFTP ネットワークブートサーバが (自動化でのネットワーク設定には恐らく DHCP, RARP, BOOTP も) 必要です。
ネットワーク起動をサポートするためのサーバ側の準備については、「TFTP ネットブート用ファイルの準備」 で説明します。
U-Boot ファームウェアを採用したシステムでのネットワークブートは3つの段階から構成されます: a) ネットワークの設定、b) イメージ (カーネル/初期RAMディスク/dtb) のメモリへの読み込み、c) 前段階で読み込んだコードを実際に実行。
最初にネットワークを設定する必要があります。DHCP により自動的に設定する場合:
setenv autoload no dhcp
あるいは手作業により複数の環境変数を設定する場合:
setenv ipaddr <クライアントのIPアドレス> setenv netmask <netmask> setenv serverip <tftp サーバのIPアドレス> setenv dnsip <名前サーバのIPアドレス> setenv gatewayip <デフォルトゲートウェイのIPアドレス>
希望により、恒久的な設定にすることもできます:
saveenv
その後はイメージ (カーネル/初期RAMディスク/dtb) をメモリに読み込む必要があります。これは tftpboot コマンドで行いますが、イメージが記憶されているメモリのアドレスを指定する必要があります。残念ながらメモリの割り当てはシステムにより異なる可能性があるため、どのアドレスを利用できるというような原則はありません。
On some systems, U-Boot predefines a set of environment variables with suitable load addresses: kernel_addr_r, ramdisk_addr_r and fdt_addr_r. You can check whether they are defined by running
printenv kernel_addr_r ramdisk_addr_r fdt_addr_r
If they are not defined, you have to check your system's documentation for appropriate values and set them manually. For systems based on Allwinner SunXi SOCs (e.g. the Allwinner A10, architecture name 「sun4i」 or the Allwinner A20, architecture name 「sun7i」), you can e.g. use the following values:
setenv kernel_addr_r 0x46000000 setenv fdt_addr_r 0x47000000 setenv ramdisk_addr_r 0x48000000
読み込むアドレスが定義されていれば
tftpboot ${kernel_addr_r} <カーネルイメージのファイル名> tftpboot ${fdt_addr_r} <dtbのファイル名> tftpboot ${ramdisk_addr_r} <初期RAMディスクイメージのファイル名>
を実行することにより、前に定義した tftp サーバからイメージをメモリに読み込めます。3つ目の部分はカーネルコマンドラインの設定で、読み込んだコードを実際に実行します。U-Boot は 「bootargs」 環境変数の内容をカーネルにコマンドラインとして渡すので、カーネルやインストーラへの任意のパラメータ - 例えばコンソールデバイス (「ブートコンソール」 参照) や preseed のオプション (「Debian Installer パラメータ」 及び 付録B preseed を利用したインストールの自動化 参照) - を
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 イメージをブートする場合、カーネルとdtbを読み込んでから初期RAMディスクイメージを読み込むことが重要となります。U-Boot が最後に読み込んだファイルのサイズを filesize 変数にセットするのと bootz コマンドが正常に動作するためにはRAMディスクイメージのサイズが必要となるためです。プラットフォーム特有のカーネル、つまりデバイスツリー無しでカーネルをブートする場合には ${fdt_addr_r} パラメータは省略できます。