第15章 SDブートの活用

本章では、microSDカードから直接起動(以降「SDブート」と表記します)する手順を示します。SDブートを活用すると、microSDカードを取り替えることでシステムイメージを変更することができます。本章に示す手順を実行するためには、容量が2GByte 以上のmicroSD カードを必要とします。以下では、例としてDebian GNU/Linux 12(コードネーム bookworm)をSDブートする手順を示しますが、他のOSをSDブートすることも可能です。

[ティップ]

SDブートを行った場合、ブートローダーの設定はmicroSDカードに保存されます。

microSDカードに対する作業は、ATDEで行います。そのため、ATDEにmicroSDカードを接続する必要があります。詳しくは「取り外し可能デバイスの使用」を参照してください。

ATDEにmicroSDカードを接続すると、自動的に/media/ディレクトリにマウントされます。本章に記載されている手順を実行するためには、次のようにmicroSDカードをアンマウントしておく必要があります。

[PC ~]$ mount
(省略)
/dev/sdb1 on /media/52E6-5897 type ext2 (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077,codepage=cp437,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks)
[PC ~]$ sudo umount /dev/sdb1

図15.1 自動マウントされたmicroSDカードのアンマウント


本章で使用する最新版のイメージファイルは、"Armadillo サイト"でダウンロードすることができます。新機能の追加や不具合の修正などが行われているため、最新バージョンを利用することを推奨します。

15.1. ブートディスクの作成

ATDEでブートディスクを作成します。ブートディスクの作成に使用するファイルを次に示します。

表15.1 ブートディスクの作成に使用するファイル

ファイルファイル名
ブートローダーイメージu-boot-x1-[version].bin

[ティップ]

u-boot-x1-at16より、SPIフラッシュメモリ用とSD/eMMC用のイメージは統合されました。

表15.2「ブートディスクの構成例」に示すブートディスクを作成する手順を、手順15.1「ブートディスクの作成例」に示します。

表15.2 ブートディスクの構成例

パーティション番号パーティションサイズファイルシステム説明
1128MByteFAT32ブートローダーイメージを配置します。
2残り全てext4ルートファイルシステムを構築するためにext4ファイルシステムを構築しておきます。

