sousuke
2019年2月20日 16時07分
グローリーの畑と申します。
自社で開発したアプリケーションを組み込んだインストールディスクイメージを作成したいのですが可能でしょうか。
上記で記載したインストールディスクイメージを使用し複数のArmadillo-640にインストールしようと考えています。
※具体的にはArmadillo-640製品マニュアルの
「11.1.1. インストールディスクの作成」
「11.1.2. インストールの実行」
を行い複数のArmadillo-640にインストールしようと考えています。
ご教示くださいよろしくお願いします。
コメント
y.nakamura
中村です。
自分も今、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もこういうのがあるといいなぁと思っています。
--
なかむら
y.nakamura
中村です。
※ 少し長い投稿になります。
> // だいぶ前に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
--
なかむら
y.nakamura
中村です。
追加です。
> 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カードのカーネルとルートファイルシステムを読んでくれます。
--
なかむら
y.nakamura
中村です。
> [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 |
sousuke
> 中村です。
>
> > [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ファイルの作成やってみます。
sousuke
> 溝渕です。
>
> > 自社で開発したアプリケーションを組み込んだインストールディスクイメージを作成したいのですが可能でしょうか。
>
> 可能です。
>
> 以下参考になりますでしょうか。
>
> [Armadillo-640 製品マニュアル]
> https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…
>
溝渕さま、
返信ありがとうございます。
なかむらさまの返信にある通り、
今回は上記とは違い、SDカードブートするだけでeMMCを全部書き換えてくれる
インストールディスクを作る方法を探しています。
at_mizo
2019年2月22日 13時31分
溝渕です。
> 自社で開発したアプリケーションを組み込んだインストールディスクイメージを作成したいのですが可能でしょうか。
可能です。
以下参考になりますでしょうか。
[Armadillo-640 製品マニュアル]
https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…