Armadilloフォーラム

microSDカードが認識されない。

k_o

2023年11月17日 11時26分

お世話になっております。
CON1のインターフェイスにmicroSDカードを挿入したのですが、
外部記憶装置として/dev/mmcblk1に認識されないです。
何か特殊な設定とかありますでしょうか?
私たちはmicroSDカードをただの外部記憶装置として使用したいです。

コメント

アットマークテクノの古賀です。

k_oさん:
>お世話になっております。
>CON1のインターフェイスにmicroSDカードを挿入したのですが、
>外部記憶装置として/dev/mmcblk1に認識されないです。
>何か特殊な設定とかありますでしょうか?

取り急ぎ確認ですが、お手元の Armadillo-IoT A6E は、A6E WLAN モデルや A6E Cat.1 モデル(開発セットまたは、WLAN コンボ搭載の量産用モデル)など、WLAN + BT コンボモジュール搭載モデルでしょうか?
 https://armadillo.atmark-techno.com/armadillo-iot-a6e/models

WLAN + BT コンボモジュール搭載モデルをお使いの場合は、ハードウェア上の制限により、CON1 の microSD スロットに microSD カードを装着しても、ストレージとして使用できないのです:
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

>私たちはmicroSDカードをただの外部記憶装置として使用したいです。

WLAN + BT コンボモジュール搭載モデルでは、コンボモジュールと CON1 の microSD カードを同時に使用できません。そのため、CON1 の microSD カードスロットに microSD カードを装着しても、インストールディスクにしか使用できないのです:
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

つまり、お手元の Armadillo-IoT A6E が、WLAN + BT コンボモジュール搭載モデルの場合には、ハードウェア上の制限で CON1 の microSD スロットに装着した microSD カードをストレージとして使用できません。
お手元の Armadillo-IoT A6E が、A6E Cat.M1 モデルなど WLAN + BT コンボモジュールを搭載していないモデルの場合には、別の要因ですので、お知らせください。

ご回答ありがとうございます。

今回、使用しているモデルはArmadillo-IoT A6E(AG6211-C02D) 
WLAN モデルになります。

WLAN +BTモジュールをソフトウェア的に無効にするまたは
物理的に取り外す対応をとった場合、micro SDを認識させることは
可能でしょうか?

そもそもこのモデルでは、どういった対応をとっても、micro sdを
外部記憶媒体として使用することは不可でしょうか?

アットマークテクノの古賀です。

k_oさん:
>ご回答ありがとうございます。
>
>今回、使用しているモデルはArmadillo-IoT A6E(AG6211-C02D) 
>WLAN モデルになります。

了解しました。ご確認有難うございます。

>WLAN +BTモジュールをソフトウェア的に無効にするまたは
>物理的に取り外す対応をとった場合、micro SDを認識させることは
>可能でしょうか?

はい。ソフトウェア的に無効にすることは可能で、インストールディスクの場合にも、その仕組みを使ってインストール時に microSD カードをストレージとして使用しています。

WLAN+BT モジュールをソフトウェア的に無効にするには、WLAN+BT コンボモジュール用の DTS overlay を使用しない設定に変更すればよいです。
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

/boot/overlays.txt をご覧になって頂くと、armadillo-iotg-a6e-lwb5plus.dtbo が記載されているはずです。その記載を削って /boot/overlays.txt の変更内容を永続化することで、次回起動時に WLAN+BT モジュールが無効化され、microSD カードを認識するようになります:
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

いかがでしょうか?

お世話になっております。

/boot/overlays.txtにarmadillo-iotg-a6e-lwb5plus.dtbo は記述されており、その記述を削除したところ

無事microSDカードを認識することができました。

ご教授ありがとうございました。

このスレッドにてご教授いただいた、

WLAN+BT コンボモジュール用の DTS overlay を使用しない設定にした場合、

microSDをストレージとして認識させることができております。
手順は下記です。

