Armadilloフォーラム

Armadillo-IoT G2でのSDカードブートについて

hiraga

2017年5月16日 18時35分

いつもお世話になっております。

Armadillo IoT G2に自作のアドオンモジュール(CON2に接続しUART1を使用)を乗せようとしているのですが
SDカードに書き込んだatmark-distが起動できません。

+++++++++++++++++++++++++++++++++++++++++++++++++++++

<Kernel作成>
ATDE5上でKernel configurationを以下のように設定してビルド
------------------------------------------------------------------------------------------------
Kernel Configuration
System Type --->
[*] Freescale i.MX family
Freescale i.MX support --->
[*] Support Armadillo-IoTG Std Base board
[ ] Add-On Module Auto Detect
Extension I/F Options --->
[*] Enable UART1 at CON1/CON2
[ ] Enable UART1 HW flow control at CON1/CON2
------------------------------------------------------------------------------------------------

<SDカードへの書き込み>
https://users.atmark-techno.com/blog/615/1142」を参考にATDE5から書き込み

<atmark-dist起動時のログ>
mmcsd: card not found or not available data.
failed image loading from 'mmcblk0p1' device.
-NG invalid argument

--------------------------------------------------------------
以下、/etc/fstab、setenv、setbootdeviceをmmcblk1p1に変更した際のログ

mmcsd: SD card at address 0x0000b368
mmcsd: USD 7822336KiB
gendisk: /dev/mmcblk1p1: start=0x00000800, size=0x00eeb000
ext2: Can't find /boot/Image(or linux)(.bin)(.gz)
failed image loading from 'mmcblk1p1' device.
-NG I/O error

+++++++++++++++++++++++++++++++++++++++++++++++++++++

上記のようなログが表示され、bootに失敗してしまいます。

SDカードへの書き込みはArmadillo-IoTでは何か別の操作などがあるのでしょうか?

できればATDE5上でSDカードへの書き込みを行いたいのですが、何か参考となる資料等はありますでしょうか?
(armadillo-iotg-std_product_manual_ja-2.8.0.pdfの14章に記載されている操作ではbootが成功したのですが、作成したKernelの書き込み方法がわかりませんでした)

よろしくお願いしたします。

コメント

hiraga

2017年5月22日 17時08分

作成したKernel、ユーザーランドをArmadilloのフラッシュに書き込んだところ問題無くbootできたのですが、同じものをSDに書き込むと上記と同様のエラーが発生します。
試行錯誤しておりますが、どうにも解決できません。
どうかご教授お願いいたします。

hiraga

2017年5月22日 17時19分

いつもお世話になっております、平賀です。

microSDスロットは未接続でSDスロットのみ接続状態です。

> 古関です。
>
> microSDスロットは未接続、かつSDスロットにSDカードを接続
> の状況でしょうか?
>
> ※ 以下の (番号 17)は未接続。(番号:5)にSDカードを接続の状態
> http://manual.atmark-techno.com/armadillo-iot/armadillo-iotg-std_produc…

at_koseki

2017年5月22日 18時04分

古関です。

> microSDスロットは未接続でSDスロットのみ接続状態です。
ご回答ありがとうございます。

作成いただきましたSDカードを使って、
以下の設定を行うとSDブートできませんでしょうか?

(1) setbootdeviceは"mmcblk1p1"に設定
hermit> setbootdevice mmcblk1p1

(2) setenvのrootは"/dev/mmcblk0p1"に設定
hermit> setenv console=ttymxc1 root=/dev/mmcblk0p1 noinitrd rootwait

(3) /etc/fstabは"/dev/mmcblk0p1"に設定
------------------------------------------------------------------------------------------
/dev/mmcblk0p1 / ext3 defaults 0 1
------------------------------------------------------------------------------------------

Armadillo-IoT G2のソフトウェアの仕様がわかりにくいのが原因ですね。
大変申し訳ありません。

bootloaderではmicroSDスロット/SDスロットとデバイスファイル名の関係が決め打ち(静的)で以下になります。
microSD: mmcblk0
SD: mmcblk1

それに対してkernelでは先に認識したほうが/dev/mmcblk0となるため(動的)、以下になります。
- microSDとSDを両方接続した場合
microSD: /dev/mmcblk0
SD: /dev/mmcblk1

- microSDのみ接続した場合
microSD: /dev/mmcblk0

- SDのみ接続した場合
SD: /dev/mmcblk0

setbootdeviceはbootloaderがkernelイメージの場所を認識するのに使用するため
bootloaderが認識しているデバイスファイル名を指定する必要があります。

