Armadilloフォーラム

SDブート環境でのOverlayFSについて

naotake_ito

2021年12月16日 14時37分

お世話になります。伊藤と申します。

現在、Armadillo-640をSDブートで動かしたいと考えております。
開発者サイトの「SDブートの活用」を参考に、ブート用SDを作る
ことはできたのですが、電源ブチ切り等の対策のために、さらに
SDを書込禁止(OverlayFS有効)にしたいと考えております。

そこで、SDブート時に下記のコマンド

=> setenv optargs overlay
=> saveenv

を実行したのですが。OverlayFSが有効になりませんでした。
試しに、eMMCブートに戻して同じことをやると、ちゃんと
OverlayFSが有効になります。ちなみに、有効/無効の判断は、
下記のコマンドを実行して確かめました。

root@armadillo:~# du / -a | sort -rn | head -100
du: cannot access '/proc/586/task/586/fd/3': No such file or directory
du: cannot access '/proc/586/task/586/fdinfo/3': No such file or directory
du: cannot access '/proc/586/fd/4': No such file or directory
du: cannot access '/proc/586/fdinfo/4': No such file or directory
2744618 /
1384680 /overlay
1322832 /overlay/system
603852  /usr
589532  /overlay/system/usr
584872  /var
584852  /overlay/system/var
409812  /var/log
409752  /overlay/system/var/log
.
.
.

上記の結果はeMMCブート環境についての結果ですが、同じことを
SDブート環境でやると、1384680 /overlayや1322832 /overlay/system
などの記述が見つかりませんでした。

他にもなにか操作が必要なのでしょうか?
ご教示ください。
よろしくお願い致します。

コメント

at_shiita.ishigaki

2021年12月17日 10時45分

石垣です。

> を実行したのですが。OverlayFSが有効になりませんでした。

使用しているLinuxカーネルバージョンとu-bootのバージョンを教えて頂いてもよろしいでしょうか。
Linuxカーネルのバージョンは以下のコマンドで確認できます。

[armadillo ~]# uname -a

u-bootのバージョンは保守モード起動時に確認することができます。
U-Boot 2018.03-at9のように表示されます。

また、sdブート時の以下のコマンドの結果についても教えて頂いてもよろしいでしょうか。

[armadillo ~]# df -T
[armadillo ~]# cat /proc/cmdline 

お世話になります。伊藤です

> 石垣です。
>
> > を実行したのですが。OverlayFSが有効になりませんでした。
>
> 使用しているLinuxカーネルバージョンとu-bootのバージョンを教えて頂いてもよろしいでしょうか。
> Linuxカーネルのバージョンは以下のコマンドで確認できます。
>

> [armadillo ~]# uname -a
> 

> u-bootのバージョンは保守モード起動時に確認することができます。
> U-Boot 2018.03-at9のように表示されます。
>
> また、sdブート時の以下のコマンドの結果についても教えて頂いてもよろしいでしょうか。
>

> [armadillo ~]# df -T
> [armadillo ~]# cat /proc/cmdline 
> 

まず、Linuxカーネルバージョンは次のとおりです。

root@armadillo:~# uname -a
Linux armadillo 4.14-at39 #1 Thu Nov 25 13:40:34 JST 2021 armv7l GNU/Linux

次に、u-bootのバージョンは次の通りです。

U-Boot 2018.03-at10 (Nov 24 2021 - 17:31:46 +0900)

あと、dfとcatコマンドの実行結果は次のとおりです。

root@armadillo:~# df -T
Filesystem      Type     1K-blocks    Used Available Use% Mounted on
udev            devtmpfs     10240       0     10240   0% /dev
tmpfs           tmpfs       102072    2816     99256   3% /run
/dev/mmcblk1p2  ext4      15118256 1082064  13248508   8% /
tmpfs           tmpfs       255172       0    255172   0% /dev/shm
tmpfs           tmpfs         5120       0      5120   0% /run/lock
tmpfs           tmpfs       255172       0    255172   0% /sys/fs/cgroup
/dev/mmcblk0gp0 squashfs       128     128         0 100% /opt/license
tmpfs           tmpfs        51032       0     51032   0% /run/user/0
/dev/sda1       vfat      15149072   19248  15129824   1% /mnt
root@armadillo:~# cat /proc/cmdline
root=/dev/mmcblk1p2 rootwait