①vi /boot/overlays.txt
#右辺を削除して保存
fdt_overlays= armadillo-iotg-a6e-lwb5plus.dtbo
②persist_file /boot/overlays.txt
③reboot

このイメージをabos-ctrl make-installerにてimgファイルにして

SDカードのアップデートをかけたところ、アップデート後は有効に戻ってしまいます。

armadillo:/boot# cat overlays.txt
fdt_overlays= armadillo-iotg-a6e-lwb5plus.dtbo

無効の状態のイメージファイルを作成したいのですが、方法ありますでしょうか?

アットマークテクノの古賀です。

k_oさん:
>①vi /boot/overlays.txt
>#右辺を削除して保存
>fdt_overlays= armadillo-iotg-a6e-lwb5plus.dtbo
>②persist_file /boot/overlays.txt
>③reboot
>
>このイメージをabos-ctrl make-installerにてimgファイルにして
>
>SDカードのアップデートをかけたところ、アップデート後は有効に戻ってしまいます。
>
>armadillo:/boot# cat overlays.txt
>fdt_overlays= armadillo-iotg-a6e-lwb5plus.dtbo

/boot/overlays.txt の内容は、インストールディスクイメージに収録しているインストールスクリプトがインストール時に作成するため、クローンするためのインストールディスクの場合も、クローン元の内容が保存されないのです。ごめんなさい。

>無効の状態のイメージファイルを作成したいのですが、方法ありますでしょうか?

追加で手順が必要になってしまいますが、インストールディスクイメージの作成後に、インストールディスクの内容かまたは、インストールディスクイメージをマウントして内容を書き換えることで対処可能です。
具体的には、(Armadillo-IoT G4 の)マニュアルの「開発したシステムをインストールディスクにする」にある「インストール時に任意のシェルスクリプトを実行する」で説明している install_overrides.sh を作成し、このスクリプトの postinstall() の内容を次のようにすればよいでしょう。
 https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-base-os-dev…

postinstall() {
	sed -i -e "s/armadillo-iotg-a6e-lwb5plus.dtbo//g" /target/boot/overlays.txt
}

インストールディスクイメージをマウントして内容を書き換える場合は、次のコマンドを実行してください:

# losetup /dev/loop0 [インストールディスクイメージファイルのパス]
# mount /dev/loop0p1 [マウントするディレクトリ]

イメージ内容を書き換えたら、アンマウントした後、ループバックデバイスを削除してください:

# umount [マウントしたディレクトリ]
# losetup -d /dev/loop0

以上、不明な点などありましたら、お知らせください。

お世話になっております。

imgファイルの中身を書き換えるのに苦戦しております。

現在弊社はarmadillo用のアプリケーション(cベース)を開発しております。
アプリケーションからoverlays.txtの内容を書き換えるでも問題ないですよね?

古賀です。

k_oさん:
>現在弊社はarmadillo用のアプリケーション(cベース)を開発しております。
>アプリケーションからoverlays.txtの内容を書き換えるでも問題ないですよね?

御社で実装していらっしゃるアプリケーションが、/boot/overlays.txt の内容を起動時に確認して、armadillo-iotg-a6e-lwb5plus.dtbo が記載されていれば、内容を変更・保存したうえで perist_file で保存内容を永続化して、さらに自動的に再起動する、ということですね?
であれば、それでも問題ないと思います。

ところで、

>imgファイルの中身を書き換えるのに苦戦しております。

これは、具体的には、どこで困っていらっしゃるでしょうか?差し支えなければ、教えてくださいませ。
なお、img ファイルをマウントして内容を書き換えるのではなく、img ファイルを dd で書き込んだ microSD カードを、Armadillo や ATDE にマウントして内容を書き換える、という方策も可能です。それもうまくいかない、という場合には、お知らせください。

お世話になっております。

