Armadilloフォーラム

インストールディスクイメージの生成方法

sousuke

2019年2月20日 16時07分

グローリーの畑と申します。

自社で開発したアプリケーションを組み込んだインストールディスクイメージを作成したいのですが可能でしょうか。

上記で記載したインストールディスクイメージを使用し複数のArmadillo-640にインストールしようと考えています。
※具体的にはArmadillo-640製品マニュアルの
「11.1.1. インストールディスクの作成」
「11.1.2. インストールの実行」
を行い複数のArmadillo-640にインストールしようと考えています。

ご教示くださいよろしくお願いします。

コメント

中村です。

自分も今、A640のインストール用SDカード作りを
どうしようかと考えているところです。
// だいぶ前にG3Lでは独自の方法でやったことはあるのですけど、
// A640も同じような方法にするか、別の方法にするか・・・、と。

> > 自社で開発したアプリケーションを組み込んだインストールディスクイメージを作成したいのですが可能でしょうか。
>
> 可能です。
>
> 以下参考になりますでしょうか。
>
> [Armadillo-640 製品マニュアル]
> https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…

これ、ルートファイルシステムアーカイブを作る方法なので、
質問に対する回答になっていないと思います。

SDカードブートするだけでeMMCを全部書き換えてくれる
インストールディスクを作る方法を質問してるのではないでしょうか?

まだ記事を読んだだけで試してはいませんが、
最近ブログで、G3,G3L,X1用のこういうのが公開されました。

[Armadillo-X1, Armadillo-IoT G3/G3L: インストールディスクイメージ作成ツールとその使用方法]
https://users.atmark-techno.com/blog/9492/3612

Armadillo-640もこういうのがあるといいなぁと思っています。

--
なかむら

中村です。

※ 少し長い投稿になります。

> // だいぶ前にG3Lでは独自の方法でやったことはあるのですけど、

この「だいぶ前に・・・」の方法とは違うのですが、
インストールディスクを作る方法として、
G3,G3L,X1用のこの記事が参考になると思います。

[Armadillo-IoT(G3/G3L)/X1: 簡易的なインストールディスクイメージの作成方法]
https://users.atmark-techno.com/blog/1913/2426

この記事に以前は書いていなかったのですけど、
先ほど書いた
[Armadillo-X1, Armadillo-IoT G3/G3L: インストールディスクイメージ作成ツールとその使用方法]
https://users.atmark-techno.com/blog/9492/3612
へのリンクが追加されてました。
この新しい記事で提供されているツールmake_install_disk.tar.gzを
ダウンロードして、中身を見てみました。
ほぼ、公式のインストールディスクと同じものができあがるみたいです。

// Armadillo-640でも、これと同等のツールを用意してもらえるといいのですが・・・

古い方の記事
[Armadillo-IoT(G3/G3L)/X1: 簡易的なインストールディスクイメージの作成方法]
https://users.atmark-techno.com/blog/1913/2426
を参考にしてArmadillo-640の簡易的なインストールディスクを作った場合、
そのインストールディスクでSDブートするときに、
ブートローダー(U-Boot)の環境変数の問題があります。

A-640はG3/G3L,X1とは異なり、JP1の設定(ショート)だけでは、
SDカードのカーネルやルートファイルシステムを使用してくれず、
U-Bootの環境変数を変更しなければなりません。
また、eMMCブートもSDカードブートも、同じeMMC上の環境変数を
参照するという問題もあります。

そこで、まず、SDカードのカーネルやルートファイルシステムを
使用するようにデフォルトの環境変数を改造したU-Bootを作って、
これをSDカードに書き込めば、JP1をショートするだけで、
SDカードからブートしてSDカード上のカーネルやルートファイルシステムを
読んでくれます。
(ただし、eMMCの環境変数が保存されていないという前提です)

古いバージョンのU-Boot用の記事は、ここにあります。
[Armadillo-640:SDブート用の環境変数を設定済みのSDブートディスクの作成方法]
https://users.atmark-techno.com/blog/615/3404

現在のU-Bootは環境変数の仕様が変更になっているので、
(マニュアルの「14.4. SD ブートの実行」に注意書きがあります)
現在のバージョンでは次のように修正すればOKです。

--- include/configs/armadillo-640.h-orig        2018-09-26 18:10:34.000000000 +0900
+++ include/configs/armadillo-640.h     2018-12-04 17:04:22.490909260 +0900
@@ -61,11 +61,24 @@
 #define IMX_FEC_BASE                   ENET_BASE_ADDR
 #endif
 
