第11章 イメージファイルの書き換え方法

本章では、Armadillo-IoT G3の内蔵ストレージ(eMMC及びQSPIフラッシュメモリ)に書き込まれているイメージファイルを書き換える手順について説明します。

本章で使用するブートローダーイメージファイルなどは、評価セット付属の DVD に収録されています。最新版のファイルは、"Armadillo サイト"でダウンロードすることができます。新機能の追加や不具合の修正などが行われているため、DVD に収録されているものよりも新しいバージョンがリリースされているかを確認して、最新バージョンを利用することを推奨します。

11.1. インストールディスクを使用する

インストールディスクを使用すると、内蔵ストレージ上のすべてのイメージをまとめて書き換えることができます。 Armadillo がソフトウェアの問題により起動しなくなった場合の復旧方法としてもご使用頂けます。

[警告]

内蔵ストレージに保存されている、すべてのイメージファイルが上書きされるため、既に保存されているデータやアプリケーションなどは削除されます。

特定のイメージのみ書き換えたい場合には 「特定のイメージファイルだけを書き換える」 を参照してください。

インストールディスクの作成には、SDカードに書き込むためのインストールディスクイメージが必要です。

表11.1 インストールディスク作成に使用するイメージファイル

ファイルファイル名
インストールディスクイメージinstall_disk_sd_[version]_iotg3.img

11.1.1. インストールディスクイメージの作成

ここでは、インストールディスクイメージ作成ツールを使用し、インストールディスクイメージを作成する方法を示します。

インストールディスクイメージはATDEで作成します。インストールディスクイメージ作成ツールを、以下の手順に従い実行してください

  1. 必要なパッケージのインストール及び展開を行います。

    [PC ~]$ sudo apt-get update && sudo apt-get install u-boot-tools
    [PC ~]$ tar xf make_install_disk_image-[version].tar.gz
    [PC ~]$ cd make_install_disk_image
    [PC ~/make_install_disk_image]$ 
  2. ツールの使用方法を確認します。

    [PC ~/make_install_disk_image]$ sudo ./build.sh
    Usage: sudo ./build.sh BOARD UBOOT KERNEL DTB USERLAND
    
    BOARD: x1/iotg3/iotg3_m1/iotg3l
    UBOOT: u-boot image
    KERNEL: uImage
    DTB: Device Tree Blob image
    USERLAND: Debian userland archive

    ツールで指定する引数と、インストールディスクイメージの作成に必要なファイルの対応を次に示します。

    表11.2 イメージファイルと引数の対応

    引数

    説明

    ファイル名称

    BOARD

    iotg3 を指定

    -

    UBOOT

    ブートローダーイメージ

    u-boot-x1-[version].bin

    KERNEL

    Linuxカーネルイメージ

    uImage-x1-[version]

    DTB

    Device Tree Blob

    armadillo_iotg_g3-[version].dtb

    USERLAND

    Debian GNU/Linuxルートファイルシステム

    debian-jessie-armhf_aiotg3_[version].tar.gz


    これらのファイルは、Armadillo サイトでダウンロードすることができるほか、10章ビルド手順でビルドしたファイルを使用することも可能です。

  3. 使用するイメージを指定し、インストールディスクイメージを作成します。

    [PC ~/make_install_disk_image]$ sudo ./build.sh iotg3 u-boot-x1-[version].bin uImage-x1-[version] armadillo_iotg_g3-[version].dtb debian-jessie-armhf_aiotg3_[version].tar.gz
    Image Name:
    Created:      Thu Nov 15 15:54:00 2018
    Image Type:   ARM Linux Script (uncompressed)
    Data Size:    167 Bytes = 0.16 kB = 0.00 MB
    Load Address: 00000000
    Entry Point:  00000000
    Contents:
       Image 0: 159 Bytes = 0.16 kB = 0.00 MB
    0+0 レコード入力
    0+0 レコード出力
    0 bytes copied, 6.6523e-05 s, 0.0 kB/s
    
    Welcome to fdisk (util-linux 2.29.2).
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Device does not contain a recognized partition table.
    Created a new DOS disklabel with disk identifier 0xf7a08a85.
    
    Command (m for help): Partition type
       p   primary (0 primary, 0 extended, 4 free)
       e   extended (container for logical partitions)
    Select (default p): Partition number (1-4, default 1): First sector (2048-854015, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-854015, default 854015):
    Created a new partition 1 of type 'Linux' and of size 13 MiB.
    
    Command (m for help): Partition type
       p   primary (1 primary, 0 extended, 3 free)
       e   extended (container for logical partitions)
    Select (default p): Partition number (2-4, default 2): First sector (28672-854015, default 28672): Last sector, +sectors or +size{K,M,G,T,P} (28672-854015, default 854015):
    Created a new partition 2 of type 'Linux' and of size 403 MiB.
    
    Command (m for help): Partition number (1,2, default 2): Partition type (type L to list all types):
    Changed type of partition 'Linux' to 'W95 FAT32'.
    
    Command (m for help): The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.
    
    mkfs.fat 4.1 (2017-01-24)
    mke2fs 1.43.4 (31-Jan-2017)
    Discarding device blocks: done
    Creating filesystem with 412672 1k blocks and 103224 inodes
    Filesystem UUID: 098c113e-ba13-4d98-bd23-e23360f0cf7c
    Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
    
    Allocating group tables: done
    Writing inode tables: done
    Creating journal (8192 blocks): done
    Writing superblocks and filesystem accounting information: done
    
    368+1 レコード入力
    368+1 レコード出力
    376936 bytes (377 kB, 368 KiB) copied, 0.0378821 s, 10.0 MB/s
    [PC ~/make_install_disk_image]$ 
  4. ツールの実行が終了すると、インストールディスクイメージが作成されていることを確認できます。

    [PC ~/make_install_disk_image]$ ls install_disk_sd_*.img
    install_disk_sd_[version]_[model].img