>installer_overrides.sh を書くためのサンプルとして、 インストールディスクイメージの第1パーティション及び、
>「開発したシステムをインストールディスクにする」で作成したのであれば第2パーティション直下に installer_overrides.sh.sample を用意してあります。
>このサンプルをコピーして編集するなどして、行ないたい処理を記述してください。

このあたりになります。imgファイルの第2パーティションに具体的にどうやってアクセスするか知見がなく
苦戦しております。

アットマークテクノの古賀です。

k_oさん;
>>installer_overrides.sh を書くためのサンプルとして、 インストールディスクイメージの第1パーティション及び、
>>「開発したシステムをインストールディスクにする」で作成したのであれば第2パーティション直下に installer_overrides.sh.sample を用意してあります。
>>このサンプルをコピーして編集するなどして、行ないたい処理を記述してください。
>
>このあたりになります。imgファイルの第2パーティションに具体的にどうやってアクセスするか知見がなく
>苦戦しております。

ごめんなさい。12/20 に書いた以下のコメントですが、実際に確認せず、うろ覚えで書いていたので手順に間違いがありました。また、「第2パーティション」については、マニュアルが分かりにくいですね。
 https://armadillo.atmark-techno.com/forum/armadillo/17770#comment-15082
以下、順に説明します。

まず、インストールディスクイメージのイメージファイルをマウントするには、次のコマンドを実行してください。

armadillo:~# sudo losetup -Pf [インストールディスクイメージのファイルパス]

12/20 のコメントでは、losetup をオプション無しで実行し、ループバックデバイス名を明示指定していましたが、この使い方の場合、ループバックデバイスのパーティションテーブルを読み取って認識させるためのコマンドも実行しなければいけません。さらに、明示指定したループバックデバイスが使用中だとエラーしてしまいます。
ループバックデバイス名を指定せず、-Pf オプションを指定することにより、空いているループバックデバイスを自動的に割り当て、さらに、イメージ内のパーティションテーブルを読みとって、対応するデバイスファイルを生成してくれます。

上記のコマンドを実行した後、'ls /dev/loop*' を実行してみてください。使用中のループバックデバイスが losetup の実行以前に存在していなければ、ABOS の場合は、次のような出力になります:

armadillo:~# ls /dev/loop*
/dev/loop-control  /dev/loop0         /dev/loop0p1       /dev/loop0p2

これは、インストールディスクイメージに二つのパーティションが存在している場合です。ちなみに、ABOS ではなく ATDE 上で losetup を実行した場合は、割り当てたループバックデバイス名を出力してくれるので、ls で確認する必要は、ありません。

次に「第2パーティション」ですが、これは、abos-ctrl make-nstaller コマンドを実行した時に、以下の質問に 0 でない値を指定していなければ作られません:

Would you like to create a windows partition?
That partition would only be used for customization script at the end of
install, leave at 0 to skip creating it.
Custom partition size (MB, [0] or 16 - 36): 16

マニュアルでは、このことが分かりにくいですね。ごめんなさい。
このカスタムパーティションを作成していなければ、インストールディスクイメージにはパーティションが一つしかありませんので、第1パーティションをマウントしてください。つまり、ループバックデバイスが loop0 であれば、

armadillo:~# mount /dev/loop0p1 [マウントディレクトリ]

です。マウントしたディレクトリを見ると、中に installer_overrides.sh.sample というファイルがあるはずです。

いかがでしょうか?12/20 に書いたコメントの内容が不正確だったために、お手数をかけてしまい申し訳ありませんでした。

お世話になっております。

あまり時間が取れず、大分前の内容になりますが上記確認致しました。

installer_overrides.sh.sampleをバージョンアップファイルをマウントすることで確認でき

無事 、目的のoverlays.txtでバージョンアップすることが可能でした。

ご教授ありがとうございました。