+#if 0
+
 #define CONFIG_BOOTCOMMAND \
        "run setup_mmcargs; ext4load mmc 0:2 ${loadaddr} /boot/uImage; ext4load mmc 0:2 0x83000000 /boot/a640.dtb; bootm ${loadaddr} - 0x83000000;"
 #define CONFIG_EXTRA_ENV_SETTINGS \
        "setup_mmcargs=setenv bootargs root=/dev/mmcblk0p2 rootwait ${optargs};\0"\
        "tftpboot=tftpboot uImage; tftpboot 0x83000000 a640.dtb; bootm ${loadaddr} - 0x83000000;"
 
+#else
+
+/* SDブート + overlayfs */
+#define CONFIG_BOOTCOMMAND \
+       "run setup_mmcargs; ext4load mmc 1:2 ${loadaddr} /boot/uImage; ext4load mmc 1:2 0x83000000 /boot/a640.dtb; bootm ${loadaddr} - 0x83000000;"
+#define CONFIG_EXTRA_ENV_SETTINGS \
+       "optargs=overlay\0" \
+       "setup_mmcargs=setenv bootargs root=/dev/mmcblk1p2 rootwait ${optargs};\0"\
+       "tftpboot=tftpboot uImage; tftpboot 0x83000000 a640.dtb; bootm ${loadaddr} - 0x83000000;"
+
+#endif
 
 #endif

このパッチはat3のソースを使っていますが、at4でも大丈夫だと思います。
それから、デフォルトでoverlayfsになるようにしてます。
("optargs=overlay"のところです)

U-Bootの環境変数がeMMCに保存されていないという前提なので、
新品のArmadillo-640や1度も環境変数保存をしていないのであれば、
これでうまくいきますが、標準のU-Bootで環境変数の保存を
しまっているときは、保存した環境変数を消してあげなければなりません。

テストなどのときにも、保存されている環境変数を消して、
デフォルトが使われるようにする方法が必要になります。
環境変数を消す(何も保存されていない状態にする)正しい方法が
わからなかったのですが、次のようにしてeMMCの環境変数領域を
壊す(ゼロを書き込む)方法で、なんとかなりました。

# dd if=/dev/zero of=/dev/mmcblk0 bs=1k seek=512 count=512

このコマンドでは、512kB全部をゼロで埋めしていますが、
先頭の少しだけ壊してあげれるだけでも大丈夫だと思います。

ここで使った場所(先頭)とサイズは、マニュアルの
「9.3. U-Boot の環境変数」に次のように記載されてます。

 表示された文字からも分るように、Armadillo-640 では環境変数を MMC の 0 番、つまりオンボー
ド eMMC に保存します。U-Boot の環境変数が保存される場所は、オンボード eMMC の先頭から 512
KByte オフセットです。eMMC の 1 MByte オフセットから第1 パーティションが始まっているので、
環境変数を保存できるのは 512 KByte になります。 eMMC のアドレスマップについては 「表 3.4.
eMMC メモリマップ」 を参照してください。

U-Bootのソースでは、次のdefineがこれになります。
u-boot-a600-v2018.03-at3/include/configs/armadillo-640.h

#define CONFIG_ENV_SIZE                 SZ_512K
#define CONFIG_ENV_OFFSET               SZ_512K

--
なかむら

中村です。

追加です。

> U-Bootの環境変数がeMMCに保存されていないという前提なので、
> 新品のArmadillo-640や1度も環境変数保存をしていないのであれば、
> これでうまくいきますが、標準のU-Bootで環境変数の保存を
> しまっているときは、保存した環境変数を消してあげなければなりません。
>
> テストなどのときにも、保存されている環境変数を消して、
> デフォルトが使われるようにする方法が必要になります。

これの対策として、eMMCに保存されている環境変数を読まない
ブートローダーを作るという方法もあります。
公式のインストールディスクのブートローダーはそうなっているようです。

U-Bootのコンフィグレーションを変更します(make menuconfig)。

標準状態(変更前)

U-Boot 2018.03-at4 Configuratio
  Environment  --->
    [ ] Environment in EEPROM
    [ ] Environment is in a FAT filesystem
    [ ] Environment is in a EXT4 filesystem
    [ ] Environment in flash memory
    [*] Environment in an MMC device
    [ ] Environment in a NAND device
    [ ] Environment in a non-volatile RAM
    [ ] Environment is in OneNAND
    [ ] Environment is in remove memory space
    [ ] Environment is in SPI flash
    [ ] Environment in a UBI volume