手順15.1 ブートディスクの作成例

  1. ブートローダーイメージファイルを取得します。

    [PC ~]$ ls
    u-boot-x1-[version].bin
  2. microSDカードに2つのプライマリパーティションを作成します。

    [PC ~]$ sudo fdisk /dev/sdb  1
    
    Welcome to fdisk (util-linux 2.38.1).
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Command (m for help): o  2
    Created a new DOS (MBR) disklabel with disk identifier 0xe3c3ef46.
    
    Command (m for help): n  3
    Partition type
       p   primary (0 primary, 0 extended, 4 free)
       e   extended (container for logical partitions)
    Select (default p):   4
    
    Using default response p.
    Partition number (1-4, default 1):   5
    First sector (2048-7761919, default 2048):   6
    Last sector, +sectors or +size{K,M,G,T,P} (2048-7761919, default 7761919): +128M  7
    
    Created a new partition 1 of type 'Linux' and of size 128 MiB.
    
    Command (m for help): n  8
    Partition type
       p   primary (1 primary, 0 extended, 3 free)
       e   extended (container for logical partitions)
    Select (default p):   9
    
    Using default response p.
    Partition number (2-4, default 2):   10
    First sector (264192-7761919, default 264192):   11
    Last sector, +sectors or +size{K,M,G,T,P} (264192-7761919, default 7761919):   12
    
    Created a new partition 2 of type 'Linux' and of size 3.6 GiB.
    
    Command (m for help): t  13
    Partition number (1,2, default 2): 1  14
    Hex code (type L to list all codes): b  15
    
    Changed type of partition 'Linux' to 'W95 FAT32'.
    
    Command (m for help): w  16
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.
    
    [PC ~]$ 

    1

    microSDカードのパーティションテーブル操作を開始します。USBメモリなどを接続している場合は、SDカードのデバイスファイルがsdcやsddなど本実行例と異なる場合があります。

    2

    新しく空のDOSパーティションテーブルを作成します。

    3

    新しくパーティションを追加します。

    4

    パーティション種別にはデフォルト値(p: プライマリ)を指定するので、そのまま改行を入力してください。

    5

    パーティション番号にはデフォルト値(1)を指定するので、そのまま改行を入力してください。

    6

    開始セクタにはデフォルト値(使用可能なセクタの先頭)を使用するので、そのまま改行を入力してください。

    7

    最終シリンダは、128MByte分を指定します。

    8

    新しくパーティションを追加します。

    9

    パーティション種別にはデフォルト値(p: プライマリ)を指定するので、そのまま改行を入力してください。

    10

    パーティション番号にはデフォルト値(2)を指定するので、そのまま改行を入力してください。

    11

    開始セクタにはデフォルト値(第1パーティションの最終セクタの次のセクタ)を使用するので、そのまま改行を入力してください。

    12

    最終セクタにはデフォルト値(末尾セクタ)を使用するので、そのまま改行を入力してください。

    13

    パーティションのシステムタイプを変更します。

    14

    第1パーティションを指定します。

    15

    パーティションのシステムタイプに0xb(Win95 FAT32)を指定します。

    16

    変更をmicroSDカードに書き込みます。

  3. パーティションリストを表示し、2つのパーティションが作成されていることを確認してください。

    [PC ~]$ 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
  4. それぞれのパーティションにファイルシステムを構築します。

    [PC ~]$ sudo mkfs.vfat -F 32 /dev/sdb1  1
    mkfs.fat 4.2 (2021-01-31)
    [PC ~]$ sudo mkfs.ext4 /dev/sdb2  2
    mke2fs 1.47.0 (5-Feb-2023)
    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 
    
    [PC ~]$

    1

    第1パーティションにFAT32ファイルシステムを構築します。

    2

    第2パーティションにext4ファイルシステムを構築します。

  5. SDブート用のブートローダーイメージファイルをmicroSDカードに書き込みます。

    [PC ~]$ ls
    u-boot-x1-sd-[version].bin
    [PC ~]$ sudo dd if=u-boot-x1-[version].bin of=/dev/sdb bs=1k skip=1 seek=1

15.2. ルートファイルシステムの構築

「ブートディスクの作成」で作成したブートディスクにルートファイルシステムを構築します。

Debian GNU/Linuxのルートファイルシステムを構築することができます。ルートファイルシステムの構築に使用するファイルを次に示します。

表15.3 ルートファイルシステムの構築に使用するファイル

Linuxディストリビューションファイル名ファイルの説明
Debian GNU/Linuxdebian-bookworm-armhf_aiotg3l_[version].tar.gzARM(armhf)アーキテクチャ用 Debian GNU/Linux 12(コードネーム bookworm)のルートファイルシステムアーカイブ

15.2.1. Debian GNU/Linuxのルートファイルシステムを構築する

Debian GNU/Linuxルートファイルシステムアーカイブから、ルートファイルシステムを構築する手順を次に示します。

手順15.2 Debian GNU/Linuxルートファイルシステムアーカイブからルートファイルシステムを構築する

  1. Debian GNU/Linuxルートファイルシステムアーカイブを準備しておきます。

    [PC ~]$ ls
    debian-bookworm-armhf_aiotg3l_[version].tar.gz
  2. ルートファイルシステムをブートディスクの第2パーティションに構築します。tar zxfコマンドによる展開は、数十秒程度かかります。

    [PC ~]$ mkdir sd  1
    [PC ~]$ sudo mount -t ext4 /dev/sdb2 sd  2
    [PC ~]$ sudo tar zxf debian-bookworm-armhf_aiotg3l_[version].tar.gz -C sd  3
    [PC ~]$ sudo umount sd  4
    [PC ~]$ rmdir sd 5

    1

    microSDカードをマウントするためのsd/ディレクトリを作成します。

    2

    第2パーティションをsd/ディレクトリにマウントします。

    3

    ルートファイルシステムアーカイブをsd/ディレクトリに展開します。

    4

    sd/ディレクトリにマウントしたブートディスクの第2パーティションをアンマウントします。

    5

    sd/ディレクトリを削除します。

    [警告]

    アンマウントが完了する前にmicroSDカードを作業用PCから取り外すと、microSDカードのデータが破損する場合があります。