> >WLAN +BTモジュールをソフトウェア的に無効にするまたは
> >物理的に取り外す対応をとった場合、micro SDを認識させることは
> >可能でしょうか?
>
> はい。ソフトウェア的に無効にすることは可能で、インストールディスクの場合にも、その仕組みを使ってインストール時に microSD カードをストレージとして使用しています。
>
> WLAN+BT モジュールをソフトウェア的に無効にするには、WLAN+BT コンボモジュール用の DTS overlay を使用しない設定に変更すればよいです。
>  https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
>
> /boot/overlays.txt をご覧になって頂くと、armadillo-iotg-a6e-lwb5plus.dtbo が記載されているはずです。その記載を削って /boot/overlays.txt の変更内容を永続化することで、次回起動時に WLAN+BT モジュールが無効化され、microSD カードを認識するようになります:
>  https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

本件について、質問させてください。

AG6271にて、SDカードが正しく挿入されているかどうかを、コンソールから確認する方法を検討しています。
(運用方法としては、通常使用時は、WLANを使用しますが、一時的にSDカードを使用する際(swuファイルの一時ファイル保管用)のみ、DTS overlayを変更するスクリプトを作成して対応しています。swuが完了後、WLANを再度有効にしています。)
Armadilloの組立後にSDカードが確実に挿入されているかチェックをするためだけに、①WLAN無効化、②WLAN再度有効化をそれぞれ行うために、2回rebootをかける必要があり、reboot待ちで時間がかかってしまいます。
rebootをすることなく、SDカードが正しく挿入されてるかどうかを、ソフトウェア的に確認するような方法は無いでしょうか。

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

お世話になっております。

本件、お目通しいただいておりますでしょうか。
実現が可能かどうか、ご教授いただければ幸いです。

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

アットマークテクノの古賀です。

kiriharaさん:
>本件、お目通しいただいておりますでしょうか。
>実現が可能かどうか、ご教授いただければ幸いです。

返事が遅くなってしまい、ごめんなさい。

kiriharaさん(2024年10月7日 10時10分):
>本件について、質問させてください。
>
>AG6271にて、SDカードが正しく挿入されているかどうかを、コンソールから確認する方法を検討しています。
...
>Armadilloの組立後にSDカードが確実に挿入されているかチェックをするためだけに、①WLAN無効化、②WLAN再度有効化をそれぞれ行うために、2回rebootをかける必要があり、reboot待ちで時間がかかってしまいます。
>rebootをすることなく、SDカードが正しく挿入されてるかどうかを、ソフトウェア的に確認するような方法は無いでしょうか。

ブートローダー(u-boot)を使って確認する、というのが解になるかと思います。
Armadillo-IoT A6E の電源を入れる際に、コンソールからキー入力していると、u-boot がコマンド入力待ちになります。
u-boot の mmc コマンドを使い、microSD スロットのデバイスを選択してパーティション情報を取得できるかどうかで、装着した microSD カードが認識されているかどうかを確認し、それをもって正しく挿入されているかどうかを判断できるのではないかと思います。
 https://manual.atmark-techno.com/armadillo-610/armadillo-610_product_ma…

Armadillo-IoT A6E の microSD スロットのデバイス番号は 1 ですので、次のようにコマンド入力してみてください:

=> mmc dev 1

microSD カードが装着されていない場合、このコマンドの出力は、次のようになります。

Card did not respond to voltage select!

正しく装着されている場合は、microSD カードを選択でき、次のように、part サブコマンドでパーティション情報を取得できます:

=> mmc dev 1
switch to partitions #0, OK
mmc1 is current device
=> mmc part
 
Partition Map for MMC device 1  --   Partition Type: EFI
 
Part    Start LBA       End LBA         Name
        Attributes
        Type GUID
        Partition GUID
  1     0x00005000      0x0010bfff      "rootfs_0"
        attrs:  0x0000000000000000
        type:   0fc63daf-8483-4772-8e79-3d69d8477de4
        guid:   0fb39bb9-ab51-44b7-937f-71fda2312906

