sc_sato
2025年8月6日 12時59分
==========
製品型番:Armaddilo-IoT G3
Debian/ABOSバージョン: Debian9 から Debian12へアップデート中
カーネルバージョン:
3G/LTE モジュール情報 (Debianのみ):
その他:
==========
Debian12のルートファイルシステムをベースに、linuxカーネルのコンフィグを変更・ビルド・インストールを試みています。
生成したsdイメージにてG3へ書き込み後、起動すると(initramfs)でストップする状況です。
linuxカーネルのビルド・インストール手順を確認させて頂けないでしょうか。
コメント
sc_sato
佐藤です。
ご回答頂きありがとうございます。
Linuxカーネルのビルドを実施後、uImageとDTBをSDへ展開するところで失敗してしまいます。
原因はSDカード作成スクリプトでのパーティションのサイズ指定に余裕がないため、第一パーティションの容量が足りずにビルドしたuImageとDTBのデプロイに失敗します。
> - ビルドしたカーネルでイメージを置き換える手順: https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…
頂いた上記手順はArmadillo G3上でDTBやカーネルイメージを書き換える手順と理解しています。
添付頂いたSDカード作成時のmenuconfigの手順はuImageのビルドまでが記載されている理解でいます。
こちらで実施したいことはSDカード作成時に第一パーティションへuImageカーネルやDTBをデプロイする方法を確認したいと考えています。
現状、
下記手順でrootfs作成の上、SDカードへ展開したのち、第一パーティションのカーネルやDTBを書き換えているのですが上手くいきません。
正しい手順を確認させて頂けないでしょうか。
```
cd /
bash build.sh aiotg3
cp debian-bookworm-armhf-aiotg3-20250807.tar.gz /
cd
sudo bash build.sh iotg3_m1 u-boot-x1.bin uImage armadillo_iotg_g3_m1.dtb debian-bookworm-armhf-aiotg3-20250807.tar.gz
sudo dd if=install_disk_sd_20250807_iotg3_m1.img of=/dev/sdb bs=4M conv=fsync
```
上記で作成したSDの第一パーティションへ、手元の環境でビルドしたuImageとDTBをデプロイしようとしましたが、第一パーティションのサイズが小さく失敗しました。
```
atmark@atde10:~/shizenboxG3_rootfs/make_install_disk_image$ sudo mount -t vfat /dev/sdb1 mnt1
atmark@atde10:~/shizenboxG3_rootfs/make_install_disk_image$ sudo lsblk -f /dev/sdb1
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb1 vfat FAT16 A822-6FCD 2K 100% /home/atmark/shizenboxG3_rootfs/make_install_disk_image/mnt1
```
build.shを確認するとSD作成時のパーティションサイズの割り当てに余裕が無かったためbuild.shを下記のように修正しました。
```変更前
calc_disk_size_mb ()
{
# Partition sizes: add 20% overhead for metadata/wasted blocks
SIZE_DISK_P1=$(du -sm "$TEMP"/p1 | awk '{print int($1 * 1.2)}')
SIZE_DISK_P2=$(du -sm "$TEMP"/p2 | awk '{print int($1 * 1.2)}')
SIZE_DISK=$(( SIZE_DISK_P1 + SIZE_DISK_P2 ))
}
```
```変更後
calc_disk_size_mb ()
{
# Partition sizes: add 20% overhead for metadata/wasted blocks
SIZE_DISK_P1=$(du -sm "$TEMP"/p1 | awk '{print int($1 * 1.2 + 50)}')
SIZE_DISK_P2=$(du -sm "$TEMP"/p2 | awk '{print int($1 * 1.2 + 500)}')
SIZE_DISK=$(( SIZE_DISK_P1 + SIZE_DISK_P2 ))
}
```
その上で、/dev/sdb1にuImageとDTBを展開したSDカードを作成しました。
結果、作成したSDカードでG3をSDブートしたところ、下記起動シーケンスを繰り返すようになりました。
```
Running bootscript from mmc ...
## Executing script at 82000000
switch to partitions #0, OK
mmc0 is current device
reading uImage
16752568 bytes read in 742 ms (21.5 MiB/s)
Booting from mmc ...
reading x1-minimal.dtb
34731 bytes read in 18 ms (1.8 MiB/s)
## Booting kernel from Legacy Image at 82000000 ...
Image Name: Linux-6.1.141-at18
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 16752504 Bytes = 16 MiB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... OK
## Flattened Device Tree blob at 84800000
Booting using the fdt blob at 0x84800000
Loading Kernel Image ... OK
Using Device Tree in place at 84800000, end 8480b7aa
Starting kernel ...
```
おそらくbuild.sh内で作成したboot.scrとデプロイしたDTBが上手く一致していないものと推測しています。
at_dominique.m…
マルティネです。
> 下記手順でrootfs作成の上、SDカードへ展開したのち、第一パーティションのカーネルやDTBを書き換えているのですが上手くいきません。
> 正しい手順を確認させて頂けないでしょうか。
手順としては問題ないと思います。
> 上記で作成したSDの第一パーティションへ、手元の環境でビルドしたuImageとDTBをデプロイしようとしましたが、第一パーティションのサイズが小さく失敗しました。
… init_images の処理でコピーが失敗しても build.sh が成功として最後まで実行されますね…
大変お手数をおかけしました。
今後のアップデートにエラー処理を追加します…申し訳ございません…
> build.shを確認するとSD作成時のパーティションサイズの割り当てに余裕が無かったためbuild.shを下記のように修正しました。
20% でたりなかったのは気になりますが、ひとまずこれでいいと思います。
> その上で、/dev/sdb1にuImageとDTBを展開したSDカードを作成しました。
> 結果、作成したSDカードでG3をSDブートしたところ、下記起動シーケンスを繰り返すようになりました。
>
> Starting kernel ...
>
> おそらくbuild.sh内で作成したboot.scrとデプロイしたDTBが上手く一致していないものと推測しています。
そうですね、少なくともカーネルのチェックサムに問題なかったので途中までしか書き込みできた等の問題はないですね。
コンソールの出力ができてないだけか、起動ができてないかは判別できないのでいくつか確認していただければと思います:
① u-boot-x1.bin も自分でビルドしたものでしょうか?
u-boot の 「=>
」プロンプトに入って、printenv の出力を確認できますでしょうか。
Armadillo IoT G3 ですと console=ttymxc4 になっているはずです。
② カーネル、dtb ファイルを https://armadillo.atmark-techno.com/resources/software/armadillo-iot-g3… からダウンロードするものと置き換えると起動できますか?
できる場合は dtb の変更かカーネル .config の問題になりますので、.config ファイルを添付していただければ確認します。
よろしくお願いします
sc_sato
佐藤です。
> ① u-boot-x1.bin も自分でビルドしたものでしょうか?
> u-boot の 「=>
」プロンプトに入って、printenv の出力を確認できますでしょうか。
> Armadillo IoT G3 ですと console=ttymxc4 になっているはずです。
u-boot-x1.binは自分でビルドしたものではなく、元々存在していたものを使用しています。
> ② カーネル、dtb ファイルを https://armadillo.atmark-techno.com/resources/software/armadillo-iot-g3… からダウンロードするものと置き換えると起動できますか?
結果起動できませんでした。下記起動ログを示します。
```
[ 12.818388] /dev/mmcblk2p2: Can't open blockdev
[ 12.948171] EXT4-fs (mmcblk2p3): mounted filesystem with ordered data mode. Quota mode: none.
BusyBox v1.22.1 (Debian 1:1.22.0-9+deb8u1) built-in shell (ash)
Enter 'help' for a list of built-in commands.
/bin/sh: can't access tty; job control turned off
(initramfs)
```
build.shで作成したinstallイメージを書き込んだ第一パーティションに格納されているdtbファイル名がx1-minimal.dtbとあります。
一方で書き換え元のdtbはarmadillo_iotg_g3_m1-v6.1-at19.dtbです。
書き換え時にはこのdtbを削除して同名のx1-minimal.dtbとしてインストールする必要はありますか?
> できる場合は dtb の変更かカーネル .config の問題になりますので、.config ファイルを添付していただければ確認します。
.configを添付します。デフォルトからCONFIG_NF_LOG_IPV4=y に変更しているものになります。
ファイル | ファイルの説明 |
---|---|
config.txt |
sc_sato
佐藤です。
度々失礼致します。こちらでやろうとしている本来の目的と、試したことを記載致します。
下記ご確認頂けると幸いです。宜しくお願い致します。
## 本来のやりたいこと(目的)
・bookwarmのカーネルコンフィグを編集ビルドしたカーネルを組み込んだinstallイメージを作成したい
## 試したこと
make_install_disk_imageで下記コマンド時に、別途カーネルコンフィグを編集ビルドしたuImageとdtbを指定してinstallイメージを作成した
sudo bash build.sh iotg3_m1 u-boot-x1.bin linux-6.1-x1-at18/arch/arm/boot/uImage linux-6.1-x1-at18/arch/arm/boot/dts/armadillo_iotg_g3_m1.dtb
## 結果
作成したSDイメージを書き込んだArmadillo G3を起動した結果/dev/mmcblk2p2ではなく/dev/mmcblk2p3を開こうとして失敗する
```
[ 12.864459] /dev/mmcblk2p2: Can't open blockdev
[ 12.993720] EXT4-fs (mmcblk2p3): mounted filesystem with ordered data mode. Quota mode: none.
BusyBox v1.22.1 (Debian 1:1.22.0-9+deb8u1) built-in shell (ash)
Enter 'help' for a list of built-in commands.
/bin/sh: can't access tty; job control turned off
(initramfs) [ 35.671843] VLDO2: disabling
(initramfs)
```
本来のやりたいことを実現するための手順について明確な情報がございましたらご教示頂けると幸いです。
宜しくお願い致します。
martinetd
マルティネです。
> .configを添付します。デフォルトからCONFIG_NF_LOG_IPV4=y に変更しているものになります。
config は大丈夫ですね。
> 作成したSDイメージを書き込んだArmadillo G3を起動した結果/dev/mmcblk2p2ではなく/dev/mmcblk2p3を開こうとして失敗する
そもそも mmcblk2 というのは eMMC ですので、SD 側を起動していない可能性もありますね。
> 本来のやりたいことを実現するための手順について明確な情報がございましたらご教示頂けると幸いです。
https://armadillo.atmark-techno.com/blog/615/22540 に標準のインストールディスクを利用する流れが説明されています。
ビルドしたものでも同じくインストールできるはずです。
JP1 の設定などに問題なければ、今頂いたログでは mmcblk2 をマウントしようとしているところが気になりますので、やはり u-boot の設定を確認したいと思います。
電源いれる直後の uboot の出力を提供していただけますでしょうか。
また、printenv の出力の mmcroot の値も確認したいです。
よろしくお願いします
sc_sato
佐藤です。
ご返答頂きありがとうございます。
カーネルビルドしたinstall_imageをデプロイして正しく起動でき、configも変更内容が反映されていることを確認することが出来ました。
ありがとうございました。
その後、G3へファイル転送などしたところdisk fullで失敗する問題が生じています。
G3のinstall_disk_imageで容量を最大化する方法をご教示頂けないでしょうか。
以下dfの結果から/dev/mmcblk2p2 が 1498720となっており、G3のeMMCのサイズ3.6GBまで使用できていないことが原因と思われます。
```
root@se-connect:/home/se# ls
SE-PLUG-TRUST-MW_04.07.01.zip simw-top
root@se-connect:/home/se# cd simw-top/[ 337.299616] systemd-journald[309]: Failed to create new system journal: No space left on device
[ 337.412415] systemd-journald[309]: Failed to create new user journal: No space left on device
root@se-connect:/home/se/simw-top# df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 10240 0 10240 0% /dev
tmpfs 202504 1132 201372 1% /run
/dev/mmcblk2p2 1498720 1102740 301568 79% /overlay/system
none 262144 260276 1868 100% /overlay/ramdisk
overlay 262144 260276 1868 100% /
tmpfs 506252 0 506252 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
/dev/mmcblk2gp0 128 128 0 100% /opt/license
/dev/mmcblk2p1 52197 15755 32142 33% /boot
tmpfs 101248 0 101248 0% /run/user/1001
```
make_install_disk_image/build.shのcalc_disk_size_mb()を下記のように修正しても上記サイズが変わりませんでした。
```
calc_disk_size_mb ()
{
# eMMCの総容量 3.6GB
TOTAL_DISK_SIZE_MB=3433
# Partition sizes: add 20% overhead for metadata/wasted blocks
SIZE_DISK_P1=$(du -sm "$TEMP"/p1 | awk '{print int($1 * 1.2)}')
SIZE_DISK_P2=$(( TOTAL_DISK_SIZE_MB - SIZE_DISK_P1 ))
if [ "$SIZE_DISK_P2" -lt 0 ]; then
SIZE_DISK_P2=0
fi
SIZE_DISK=$(( SIZE_DISK_P1 + SIZE_DISK_P2 ))
# # Partition sizes: add 20% overhead for metadata/wasted blocks
# SIZE_DISK_P1=$(du -sm "$TEMP"/p1 | awk '{print int($1 * 1.2)}')
# SIZE_DISK_P2=$(du -sm "$TEMP"/p2 | awk '{print int($1 * 1.2)}')
# SIZE_DISK=$(( SIZE_DISK_P1 + SIZE_DISK_P2 ))
}
```
at_dominique.m…
マルティネです
> その後、G3へファイル転送などしたところdisk fullで失敗する問題が生じています。
> G3のinstall_disk_imageで容量を最大化する方法をご教示頂けないでしょうか。
Armadillo IoT G3 インストール後のシステムでは mmcblk2p2 (root パーティション)がすでに残ってるすべての容量を使っています。
今回、以下の df 出力です:
> /dev/mmcblk2p2 1498720 1102740 301568 79% /overlay/system > none 262144 260276 1868 100% /overlay/ramdisk > overlay 262144 260276 1868 100% /
rootfs に関しては 1.5GB 中の 300MB も空き量がありますので、disk のサイズの問題ではなくて、 メモリ上にある overlayfs の 256MB がいっぱいになりましたね。
運用時は overlayfs を利用して eMMC の消費や電源ロスによる故障のリスクを減らせますが、開発の段階ではインストールしたものが消えたり書き込みできる量が少ないので一時的に無効化してはいかがでしょうか。
overlay の設定は以下の通りです:
https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…
よろしくお願いします
at_dominique.m…
2025年8月6日 17時00分
マルティネです。
> Debian12のルートファイルシステムをベースに、linuxカーネルのコンフィグを変更・ビルド・インストールを試みています。
>
> 生成したsdイメージにてG3へ書き込み後、起動すると(initramfs)でストップする状況です。
>
> linuxカーネルのビルド・インストール手順を確認させて頂けないでしょうか。
製品マニュアルにリンクする形ですみませんが、以下のページで回答になりますでしょうか。
- Linuxカーネルのビルド手順: https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…
- ビルドしたカーネルでイメージを置き換える手順: https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…
ビルド中にコンフィグを変更したい場合は「x1_defconfig」後に同じコマンドで menuconfig を利用して変更できます:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
よろしくお願いします