この記事では、インテル® SoC FPGA の HPS(ハード・プロセッサー・システム)上で Linux を起動する際に使用する extlinux.conf の書式について説明します。
はじめに
最新(SoC EDS v20.1 以降)の GSRD(Golden System Reference Design)の SD カードブート用イメージには、FAT パーティションに extlinux/extlinux.conf という Linux 起動オプションの指定を含む設定ファイルが含まれています。この記事では、このファイルに記載される内容について説明します。
extlinux.conf を含む最新の SD カードの構成については以下の記事でも紹介しています。
参考:
SoC FPGA ブート用 SD カードイメージの作り方 – 株式会社マクニカ アルティマカンパニー (zendesk.com)
extlinux.conf の書式
extlinux.conf は、ブート用 SD カードの第1パーティション(FAT)直下の extlinux ディレクトリーに格納されるテキストファイルです。予め FAT パーティションに extlinux/extlinux.conf が用意されている場合には、このテキストファイルの内容が Linux Kernel 起動時に適用される仕組みになっています。
以下、実際に GSRD 用の SD カードイメージに含まれている extlinux.conf の内容を掲載します。
例1)Cyclone® V SoC の GSRD に含まれる extlinux.conf
LABEL Linux Default
KERNEL ../zImage
FDT ../socfpga_cyclone5_socdk.dtb
APPEND root=/dev/mmcblk0p2 rw rootwait earlyprintk console=ttyS0,115200n8
例2)Arria® 10 SoC の GSRD に含まれる extlinux.conf
LABEL Arria10 SOCDK SDMMC
KERNEL ../zImage
FDT ../socfpga_arria10_socdk_sdmmc.dtb
APPEND root=/dev/mmcblk0p2 rw rootwait earlyprintk console=ttyS0,115200n8
上の例より、extlinux.conf には LABEL, KERNEL, FDT, APPEND の指定が含まれている事が判ります。
LABEL には、起動する Linux システムを区別するために好きなネーミングを指定可能です。U-Boot が extlinux.conf を処理する際に LABEL の内容が表示されます。
KERNEL には Linux Kernel イメージの所在を extlinux.conf からの相対パスにて指定します。
FDT には Device Tree Blob(.dtb)ファイルの所在を extlinux.conf からの相対パスにて指定します。
最後に、APPEND には Linux Kernel に渡す引数オプションを記述できるようになっています。
ヒント: 上に示した extlinux.conf の書式は一例です。
例えば、下記のように FDT の代わりに FDTDIR という指定を使用した場合は、Device Tree Blob(.dtb)のファイル名までは指定せずに、格納されるディレクトリーだけを指定する事も可能です(この場合は、ファイル名は U-Boot のコンフィグオプションで指定された内容が適用されます)。
LABEL Linux Default
KERNEL ../zImage
FDTDIR ..
APPEND root=/dev/mmcblk0p2 rw rootwait earlyprintk console=ttyS0,115200n8
extlinux.conf の編集
extlinux.conf はテキストファイルとなっているため、設定内容の変更はテキストエディターでファイルを開き、内容を書き換えるのみで編集が可能です。
Linux 起動時のデバイスツリーを一時的に別のファイルへ置き換えたい場合や、Linux Kernel に渡す引数を変更したい場合には、extlinux.conf の書き換えで対応可能となっています。
setenv や editenv コマンドで U-Boot 環境変数を書き換える従来の方法でも対応可能ですが、U-Boot コマンドの操作に不慣れな場合には、こちらの方法での対応が簡単かもしれません。
extlinux.conf 使用時のブートログ
以下、Cyclone® V SoC の GSRD 用 SD カードイメージを使用して Linux をブートする際のログの一部です。紫色太文字で示す部分が extlinux.conf により指定された内容となっています。
Linux Kernel 起動開始(Starting kernel ... )以降の ”Kernel command line: ” のログにて、APPEND による指定と同じ値が Linux Kernel のコマンドライン引数として渡された事も確認できます。
Hit any key to stop autoboot: 2 1 0
:
:
mmc0 is current device
Scanning mmc 0:1...
Found /extlinux/extlinux.conf
Retrieving file: /extlinux/extlinux.conf
121 bytes read in 8 ms (14.6 KiB/s)
1: Linux Default
Retrieving file: /extlinux/../zImage
5048976 bytes read in 266 ms (18.1 MiB/s)
append: root=/dev/mmcblk0p2 rw rootwait earlyprintk console=ttyS0,115200n8
Retrieving file: /extlinux/../socfpga_cyclone5_socdk.dtb
29016 bytes read in 11 ms (2.5 MiB/s)
## Flattened Device Tree blob at 02000000
Booting using the fdt blob at 0x2000000
Loading Device Tree to 09ff5000, end 09fff157 ... OK
Starting kernel ...
Deasserting all peripheral resets
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 5.4.23-altera (oe-user@oe-host) (gcc version 9.2.0 (GCC)) #1 SMP Thu Jun 25 18:23:21 UTC 2020
[ 0.000000] CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] OF: fdt: Machine model: Altera SOCFPGA Cyclone V SoC Development Kit
[ 0.000000] Memory policy: Data cache writealloc
[ 0.000000] percpu: Embedded 18 pages/cpu s44812 r8192 d20724 u73728
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 260608
[ 0.000000] Kernel command line: root=/dev/mmcblk0p2 rw rootwait earlyprintk console=ttyS0,115200n8
まとめ
extlinux.conf については、Web の一般情報を調べても情報が少ない印象です。より詳細に使いこなしたい場合には、U-Boot ソースツリー以下のドキュメントおよびソースコードを調べてみることをお勧めします。