いかがでしょうか?

> ブートローダー(u-boot)を使って確認する、というのが解になるかと思います。
> Armadillo-IoT A6E の電源を入れる際に、コンソールからキー入力していると、u-boot がコマンド入力待ちになります。
> u-boot の mmc コマンドを使い、microSD スロットのデバイスを選択してパーティション情報を取得できるかどうかで、装着した microSD カードが認識されているかどうかを確認し、それをもって正しく挿入されているかどうかを判断できるのではないかと思います。
>  https://manual.atmark-techno.com/armadillo-610/armadillo-610_product_ma…
>
> Armadillo-IoT A6E の microSD スロットのデバイス番号は 1 ですので、次のようにコマンド入力してみてください:
>

> => mmc dev 1
> 

>
> microSD カードが装着されていない場合、このコマンドの出力は、次のようになります。
>

> Card did not respond to voltage select!
> 

>
> 正しく装着されている場合は、microSD カードを選択でき、次のように、part サブコマンドでパーティション情報を取得できます:
>

> => mmc dev 1
> switch to partitions #0, OK
> mmc1 is current device
> => mmc part
> 
> Partition Map for MMC device 1  --   Partition Type: EFI
> 
> Part    Start LBA       End LBA         Name
>         Attributes
>         Type GUID
>         Partition GUID
>   1     0x00005000      0x0010bfff      "rootfs_0"
>         attrs:  0x0000000000000000
>         type:   0fc63daf-8483-4772-8e79-3d69d8477de4
>         guid:   0fb39bb9-ab51-44b7-937f-71fda2312906
> 

>
> いかがでしょうか?

古賀様

ご回答ありがとうございます。
この方法で、実現できそうです。

2点追加で教えてください。


u-boot がコマンド入力待ちで、上記のコマンドを実行した後に、正常起動をさせようとした場合は、

 => mmc dev 0
 => boot
 

を入力すればよいでしょうか?


u-bootのコマンド入力で、誤って何かしらの環境変数を書き換えてしまうようことはありますでしょうか?
(基本的には、電源を入れなおせば元通りに動作しますでしょうか。)

以上、よろしくお願いします。

アットマークテクノの古賀です。

kiriharaさん:
>>ブートローダー(u-boot)を使って確認する、というのが解になるかと思います。

>ご回答ありがとうございます。
>この方法で、実現できそうです。

それは何よりです。

>2点追加で教えてください。

以下、順に回答します。

>①
>u-boot がコマンド入力待ちで、上記のコマンドを実行した後に、正常起動をさせようとした場合は、

 =>mmc dev 0
 =>boot
 

>を入力すればよいでしょうか?

はい。

>②
>u-bootのコマンド入力で、誤って何かしらの環境変数を書き換えてしまうようことはありますでしょうか?
>(基本的には、電源を入れなおせば元通りに動作しますでしょうか。)

はい。u-boot の env set コマンドを実行すると、環境変数の値が変更されます。
変更された環境変数の値は、そのままでは永続化されませんので、電源を入れ直せば変更前の値に戻ります。
ただし、env save コマンドを実行すると、変更内容が永続化(保存)されてしまいます。
 https://manual.atmark-techno.com/armadillo-610/armadillo-610_product_ma…

u-boot の env save コマンドを誤って実行して、保存したくない内容を保存してしまった場合ですが、Linux (ABOS) が起動するのであれば、Linux 起動後に次のコマンドを実行することで、元の内容に戻せます:

# fw_setenv -s /boot/uboot_env.d/00_defaults

/uboot_env.d/00_defaults は、u-boot 環境変数のデフォルトの設定内容を保存したファイルです。このファイルを、fw_setenv コマンドの -s オプションの引数に指定することで、環境変数のデフォルトの内容を保存し直すことができるのです。
これについては、マニュアルの「u-boot の環境変数の設定」をご覧ください:
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

いかがでしょうか?