以上となります。よろしくお願い致します。

at_shiita.ishigaki

2021年12月17日 17時34分

石垣です。 説明が不足しておりました。
SDブートかつOverlayFSを有効にした状態で下記コマンドを実行してください。

[armadillo ~]# df -T
[armadillo ~]# cat /proc/cmdline 

SDブートを用いて長期的な運用を行うこと自体の話となりますが、
当社ではSDブートは開発時の利用を想定しており、長期的な運用を推奨しておりません。
SDカードの故障を当社ではサポートすることができないためです。
ですので、運用時はSDブートではなく、eMMCを使用することを推奨します。

eMMCからではなく、SDブートを行う理由は何かありますでしょうか。

お世話になります。伊藤です
返答が遅くなり申し訳ありません。

> 石垣です。
> 説明が不足しておりました。
> **SDブートかつOverlayFSを有効にした状態**で下記コマンドを実行してください。
>
>

> [armadillo ~]# df -T
> [armadillo ~]# cat /proc/cmdline 
> 

>
> SDブートを用いて長期的な運用を行うこと自体の話となりますが、
> 当社ではSDブートは開発時の利用を想定しており、長期的な運用を推奨しておりません。
> SDカードの故障を当社ではサポートすることができないためです。
> ですので、運用時はSDブートではなく、eMMCを使用することを推奨します。
>
> eMMCからではなく、SDブートを行う理由は何かありますでしょうか。

まず、OVerlayFSを再度有効に設定した後の一連の結果は次のとおりです。

U-Boot 2018.03-at10 (Nov 24 2021 - 17:31:46 +0900)
 
CPU:   Freescale i.MX6ULL rev1.0 at 396 MHz
Reset cause: POR
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
Loading Environment from MMC... OK
In:    serial
Out:   serial
Err:   serial
PMIC: PFUZE3000 DEV_ID=0x30 REV_ID=0x11
Net:   FEC
=> setenv optargs overlay
=> saveenv
Saving Environment to MMC... Writing to MMC(0)... OK
=> boot
.
.
.
root@armadillo:~# df -T
Filesystem      Type     1K-blocks    Used Available Use% Mounted on
udev            devtmpfs     10240       0     10240   0% /dev
tmpfs           tmpfs       102072    2820     99252   3% /run
/dev/mmcblk1p2  ext4      15118256 1013456  13317116   8% /
tmpfs           tmpfs       255172       0    255172   0% /dev/shm
tmpfs           tmpfs         5120       0      5120   0% /run/lock
tmpfs           tmpfs       255172       0    255172   0% /sys/fs/cgroup
/dev/mmcblk0gp0 squashfs       128     128         0 100% /opt/license
tmpfs           tmpfs        51032       0     51032   0% /run/user/0
/dev/sda1       vfat      15149072   19248  15129824   1% /mnt
root@armadillo:~# cat /proc/cmdline
root=/dev/mmcblk1p2 rootwait

また、SDブートにしたい理由ですが、2つあります。
① 量産時に、ストレージの複製を作るのが楽で簡単になるから。(eMMCの環境設定だけは必要ですが・・・)
② 仮にハードがつぶれた場合、修理時に、元のSDカードを新しいハードに差し替えるだけで交換が済むから。(新しいハードのeMMCの環境設定済みが前提)
  また、私の所属するメーカーでは、従来からマイコン基板は脱着可能なROMで動かすのが主流であり、保守体制もそれに合わせた形で定着しているため、
  できるだけ従来の修理方法に合わせたいから。