setenvコマンドで指定したroot=/dev/ttymmcblk0p1 は
bootloaderで指定したパラメータがkernel command lineでkernelに伝えられる
ルートファイルシステムの場所ですので、
kernelが認識しているデバイスファイル名を指定する必要があります。

fstabはもうkernelが起動してからの話ですので、
これもkernelが認識しているデバイスファイル名を指定する必要があります。

hiraga

2017年5月23日 9時43分

平賀です。

古関様ご対応ありがとうございます。

> (1) setbootdeviceは"mmcblk1p1"に設定
> hermit> setbootdevice mmcblk1p1
>
> (2) setenvのrootは"/dev/mmcblk0p1"に設定
> hermit> setenv console=ttymxc1 root=/dev/mmcblk0p1 noinitrd rootwait
>
> (3) /etc/fstabは"/dev/mmcblk0p1"に設定
> ------------------------------------------------------------------------------------------
> /dev/mmcblk0p1 / ext3 defaults 0 1
> ------------------------------------------------------------------------------------------

上記の設定でSDブートしましたが、下記のログが表示され止まってしまいました。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
mmcsd: SD card at address 0x0000b368
mmcsd: USD 7822336KiB
gendisk: /dev/mmcblk1p1: start=0x00000010, size=0x00eeb7f0
gendisk: linux.bin.gz is found. (3575419 Bytes)
Copying kernel..done.
Uncompressing kernel

ERROR: invalid compressed format (err=2)

-- System halted
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

カーネルに何か問題があるのでしょうか?
Armadilloのフラッシュに書き込んだものと同じカーネル(自作の"linux.bin.gz")を作成したbootディレクトリ下に配置しただけなのですが、何か操作が足らないのでしょうか?
SDにコピーしたカーネルとATDE5にあるカーネルのサイズは同様なので、コピーミスはないと思っています。

at_koseki

2017年5月23日 10時48分

古関です。

> gendisk: linux.bin.gz is found. (3575419 Bytes)
> Copying kernel..done.
> Uncompressing kernel
>
> ERROR: invalid compressed format (err=2)

linux.bin.gzの展開(gunzip)で失敗していますね。
bootloaderからは展開できないファイルと判定されています。

問題切り分けのために以下確認お願いいたします。

(1) ビルドしたイメージとSDに配置したイメージで、md5sum値は一致するでしょうか?

(2) ビルドしたイメージではなく、とりあえず弊社標準イメージではSDブートするでしょうか?
http://armadillo.atmark-techno.com/files/downloads/armadillo-iot/image/…
※"linux.bin.gz"にリネームしてSDに配置

(3) 圧縮していないイメージでは起動するでしょうか?
SDカードのbootディレクトリから"linux.bin.gz"を削除
   atmark-distのimagesディレクトリに生成される"linux.bin"をリネームせずにSDカードのbootディレクトリにコピー

hiraga

2017年5月23日 11時37分

平賀です。

返信ありがとうございます。

> (1) ビルドしたイメージとSDに配置したイメージで、md5sum値は一致するでしょうか?
-----------------------------------------------------------------------------
ATDE5 :55b367aa09fac98cd594c884953ae99b
SDカード:55b367aa09fac98cd594c884953ae99b
-----------------------------------------------------------------------------
一致していました。

> (2) ビルドしたイメージではなく、とりあえず弊社標準イメージではSDブートするでしょうか?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
mmcsd: SD card at address 0x0000b368
mmcsd: USD 7822336KiB
gendisk: /dev/mmcblk1p1: start=0x00000800, size=0x00eeb000
gendisk: linux.bin.gz is found. (3577068 Bytes)
Copying kernel..done.
Uncompressing kernel

ERROR: invalid compressed format (err=1)

-- System halted
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
上記のログが表示され止まってしまいました。

> (3) 圧縮していないイメージでは起動するでしょうか?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
mmcsd: SD card at address 0x0000b368
mmcsd: USD 7822336KiB
gendisk: /dev/mmcblk1p1: start=0x00000800, size=0x00eeb000
gendisk: linux.bin is found. (7494978 Bytes)
Copying kernel...done.
Doing console=ttymxc1
Doing root=/dev/mmcblk0p1
Doing noinitrd
Doing rootwait
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
上記のログの後

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Hermit-At v3.6.0 (armadillo-iotg-std) compiled at 20:52:03, Jul 24 2015
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
と表示され、起動時に戻ってしまいました。