15.3. LinuxカーネルイメージとDTBの配置

「ブートディスクの作成」で作成したブートディスクにLinuxカーネルイメージおよびDTB(Device Tree Blob)を配置します。使用するファイルを次に示します。以降、DTB(Device Tree Blob)をDTBと表記します。

表15.4 ブートディスクの作成に使用するファイル

ファイルファイル名
LinuxカーネルイメージuImage-x1-[version]
DTBarmadillo_iotg_g3l-[version].dtb

microSDカードにLinuxカーネルイメージおよびDTBを配置する際は、次の条件を満たすようにしてください。この条件から外れた場合、ブートローダーがLinuxカーネルイメージまたはDTBを検出することができなくなる場合があります。

表15.5 ブートローダーがLinuxカーネルを検出可能な条件

項目条件
ファイルシステムFAT32
圧縮形式非圧縮
Linuxカーネルイメージファイル名uImage
DTBファイル名armadillo_iotg_g3l.dtb

LinuxカーネルイメージおよびDTBをブートディスクに配置する手順を次に示します。

手順15.3 LinuxカーネルイメージおよびDTBの配置

  1. LinuxカーネルイメージおよびDTBを準備しておきます。

    [PC ~]$ ls
    uImage-x1-[version]  armadillo_iotg_g3l-[version].dtb
  2. Linuxカーネルイメージをブートディスクの第1パーティションに配置します。

    [PC ~]$ mkdir sd  1
    [PC ~]$ sudo mount -t vfat /dev/sdb1 sd  2
    [PC ~]$ sudo cp uImage-x1-[version] sd/uImage  3
    [PC ~]$ sudo cp armadillo_iotg_g3l-[version].dtb sd/armadillo_iotg_g3l.dtb  4
    [PC ~]$ sudo umount sd  5
    [PC ~]$ rmdir sd  6

    1

    microSDカードをマウントするためのsd/ディレクトリを作成します。

    2

    第2パーティションをsd/ディレクトリにマウントします。

    3

    Linuxカーネルイメージをsd/ディレクトリにコピーします。

    4

    DTBをsd/ディレクトリにコピーします。

    5

    sd/ディレクトリにマウントしたブートディスクの第2パーティションをアンマウントします。

    6

    sd/ディレクトリを削除します。

    [警告]

    アンマウントが完了する前にmicroSDカードを作業用PCから取り外すと、microSDカードのデータが破損する場合があります。

15.4. SDブートの実行

「ブートディスクの作成」で作成したブートディスクから起動する方法を説明します。

Armadilloに電源を投入する前に次の準備を行います。

  1. microSDスロット(メインユニットCON12)にブートディスクを接続します。

  2. JP1をショートに設定します。

準備が完了後、電源を投入するとSDブートさせることができます。SDブートに成功した場合、図15.2「SDブート時の起動ログ」のように「Boot Source: SD」と表示されます。

U-Boot 2016.07-at17 (Jul 25 2018 - 19:00:03 +0900)
CPU:   Freescale i.MX7D rev1.2 at 996MHz
CPU:   Extended Commercial temperature grade (-20C to 105C) at 40C
Reset cause: POR
       Watchdog enabled
I2C:   ready
DRAM:  512 MiB
Boot Source: SD
... 省略 ..

図15.2 SDブート時の起動ログ


[警告]

U-Boot v2016.07-at4(イメージファイル名: u-boot-x1-at4.bin)以前をご利用の場合、Boot Sourceは表示されません。

[警告]

SDカードのライトプロテクションスイッチは無効にしてください。SDカードに書き込みが出来ない場合、SDブートを正常に行うことができません。

ログイン後、dfコマンドを実行するとルートファイルシステムが/dev/mmcblk0p2(SDカード: パーティション2)になっていることがわかります。

[armadillo ~]$ df
Filesystem     1K-blocks   Used Available Use% Mounted on
udev               10240      0     10240   0% /dev
tmpfs              99952   3184     96768   4% /run
/dev/mmcblk0p2  30218100 915272  27744764   4% /
... 省略 ...

図15.3 ログイン後のdfコマンド実行結果