以上です。もちろん、SDカード自体がつぶれた時は、その複製をこちらで作成し、供給する予定です。
よろしくお願い致します。

at_shiita.ishigaki

2021年12月22日 13時15分

石垣です。

> root@armadillo:~# cat /proc/cmdline
> root=/dev/mmcblk1p2 rootwait

kernelのブートパラメータにoverlayが渡されていないようです。
u-bootで以下のコマンドを実行した結果を添付して頂けますでしょうか。

=> printenv

> ① 量産時に、ストレージの複製を作るのが楽で簡単になるから。(eMMCの環境設定だけは必要ですが・・・)

当社では出荷時にROMイメージを書き込むサービスを行っています。
https://armadillo.atmark-techno.com/services/customize/bto
よろしければご検討下さい。

お世話になります。伊藤です

> 石垣です。
>
>

> > root@armadillo:~# cat /proc/cmdline
> > root=/dev/mmcblk1p2 rootwait
> 

>
> kernelのブートパラメータにoverlayが渡されていないようです。
> u-bootで以下のコマンドを実行した結果を添付して頂けますでしょうか。
>

> => printenv
> 

>
> > ① 量産時に、ストレージの複製を作るのが楽で簡単になるから。(eMMCの環境設定だけは必要ですが・・・)
>
> 当社では出荷時にROMイメージを書き込むサービスを行っています。
> https://armadillo.atmark-techno.com/services/customize/bto
> よろしければご検討下さい。

printenvの実行結果は次の通りです。

U-Boot 2018.03-at10 (Nov 24 2021 - 17:31:46 +0900)
 
CPU:   Freescale i.MX6ULL rev1.0 at 396 MHz
Reset cause: POR
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
Loading Environment from MMC... OK
In:    serial
Out:   serial
Err:   serial
PMIC: PFUZE3000 DEV_ID=0x30 REV_ID=0x11
Net:   FEC
=> printenv
baudrate=115200
bootargs=root=/dev/mmcblk1p2 rootwait
bootcmd=fatload mmc 1:1 ${loadaddr} /uImage; fatload mmc 1:1 0x83000000 /a640.dtb; bootm ${loadaddr} - 0x83000000;
bootdelay=0
enable_pf3000_lpm=no
ethact=FEC
ethaddr=00:11:0c:2a:07:bc
fdt_file=a640.dtb
loadaddr=0x82000000
mmcdev=1
optargs=overlay
setup_bootcmd_usb=setenv bootcmd run setup_usbargs\\; usb start\\; ext4load usb 0:2 \\${loadaddr} /boot/uImage\\; ext4load usb 0:2 0x83000000 /boot/a640.dtb\\; usb stop\\; bootm \\${loadaddr} - 0x83000000\\;
setup_mmcargs=setenv bootargs root=/dev/mmcblk0p2 rootwait ${optargs};
setup_usbargs=setenv bootargs root=/dev/sda2 rootwait rw ${optargs};
stderr=serial
stdin=serial
stdout=serial
stop_nr3225sa_alarm=no;
tftpboot=tftpboot uImage; tftpboot 0x83000000 a640.dtb; bootm ${loadaddr} - 0x83000000;
usbboot=run setup_bootcmd_usb; boot;
 
Environment size: 881/524284 bytes

あと余談ですが、今回のSDブート環境ですが、開発者サイトを参考にしながら構築しましたが、
カーネルイメージとデバイスツリーは、SDカードの第一パーティション(FAT32)に配置してあります。
よって、eMMCの環境設定の際、サイトの説明では

=> setenv bootcmd ext4load mmc 1:2 \${loadaddr} /boot/uImage\; ext4load mmc 1:2 0x83000000 /boot/a640.dtb\; bootm \${loadaddr} - 0x83000000\;

となっていて、この設定だとうまくいかなかったため、

=> setenv bootcmd fatload mmc 1:1 \${loadaddr} /uImage\; fatload mmc 1:1 0x83000000 /a640.dtb\; bootm \${loadaddr} - 0x83000000\;