[*] Environment in an MMC device
のところを[ ]にすると、選択肢の一番上に
[*] Environment is not stored (NEW)
が出現します。

U-Boot 2018.03-at4 Configuratio
  Environment  --->
    [*] Environment is not stored (NEW)
    [ ] Environment in EEPROM
    [ ] Environment is in a FAT filesystem
    [ ] Environment is in a EXT4 filesystem
    [ ] Environment in flash memory
    [ ] Environment in an MMC device
    [ ] Environment in a NAND device
    [ ] Environment in a non-volatile RAM
    [ ] Environment is in OneNAND
    [ ] Environment is in remove memory space
    [ ] Environment is in SPI flash
    [ ] Environment in a UBI volume

この設定をして、かつ、前の投稿で書いたデフォルトでSDカードに
なるように変更したブートローダーをSDカードに書き込めば、
eMMCに保存されている環境変数がどうなっていてもJP1のショートだけで、
SDカードのカーネルとルートファイルシステムを読んでくれます。

--
なかむら

中村です。

> [Armadillo-X1, Armadillo-IoT G3/G3L: インストールディスクイメージ作成ツールとその使用方法]
> https://users.atmark-techno.com/blog/9492/3612
...
> // Armadillo-640でも、これと同等のツールを用意してもらえるといいのですが・・・

「用意てもらえると・・・」と書いてしまいましたが、
必要なら自分で作ればいいだけのことですね。

中を見るとそれほど難しいことをやっているわけではないので、
G3/G3L,X1用のツール make_install_disk.tar.gz に入っている
build.shを改造して、Armadillo-640用を作ってみました。
そのbuild.shを添付します。

G3/G3L,X1用のmake_install_disk.tar.gzには、
インストールディスクそのものが使うカーネルやルートファイルシステム、
インストールスクリプトなどすべて入っていますが、
A-640用では、これらは標準のインストールディスクイメージ
install-disk-sd-a640-20190129.img から取り出して使うことにしました。
ただし、ブートローダーはソースからビルドします。

手順を記したメモも添付します。

--
なかむら

ファイル ファイルの説明
build.sh
A640用イントールディスクイメージ作成ツール_メモ.txt

> 中村です。
>
> > [Armadillo-X1, Armadillo-IoT G3/G3L: インストールディスクイメージ作成ツールとその使用方法]
> > https://users.atmark-techno.com/blog/9492/3612
> ...
> > // Armadillo-640でも、これと同等のツールを用意してもらえるといいのですが・・・
>
> 「用意てもらえると・・・」と書いてしまいましたが、
> 必要なら自分で作ればいいだけのことですね。
>
> 中を見るとそれほど難しいことをやっているわけではないので、
> G3/G3L,X1用のツール make_install_disk.tar.gz に入っている
> build.shを改造して、Armadillo-640用を作ってみました。
> そのbuild.shを添付します。
>
> G3/G3L,X1用のmake_install_disk.tar.gzには、
> インストールディスクそのものが使うカーネルやルートファイルシステム、
> インストールスクリプトなどすべて入っていますが、
> A-640用では、これらは標準のインストールディスクイメージ
> install-disk-sd-a640-20190129.img から取り出して使うことにしました。
> ただし、ブートローダーはソースからビルドします。
>
> 手順を記したメモも添付します。
>
> --
> なかむら
>
なかむら様、
ご教授いただきありがとうございます。

業務都合上なかなか着手できず返信が遅れてしまいました。
すみません。

先ほど、添付頂いた手順通りに操作し
「install-disk-sd-a640-YYYYMMDD.img」を生成することはできました。

自社で作成したアプリを搭載した.imagファイルの作成やってみます。

> 溝渕です。
>
> > 自社で開発したアプリケーションを組み込んだインストールディスクイメージを作成したいのですが可能でしょうか。
>
> 可能です。
>
> 以下参考になりますでしょうか。
>
> [Armadillo-640 製品マニュアル]
> https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…
>

溝渕さま、
返信ありがとうございます。

なかむらさまの返信にある通り、
今回は上記とは違い、SDカードブートするだけでeMMCを全部書き換えてくれる
インストールディスクを作る方法を探しています。