11.1.2. インストールディスクの作成

  1. 512 MB以上のSDカードを用意してください。

  2. ATDE に SD カードを接続します。詳しくは「取り外し可能デバイスの使用」を参照してください。

  3. SD カードがマウントされている場合、アンマウントします。

    [PC ~]$ mount
    (省略)
    /dev/sdb1 on /media/atmark/B18A-3218 type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077,codepage=437,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)
    [PC ~]$ sudo umount /dev/sdb1
  4. SD カードにインストールディスクイメージを書き込みます。

    [PC ~]$ sudo dd if=install_disk_sd_[version].img of=/dev/sdb bs=4M
    94+1 レコード入力
    94+1 レコード出力
    397410304 バイト (397 MB) コピーされました、 45.8441 秒、 8.7 MB/秒
    [PC ~]$ sync

11.1.3. インストールの実行

  1. Armadilloの電源が切断されていることを確認します。接続されていた場合は、電源を切断してください。また、「CON13 RTCバックアップインターフェース1」 にバッテリーが接続されている場合は、必ず取り外して下さい。

  2. USBシリアル変換アダプタのスライドスイッチを確認します。スライドスイッチが図4.9「スライドスイッチの設定」の 1 側に設定されている事を確認してください。

  3. インストールディスクを使用してSDブートを行います。SDスロット(CON4)にインストールディスクを接続し、JP1をショートに設定してください。

  4. ユーザースイッチ1を押しながらArmadillo に電源を投入するとSDカードからブートローダーが起動し、次に示すログが表示されます。 ログが表示されたら、ユーザースイッチ1を離してください。 ユーザースイッチ1の位置については「Armadillo-IoTゲートウェイの外観」を参照してください。

    U-Boot 2014.04-at2 (Jun 12 2016 - 17:47:04)
    
    CPU:   Freescale i.MX7D rev1.1 at 792 MHz
    CPU:   Temperature: can't get valid data!
    Reset cause: POR
    I2C:   ready
    DRAM:  512 MiB
    MMC:   FSL_SDHC: 0, FSL_SDHC: 1
    In:    serial
    Out:   serial
    Err:   serial
    Found PFUZE300! deviceid 0x30, revid 0x11
    Board Type: Armadillo-IoT G3(0a000000)
    Revison: 0002
    S/N: 2000
    DRAM: 00001d05
    XTAL: 00
    Net:   FEC0
    Normal Boot
    =>
  5. 次のように"boot"コマンドを実行するとインストールが始まり、自動的にeMMCとQSPIが書き換えられます。

    => boot
    mmc0 is current device
    mmc0 is current device
    reading boot.scr
    ** Unable to read file boot.scr **
    reading uImage
    9301216 bytes read in 501 ms (17.7 MiB/s)
    Booting from mmc ...
    reading armadillo_iotg_g3.dtb
    52708 bytes read in 20 ms (2.5 MiB/s)
    ## Booting kernel from Legacy Image at 80800000 ...
       Image Name:   Linux-3.14.38-at2
       Image Type:   ARM Linux Kernel Image (uncompressed)
       Data Size:    9301152 Bytes = 8.9 MiB
       Load Address: 80008000
       Entry Point:  80008000
       Verifying Checksum ... OK
    ## Flattened Device Tree blob at 83000000
       Booting using the fdt blob at 0x83000000
       Loading Kernel Image ... OK
       Using Device Tree in place at 83000000, end 8300fde3
    
    Starting kernel ...
    : (省略)
    *+*+* Install Start!! *+*+*
    [警告]

    インストールの実行中は電源を切断しないでください。ボード情報が破損し、復旧できなくなる恐れがあります。

  6. 以下のようにメッセージが表示され、自動的にhaltするとインストール完了です。

    *+*+* Install Completed!! *+*+*
    
    System is going down for system reboot now.
    
    Starting local stop scripts.
    Syncing all filesystems: done
    Unmounting all filesystems: done
    The system is going down NOW!
    Sent SIGTERM to all processes
    Sent SIGKILL to all processes
    Requesting system halt
    reboot: System halted
    

    インストール完了後はJP1をオープンに設定してください。

