USBブートの活用

本章では、USB メモリから起動(以降「USB ブート」と表記します)する手順を示します。

[警告]

USB ブート時、 eMMC のブートローダーを利用しています。その為、eMMC のブートローダーの修復は USB ブートではできません。 eMMC ブートローダーの復旧は SD ブートで実施ください。SD ブートに関する詳細は、16章SDブートの活用を参照ください。

USBブートを活用すると、USBメモリを取り替えることでシステムイメージを変更することができます。 本章に示す手順を実行するためには、容量が2Gbyte以上のUSBメモリを必要とします。 例としてDebian GNU/Linux 10(コードネームbuster)をUSBブートする手順を示しますが、他のOSをUSBブートすることも可能です。

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

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

[ATDE ~]$ mount
(省略)
/dev/sdb1 on /media/atmark/D07E-969E type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)
[ATDE ~]$ sudo umount /dev/sdb1

図15.1 自動マウントされたUSBメモリのアンマウント


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

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

ATDEでブートディスクを作成します。

表15.1「ブートディスクの構成例」に示します。

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

パーティション番号パーティションサイズファイルシステム説明

1

128MByte

FAT32

第2パーティションにルートファイルシステムを構築するため、第1パーティションを作成します。

2

残り全て

ext4

ルートファイルシステムを構築するためにext4ファイルシステムを構築しておきます。


15.1.1. 手順:ブートディスクの作成例

  1. USBメモリに2つのプライマリパーティションを作成します。

    [ATDE ~]$ sudo fdisk /dev/sdb  1
    
    Welcome to fdisk (util-linux 2.33.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 disklabel with disk identifier 0xc659ba45
    
    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-60868607, default 2048):   6
    Last sector, +sectors or +size{K,M,G,T,P} (2048-60868607, default 60868607): +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-60868607, default 264192):   11
    Last sector, +sectors or +size{K,M,G,T,P} (264192-60868607, default 60868607):   12
    
    Created a new partition 2 of type 'Linux' and of size 28.9 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.
    
    [ATDE ~]$

    1

    USBメモリのパーティションテーブル操作を開始します。他にリムバーブルデバイスなどを接続している場合は、USBメモリのデバイスファイルが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

    変更をUSBメモリに書き込みます。

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

    [ATDE ~]$ sudo fdisk -l /dev/sdb
    
    Disk /dev/sdb: 29 GiB, 31164727296 bytes, 60868608 sectors
    Disk model: USB DISK
    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: 0xc659ba45
    
    Device     Boot  Start      End  Sectors  Size Id Type
    /dev/sdb1         2048   264191   262144  128M  b W95 FAT32
    /dev/sdb2       264192 60868607 60604416 28.9G 83 Linux
  3. それぞれのパーティションにファイルシステムを構築します。

    [ATDE ~]$ sudo mkfs.vfat -F 32 /dev/sdb1  1
    mkfs.fat 4.1 (2017-01-24)
    [ATDE ~]$ sudo mkfs.ext4 /dev/sdb2  2
    mke2fs 1.44.5 (15-Dec-2018)
    Creating filesystem with 7575552 4k blocks and 1896832 inodes
    Filesystem UUID: 0eb75985-a5c5-497c-8939-a3f96be2000e
    Superblock backups stored on blocks:
            32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
            4096000
    
    Allocating group tables: done
    Writing inode tables: done
    Creating journal (32768 blocks): done
    Writing superblocks and filesystem accounting information: done
    
    [ATDE ~]$

    1

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

    2

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

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

「ブートディスクの作成」で作成したブートディスクにルートファイルシステムを構築します。 Debian GNU/Linuxのルートファイルシステムを構築することができます。ルートファイルシステムの構築に使用するファイルを次に示します。

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

Linuxディストリビューションファイル名ファイルの説明

Debian GNU/Linux

debian-buster-armhf-aiota6-[version].tar.gz

ARM(armhf)アーキテクチャ用Debian GNU/Linux 10(コードネームbuster)のルートファイルシステムアーカイブ


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

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

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

  1. ルートファイルシステムをブートディスクの第2パーティションに構築します。

    [ATDE ~]$ mkdir work  1
    [ATDE ~]$ sudo mount -t ext4 /dev/sdb2 work  2
    [ATDE ~]$ sudo tar zxf debian-buster-armhf-aiota6-[version].tar.gz -C work  3
    [ATDE ~]$ sudo umount work  4
    [ATDE ~]$ rmdir work 5

    1

    USBメモリをマウントするためのwork/ディレクトリを作成します。

    2

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

    3

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

    4

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

    5

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

[警告]

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

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

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

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

ファイルファイル名

Linuxカーネルイメージ

uImage-aiotg-a6-v4.14-at_[version]_

DTB

armadillo-iot-a6-v4.14-at_[version]_.dtb


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

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

項目条件

ファイルシステム

ext4

圧縮形式

非圧縮

Linuxカーネルイメージファイル名

uImage

DTBファイル名

a640.dtb


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

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

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

    [ATDE ~]$ ls
    uImage-aiotg-a6-v4.14-at[version]  armadillo-iotg-a6-v4.14-at[version].dtb
  2. Linuxカーネルイメージをブートディスクの第2パーティションに配置します。

    [ATDE ~]$ mkdir work  1
    [ATDE ~]$ sudo mount -t ext4 /dev/sdb2 work  2
    [ATDE ~]$ sudo cp uImage-aiotg-a6-v4.14-at[version] work/boot/uImage  3
    [ATDE ~]$ sudo cp armadillo-iotg-a6-v4.14-at[version].dtb work/boot/a640.dtb  4
    [ATDE ~]$ sudo umount work  5
    [ATDE ~]$ rmdir work  6

    1

    USBメモリをマウントするためのwork/ディレクトリを作成します。

    2

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

    3

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

    4

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

    5

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

    6

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

    [警告]

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

15.4. USBブートの実行

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

  1. Armadilloに電源を投入する前に、ブートディスクをCON5(USB Type-A コネクタ)に挿入します。
  2. SW1(ユーザースイッチ)を押しながら電源を投入します。

    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_USBHC: 0, FSL_USBHC: 1
    Loading Environment from MMC... OK
    In:    serial
    Out:   serial
    Err:   serial
    PMIC: PFUZE3000 DEV_ID=0x30 REV_ID=0x11
    Net:   FEC
    =>
  3. 以下のコマンドを入力し USB メモリからの起動を実行します。

    => run usbboot
  4. 以下のようにログが表示され USB メモリからの起動が実行されます。

    starting USB...
    USB0:   USB EHCI 1.00
    scanning bus 0 for devices... 1 USB Device(s) found
    USB1:   USB EHCI 1.00
    scanning bus 1 for devices... 2 USB Device(s) found
           scanning usb for storage devices... 1 Storage Device(s) found
    7249760 bytes read in 314 ms (22 MiB/s)
    26390 bytes read in 130 ms (198.2 KiB/s)
    stopping USB..
    ## Booting kernel from Legacy Image at 82000000 ...
       Image Name:   Linux-4.14-at28-ge97480002d52-di
       Image Type:   ARM Linux Kernel Image (uncompressed)
       Data Size:    7249696 Bytes = 6.9 MiB
       Load Address: 82000000
       Entry Point:  82000000
       Verifying Checksum ... OK
    ## Flattened Device Tree blob at 83000000
       Booting using the fdt blob at 0x83000000
       Loading Kernel Image ... OK
       Loading Device Tree to 9eef9000, end 9ef02715 ... OK
    
    Starting kernel ...