| | 本章では、microSDカードから直接起動(以降「SDブート」と表記します)する手順を示します。
SDブートを活用すると、SDカードを取り替えることでシステムイメージを変更することができます。
本章に示す手順を実行するためには、容量が2Gbyte以上のmicroSDカードを必要とします。
例としてDebian GNU/Linux 10(コードネームbuster)をSDブートする手順を示しますが、他のOSをSDブートすることも可能です。 | |
---|
SDブートを行った場合、ブートローダーの設定はeMMCに保存されます。 |
microSDカードに対する作業は、ATDEで行います。そのため、ATDEにmicroSDカードを接続する必要があります。詳しくは「取り外し可能デバイスの使用」を参照してください。 ATDEにmicroSDカードを接続すると、自動的に/media/ディレクトリにマウントされます。本章に記載されている手順を実行するためには、次のようにmicroSDカードをアンマウントしておく必要があります。 本章で使用するブートローダーイメージファイルの最新版ファイルは、Armadilloサイトでダウンロードすることができます。新機能の追加や不具合の修正などが行われているため、最新バージョンを利用することを推奨します。 ATDEでブートディスクを作成します。ブートディスクの作成に使用するファイルを次に示します。 表14.1 ブートディスクの作成に使用するファイル ファイル | ファイル名 |
---|
ブートローダーイメージ | u-boot-a600-v2018.03-at_[version]_.imx |
表14.2「ブートディスクの構成例」に示します。 表14.2 ブートディスクの構成例 パーティション番号 | パーティションサイズ | ファイルシステム | 説明 |
---|
1 | 128MByte | FAT32 | 第2パーティションにルートファイルシステムを構築するため、第1パーティションを作成します。 | 2 | 残り全て | ext4 | ルートファイルシステムを構築するためにext4ファイルシステムを構築しておきます。 |
ブートローダーイメージファイルを取得し、ATDE内に配置しておきます。
[ATDE ~]$ ls
u-boot-a600-v2018.03-at[version].imx
SDカードに2つのプライマリパーティションを作成します。
[ATDE ~]$ sudo fdisk /dev/sdb
Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): o
Created a new DOS disklabel with disk identifier 0x2b685734.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1):
First sector (2048-7761919, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-7761919, default 7761919): +128M
Created a new partition 1 of type 'Linux' and of size 128 MiB.
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (2-4, default 2):
First sector (264192-7761919, default 264192):
Last sector, +sectors or +size{K,M,G,T,P} (264192-7761919, default 7761919):
Created a new partition 2 of type 'Linux' and of size 3.6 GiB.
Command (m for help): t
Partition number (1,2, default 2): 1
Hex code (type L to list all codes): b
If you have created or modified any DOS 6.x partitions, please see the fdisk documentation for additional information.
Changed type of partition 'Linux' to 'W95 FAT32'.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
[ATDE ~]$ |
SDカードのパーティションテーブル操作を開始します。USBメモリなどを接続している場合は、SDカードのデバイスファイルがsdcやsddなど本実行例と異なる場合があります。
| |
新しく空のDOSパーティションテーブルを作成します。
| |
新しくパーティションを追加します。
| |
パーティション種別にはデフォルト値(p: プライマリ)を指定するので、そのまま改行を入力してください。
| |
パーティション番号にはデフォルト値(1)を指定するので、そのまま改行を入力してください。
| |
開始セクタにはデフォルト値(使用可能なセクタの先頭)を使用するので、そのまま改行を入力してください。
| |
最終シリンダは、128MByte分を指定します。
| |
新しくパーティションを追加します。
| |
パーティション種別にはデフォルト値(p: プライマリ)を指定するので、そのまま改行を入力してください。
| |
パーティション番号にはデフォルト値(2)を指定するので、そのまま改行を入力してください。
| |
開始セクタにはデフォルト値(第1パーティションの最終セクタの次のセクタ)を使用するので、そのまま改行を入力してください。
| |
最終セクタにはデフォルト値(末尾セクタ)を使用するので、そのまま改行を入力してください。
| |
パーティションのシステムタイプを変更します。
| |
第1パーティションを指定します。
| |
パーティションのシステムタイプに0xb(Win95 FAT32)を指定します。
| |
変更をSDカードに書き込みます。
|
パーティションリストを表示し、2つのパーティションが作成されていることを確認してください。
[ATDE ~]$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 3.7 GiB, 3974103040 bytes, 7761920 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2b685734
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 264191 262144 128M b W95 FAT32
/dev/sdb2 264192 7761919 7497728 3.6G 83 Linux
それぞれのパーティションにファイルシステムを構築します。
[ATDE ~]$ sudo mkfs.vfat -F 32 /dev/sdb1
mkfs.fat 3.0.27 (2014-11-12)
[ATDE ~]$ sudo mkfs.ext4 /dev/sdb2
mke2fs 1.42.12 (29-Aug-2014)
Creating filesystem with 937216 4k blocks and 234320 inodes
Filesystem UUID: AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
[ATDE ~]$ |
第1パーティションにFAT32ファイルシステムを構築します。
| |
第2パーティションにext4ファイルシステムを構築します。
|
ブートローダーイメージファイルをmicroSDカードに書き込みます。
[ATDE ~]$ ls
u-boot-a600-v2018.03-at[version].imx
[ATDE ~]$ sudo dd if=u-boot-a600-v2018.03-at[version].imx of=/dev/sdb bs=1k seek=1 conv=fsync
「ブートディスクの作成」で作成したブートディスクにルートファイルシステムを構築します。
Debian GNU/Linuxのルートファイルシステムを構築することができます。ルートファイルシステムの構築に使用するファイルを次に示します。 表14.3 ルートファイルシステムの構築に使用するファイル Linuxディストリビューション | ファイル名 | ファイルの説明 |
---|
Debian GNU/Linux | debian-buster-armhf_a640__[version]_.tar.gz | ARM(armhf)アーキテクチャ用Debian GNU/Linux 10(コードネームbuster)のルートファイルシステムアーカイブ |
14.2.1. Debian GNU/Linuxのルートファイルシステムを構築するDebian GNU/Linuxルートファイルシステムアーカイブから、ルートファイルシステムを構築する手順を次に示します。 14.2.1.1. 手順:Debian GNU/Linuxルートファイルシステムアーカイブからルートファイルシステムを構築する
ルートファイルシステムをブートディスクの第2パーティションに構築します。
[ATDE ~]$ mkdir sd
[ATDE ~]$ sudo mount -t ext4 /dev/sdb2 sd
[ATDE ~]$ sudo tar zxf debian-buster-armhf-a600-[version].tar.gz -C sd
[ATDE ~]$ sudo umount sd
[ATDE ~]$ rmdir sd |
SDカードをマウントするためのsd/ディレクトリを作成します。
| |
第2パーティションをsd/ディレクトリにマウントします。
| |
ルートファイルシステムアーカイブをsd/ディレクトリに展開します。
| |
sd/ディレクトリにマウントしたブートディスクの第2パーティションをアンマウントします。
| |
sd/ディレクトリを削除します。
|
| |
---|
アンマウントが完了する前にSDカードを作業用PCから取り外すと、SDカードのデータが破損する場合があります。 |
14.3. LinuxカーネルイメージとDTBの配置「ブートディスクの作成」で作成したブートディスクにLinuxカーネルイメージおよびDTB(Device Tree Blob)を配置します。使用するファイルを次に示します。
以降、DTB(Device Tree Blob)をDTBと表記します。 表14.4 ブートディスクの作成に使用するファイル ファイル | ファイル名 |
---|
Linuxカーネルイメージ | uImage-a600-v4.14-at_[version]_ | DTB | armadillo-640-v4.14-at_[version]_.dtb |
microSDカードにLinuxカーネルイメージおよびDTBを配置する際は、次の条件を満たすようにしてください。
この条件から外れた場合、ブートローダーがLinuxカーネルイメージまたはDTBを検出することができなくなる場合があります。 表14.5 ブートローダーがLinuxカーネルを検出可能な条件 項目 | 条件 |
---|
ファイルシステム | ext4 | 圧縮形式 | 非圧縮 | Linuxカーネルイメージファイル名 | uImage | DTBファイル名 | a640.dtb |
LinuxカーネルイメージおよびDTBをブートディスクに配置する手順を次に示します。 14.3.1. 手順:LinuxカーネルイメージおよびDTBの配置
LinuxカーネルイメージおよびDTBを準備しておきます。
[ATDE ~]$ ls
uImage-a600-v4.14-at[version] armadillo-640-v4.14-at[version].dtb
Linuxカーネルイメージをブートディスクの第2パーティションに配置します。
[ATDE ~]$ mkdir sd
[ATDE ~]$ sudo mount -t ext4 /dev/sdb2 sd
[ATDE ~]$ sudo cp uImage-a600-v4.14-at[version] sd/boot/uImage
[ATDE ~]$ sudo cp armadillo-640-v4.14-at[version].dtb sd/boot/a640.dtb
[ATDE ~]$ sudo umount sd
[ATDE ~]$ rmdir sd |
SDカードをマウントするためのsd/ディレクトリを作成します。
| |
第2パーティションをsd/ディレクトリにマウントします。
| |
Linuxカーネルイメージをsd/ディレクトリにコピーします。
| |
DTBをsd/ディレクトリにコピーします。
| |
sd/ディレクトリにマウントしたブートディスクの第2パーティションをアンマウントします。
| |
sd/ディレクトリを削除します。
| |
---|
アンマウントが完了する前にSDカードを作業用PCから取り外すと、SDカードのデータが破損する場合があります。 |
|
「ブートディスクの作成」で作成したブートディスクから起動する方法を説明します。 -
Armadilloに電源を投入する前に、ブートディスクをCON1(microSDスロット)に挿入します。また、JP1とJP2を共にジャンパでショートします。
電源を投入します。
U-Boot 2018.03-at8 (Feb 17 2020 - 19:19:11 +0900)
CPU: Freescale i.MX6ULL rev1.0 at 396 MHz
Reset cause: POR
I2C: ready
DRAM: 512 MiB
MMC: FSL_SDHC: 0, FSL_SDHC: 1
Loading Environment from MMC... OK
In: serial
Out: serial
Err: serial
PMIC: PFUZE3000 DEV_ID=0x30 REV_ID=0x11
Net: FEC
=>
ブートディスク上のLinuxカーネルを起動します。
=> setenv bootcmd run setup_mmcargs\; ext4load mmc 1:2 \${loadaddr} /boot/uImage\; ext4load mmc 1:2 0x83000000 /boot/a640.dtb\; bootm \${loadaddr} - 0x83000000\;
=> setenv setup_mmcargs setenv bootargs root=/dev/mmcblk1p2 rootwait \${optargs}\;
=> saveenv
=> boot |
ブートディスク上のLinuxカーネルイメージとDTBを使用するように bootcmd を設定します。
| |
ブートディスク上のルートファイルシステムを使用するように setup_mmcargs を設定します。
| |
環境変数を保存します。
| |
起動します。
|
| bootcmdとsetup_mmcargsをデフォルトの設定に戻す方法 |
---|
bootcmdとsetup_mmcargsをデフォルトの設定に戻すには、次のコマンドを実行します。 => env default bootcmd setup_mmcargs
=> saveenv |
| |
| | | |
| |