11.2. 特定のイメージファイルだけを書き換える

Armadillo-IoT G3が起動した状態であれば、特定のイメージファイルだけを書き換えることができます。

イメージファイルと書き込み先の対応を次に示します。

表11.3 イメージファイルと書き込み先の対応

名称

ファイル名

ストレージ

デバイスファイル

ブートローダーイメージ

u-boot-x1-[version].bin

QSPIフラッシュメモリ

/dev/mtdblock0

Linuxカーネルイメージ

uImage-x1-[version]

eMMC

/dev/mmcblk2p1

Device Tree Blob

armadillo_iotg_g3-[version].dtb

/dev/mmcblk2p1

Debian GNU/Linuxルートファイルシステム

debian-jessie-armhf_aiotg3_[version].tar.gz

/dev/mmcblk2p2


11.2.1. ブートローダーイメージの書き換え

ブートローダーイメージの書き換え方法を次に示します。MTDのブロックデバイスに直接イメージファイルを書き込むことで行います。

[armadillo ~]# dd if=u-boot-x1-[version].bin of=/dev/mtdblock0 1
282+1 records in
282+1 records out
288816 bytes (289 kB) copied, 5.4582 s, 52.9 kB/s
[armadillo ~]$ sync

1

MTDのブロックデバイスの先頭からブートローダーイメージを書き込みます。

11.2.2. Linuxカーネルイメージの書き換え

Linuxカーネルイメージの書き換え方法を次に示します。

[armadillo ~]# mount -t vfat /dev/mmcblk2p1 /mnt  1
[armadillo ~]# cp uImage-x1-[version] /mnt/uImage  2
[armadillo ~]# umount /mnt  3

1

eMMCの第1パーティションを/mnt/ディレクトリにマウントします。

2

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

3

/mnt/ディレクトリにマウントしたeMMCの第1パーティションをアンマウントします。

11.2.3. DTBの書き換え

DTBの書き換え方法を次に示します。

[armadillo ~]# mount -t vfat /dev/mmcblk2p1 /mnt  1
[armadillo ~]# cp armadillo_iotg_g3-[version].dtb /mnt/armadillo_iotg_g3.dtb  2
[armadillo ~]# umount /mnt  3

1

eMMCの第1パーティションを/mnt/ディレクトリにマウントします。

2

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

3

/mnt/ディレクトリにマウントしたeMMCの第1パーティションをアンマウントします。

11.2.4. ルートファイルシステムの書き換え

eMMC上のルートファイルシステムを書き換える手順を次に示します。

手順11.1 eMMC上のルートファイルシステムを書き換える

  1. eMMCをルートファイルシステムとしている場合、マウントしているルートファイルシステム自体の書き換えはできません。このため、今回は例としてSD ブートディスクから起動し書き換えを行います。ブートディスクの作成方法やSDブートの実行方法ついては15章SDブートの活用を参照してください。

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

    [armadillo ~]# ls
    debian-jessie-armhf_aiotg3_[version].tar.gz
  3. ルートファイルシステムをeMMCの第2パーティションに再構築します。

    [armadillo ~]# mkfs.ext4 /dev/mmcblk2p2  1
    mke2fs 1.42.12 (29-Aug-2014)
    /dev/mmcblk2p2 contains a ext4 file system
    ▸-last mounted on /root on Thu Jan  1 09:00:07 1970
    Proceed anyway? (y,n) y  2
    ...[省略]...
    
    [armadillo ~]# mount -t ext4 /dev/mmcblk2p2 /mnt  3
    [armadillo ~]# tar zxf debian-jessie-armhf_aiotg3l_[version].tar.gz -C /mnt  4
    [armadillo ~]# umount /mnt  5
    ▸-

    1

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

    2

    y に続きENTERを入力します。

    3

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

    4

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

    5

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