と変更して設定しました。一応これでちゃんと動いておりますが、これが悪さをしている可能性は
ありますでしょうか?(余計なことかもしれませんが・・・)

ROMイメージ書込みサービスについては、今後検討させていただきます。

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

at_shiita.ishigaki

2021年12月23日 11時42分

石垣です。

> と変更して設定しました。一応これでちゃんと動いておりますが、これが悪さをしている可能性は
> ありますでしょうか?(余計なことかもしれませんが・・・)

過去のマニュアルやサイトを参考にしている可能性があります。
下記URLに最新のマニュアルがありますので、こちらを参考にしてください。
https://armadillo.atmark-techno.com/resources/documents/armadillo-640/m…

最新のマニュアルのSDブートの章を参考にしつつ、もう一度SDブートを実施して頂きますでしょうか。
https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…
そのうえで、OVerlayFSを有効にし、動作を確認して頂けますでしょうか。

お世話になります。伊藤です

> 石垣です。
>
> > と変更して設定しました。一応これでちゃんと動いておりますが、これが悪さをしている可能性は
> > ありますでしょうか?(余計なことかもしれませんが・・・)
>
> 過去のマニュアルやサイトを参考にしている可能性があります。
> 下記URLに最新のマニュアルがありますので、こちらを参考にしてください。
> https://armadillo.atmark-techno.com/resources/documents/armadillo-640/m…
>
> 最新のマニュアルのSDブートの章を参考にしつつ、もう一度SDブートを実施して頂きますでしょうか。
> https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…
> そのうえで、OVerlayFSを有効にし、動作を確認して頂けますでしょうか。

最新のマニュアルに従い、uImageとa640.dtbを第二パーティション(Debianルートファイルシステム)の
/bootに再配置し、eMMCの環境設定をやり直してみました。今までご指示いただいたコマンドの実行結果は
以下のとおりです。なんとなく成功した感じですが、心配なので一応ご確認ください。

df -T コマンドの結果

root@armadillo:~# df -T
Filesystem      Type     1K-blocks    Used Available Use% Mounted on
udev            devtmpfs     10240       0     10240   0% /dev
tmpfs           tmpfs       102072    1544    100528   2% /run
/dev/mmcblk1p2  ext4      15118256 1084884  13245688   8% /overlay/system
none            tmpfs       262144   18284    243860   7% /overlay/ramdisk
overlay         overlay     262144   18284    243860   7% /
tmpfs           tmpfs       255172       0    255172   0% /dev/shm
tmpfs           tmpfs         5120       0      5120   0% /run/lock
tmpfs           tmpfs       255172       0    255172   0% /sys/fs/cgroup
/dev/mmcblk0gp0 squashfs       128     128         0 100% /opt/license
/dev/sda1       vfat      15149072   19248  15129824   1% /mnt
tmpfs           tmpfs        51032       0     51032   0% /run/user/0

cat /proc/cmdline コマンドの結果

root@armadillo:~# cat /proc/cmdline
root=/dev/mmcblk1p2 rootwait overlay

printenv コマンドの結果

U-Boot 2018.03-at10 (Nov 24 2021 - 17:31:46 +0900)
 
CPU:   Freescale i.MX6ULL rev1.0 at 396 MHz
Reset cause: POR
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
Loading Environment from MMC... OK
In:    serial
Out:   serial
Err:   serial
PMIC: PFUZE3000 DEV_ID=0x30 REV_ID=0x11
Net:   FEC
=> printenv
baudrate=115200
bootargs=root=/dev/mmcblk1p2 rootwait
bootcmd=run setup_mmcargs; ext4load mmc 1:2 ${loadaddr} /boot/uImage; ext4load mmc 1:2 0x83000000 /boot/a640.dtb; bootm ${loadaddr} - 0x83000000;
bootdelay=0
enable_pf3000_lpm=no
ethact=FEC
ethaddr=00:11:0c:2a:07:bc
fdt_file=a640.dtb
loadaddr=0x82000000
mmcdev=1
optargs=overlay
setup_bootcmd_usb=setenv bootcmd run setup_usbargs\\; usb start\\; ext4load usb 0:2 \\${loadaddr} /boot/uImage\\; ext4load usb 0:2 0x83000000 /boot/a640.dtb\\; usb stop\\; bootm \\${loadaddr} - 0x83000000\\;
setup_mmcargs=setenv bootargs root=/dev/mmcblk1p2 rootwait ${optargs};
setup_usbargs=setenv bootargs root=/dev/sda2 rootwait rw ${optargs};
stderr=serial
stdin=serial
stdout=serial
stop_nr3225sa_alarm=no;
tftpboot=tftpboot uImage; tftpboot 0x83000000 a640.dtb; bootm ${loadaddr} - 0x83000000;
usbboot=run setup_bootcmd_usb; boot;
 
Environment size: 912/524284 bytes

一応、du / -a | sort -rn | head -100 コマンドの結果も載せておきます。

root@armadillo:~# du / -a | sort -rn | head -100
du: cannot access '/proc/694/task/694/fd/3': No such file or directory
du: cannot access '/proc/694/task/694/fdinfo/3': No such file or directory
du: cannot access '/proc/694/fd/4': No such file or directory
du: cannot access '/proc/694/fdinfo/4': No such file or directory
2114558 /
1049892 /overlay
1029564 /overlay/system
609492  /usr
595168  /overlay/system/usr
384516  /var
384480  /overlay/system/var
306360  /usr/lib
296760  /overlay/system/usr/lib
241184  /usr/share
241184  /overlay/system/usr/share
176352  /var/cache
176352  /overlay/system/var/cache
171632  /var/cache/apt
171632  /overlay/system/var/cache/apt
154684  /usr/lib/arm-linux-gnueabihf
145084  /overlay/system/usr/lib/arm-linux-gnueabihf
120804  /overlay/system/var/lib
120780  /var/lib
118456  /var/cache/apt/archives
118456  /overlay/system/var/cache/apt/archives
106052  /overlay/system/var/lib/apt
106048  /var/lib/apt
106020  /var/lib/apt/lists
106020  /overlay/system/var/lib/apt/lists
86892   /var/log
86824   /overlay/system/var/log
69304   /usr/lib/python3.5
69304   /overlay/system/usr/lib/python3.5
67880   /usr/share/locale
67880   /overlay/system/usr/share/locale
46800   /usr/lib/gcc
46800   /overlay/system/usr/lib/gcc
46796   /usr/lib/gcc/arm-linux-gnueabihf
46796   /overlay/system/usr/lib/gcc/arm-linux-gnueabihf
46792   /usr/lib/gcc/arm-linux-gnueabihf/6
46792   /overlay/system/usr/lib/gcc/arm-linux-gnueabihf/6
45428   /usr/lib/python3.5/config-3.5m-arm-linux-gnueabihf
45428   /overlay/system/usr/lib/python3.5/config-3.5m-arm-linux-gnueabihf
44648   /usr/share/doc
44648   /overlay/system/usr/share/doc
36896   /var/lib/apt/lists/ftp.jp.debian.org_debian_dists_stretch_main_binary-armhf_Packages
36896   /overlay/system/var/lib/apt/lists/ftp.jp.debian.org_debian_dists_stretch_main_binary-armhf_Packages
36704   /usr/bin
36172   /var/cache/apt/archives/libpython3.5-dev_3.5.3-1+deb9u5_armhf.deb
36172   /overlay/system/var/cache/apt/archives/libpython3.5-dev_3.5.3-1+deb9u5_armhf.deb
33992   /var/log/syslog.1
33992   /overlay/system/var/log/syslog.1
33864   /var/log/daemon.log.1
33864   /overlay/system/var/log/daemon.log.1
33640   /usr/share/keyrings
33640   /overlay/system/usr/share/keyrings
32940   /var/lib/apt/lists/ftp.jp.debian.org_debian_dists_stretch_main_source_Sources
32940   /overlay/system/var/lib/apt/lists/ftp.jp.debian.org_debian_dists_stretch_main_source_Sources
31980   /overlay/system/usr/bin
31256   /usr/lib/arm-linux-gnueabihf/libLLVM-3.9.so.1
31256   /overlay/system/usr/lib/arm-linux-gnueabihf/libLLVM-3.9.so.1
29560   /overlay/system/lib
29560   /lib
29464   /usr/share/keyrings/debian-keyring.gpg
29464   /overlay/system/usr/share/keyrings/debian-keyring.gpg
26596   /var/cache/apt/pkgcache.bin
26596   /overlay/system/var/cache/apt/pkgcache.bin
26576   /var/cache/apt/srcpkgcache.bin
26576   /overlay/system/var/cache/apt/srcpkgcache.bin
25800   /var/lib/apt/lists/ftp.jp.debian.org_debian_dists_stretch_main_i18n_Translation-en
25800   /overlay/system/var/lib/apt/lists/ftp.jp.debian.org_debian_dists_stretch_main_i18n_Translation-en
25076   /usr/lib/arm-linux-gnueabihf/libicudata.so.57.1
25076   /overlay/system/usr/lib/arm-linux-gnueabihf/libicudata.so.57.1
22728   /usr/lib/python3.5/config-3.5m-arm-linux-gnueabihf/libpython3.5m-pic.a
22728   /overlay/system/usr/lib/python3.5/config-3.5m-arm-linux-gnueabihf/libpython3.5m-pic.a
22524   /usr/lib/python3.5/config-3.5m-arm-linux-gnueabihf/libpython3.5m.a
22524   /overlay/system/usr/lib/python3.5/config-3.5m-arm-linux-gnueabihf/libpython3.5m.a
20328   /overlay/ramdisk/upper
20328   /overlay/ramdisk
20208   /usr/include
20208   /overlay/system/usr/include
20000   /usr/share/perl
20000   /overlay/system/usr/share/perl
19996   /usr/share/perl/5.24.1
19996   /overlay/system/usr/share/perl/5.24.1
19248   /mnt
18272   /overlay/ramdisk/upper/var
18240   /overlay/ramdisk/upper/var/log
16480   /usr/share/man
16480   /overlay/system/usr/share/man
14248   /overlay/system/lib/udev
14248   /lib/udev
13784   /overlay/system/var/lib/dpkg
13780   /var/lib/dpkg
13096   /usr/lib/arm-linux-gnueabihf/perl
13096   /overlay/system/usr/lib/arm-linux-gnueabihf/perl
13032   /usr/lib/arm-linux-gnueabihf/perl/5.24.1
13032   /overlay/system/usr/lib/arm-linux-gnueabihf/perl/5.24.1
12808   /usr/lib/gcc/arm-linux-gnueabihf/6/cc1plus
12808   /overlay/system/usr/lib/gcc/arm-linux-gnueabihf/6/cc1plus
12804   /var/lib/dpkg/info
12804   /overlay/system/var/lib/dpkg/info
12336   /usr/lib/python3
12336   /overlay/system/usr/lib/python3

以上となります。よろしくお願い致します。

入江です。

> /dev/mmcblk1p2 ext4 15118256 1084884 13245688 8% /overlay/system
> none tmpfs 262144 18284 243860 7% /overlay/ramdisk
> overlay overlay 262144 18284 243860 7% /

無事にoverlayfsになっているようです。

お世話になります。伊藤です

> 入江です。
>
> > /dev/mmcblk1p2 ext4 15118256 1084884 13245688 8% /overlay/system
> > none tmpfs 262144 18284 243860 7% /overlay/ramdisk
> > overlay overlay 262144 18284 243860 7% /
>
> 無事にoverlayfsになっているようです。
>

ご確認ありがとうございます。
とても助かりました。
来年も引き続きよろしくお願い致します。