kima
2023年11月15日 11時34分
お世話になります。
動作中のArmadillo-640の動作イメージをコピーする方法として、
dumprootfsでルートファイルシステムのアーカイブを作成し、
make-install-disk-image.shでSDカード用のインストールイメージを
作成する方法を試しています。
現在、以下の手順で、インストールディスクを作成しています。
動作中のA-640の以下のファイルは標準から変更してあります。
・uBoot → ブートローダー(UART3コンソール)v13 (Armadilloサイトからダウンロード)
・/boot/uImage → 変更(開発環境ATDEでビルド)
・/boot/a640.dtb → 変更(開発環境ATDEでビルド)
●手順
クローン元のArmadillo-640にUSBメモリを挿し、
/boot/uImageをAtmark社からダウンロードしたもの(Linuxカーネルv62)に差し替え、
# dumprootfs
を実行すると、リブート後、ダンプが始まります。
※ ダンプの様子は、COM3で確認しています。
→ USBメモリ内に、dump_rootfs_YYYYMMDD.tar.gz が生成されます。
開発環境ATDEに、make_install_disk_image.zip を展開し、
# make-install-disk-image.sh (引数。。。)
を実行すると、
インストールイメージ(*.img)が生成されます。
これを、microSDカードに書き込み、
クローン先のArmadillo-640にインストールします。
●質問1)
この手順で、
ddなどでルートファイルシステムのイメージをコピーする方法で問題になる、
複製されては困るデータ(SSHの秘密鍵、UUIDなど)の
問題は解決しているのでしょうか?
●質問2)
dumprootfsを実行する際、
/boot/uImageが、開発環境ATDEでビルドしたuImageのままだと、
dumprootfsでリブート後、ダンプが開始できません。
uImageをAtmark社からダウンロードしたものに差し替えると、ダンプができます。
自分でビルドしたuImageでも、dumprootfsが動作するようにはできませんか?
カーネルをビルドする際、必要なオプションがあるのでしょうか?
●質問3)
dumprootfsで生成されたdump_rootfs_YYYYMMDD.tar.gzには、
クローン元の/home/atmark/内に保存しておいた、
uImageおよびa640.dtb ファイルが削除されていました。
/exclude.listには、これらを削除するような記載はしてありません。
削除しないようにすることは可能でしょうか?
(なぜ削除されるのでしょうか?)
●質問4)
インストールイメージを作成(make-install-disk-image.sh)する際、
引数に指定するuImageとa640.dtbに、
開発環境ATDEでビルドした自作のカーネルとデバイスツリーを指定すると、
インストーラー実行時に、これらが/boot/にコピーされていないようです。
代わりに、Armadilloサイトからダウンロードしたファイルを指定すると、
正常に/boot/にコピーされます。
手順や、ビルドの方法に問題があるのでしょうか?
よろしくお願いいたします。
コメント
at_kojiro.yamada
> > ●質問3)
> > dumprootfsで生成されたdump_rootfs_YYYYMMDD.tar.gzには、
> > クローン元の/home/atmark/内に保存しておいた、
> > uImageおよびa640.dtb ファイルが削除されていました。
> > /exclude.listには、これらを削除するような記載はしてありません。
> > 削除しないようにすることは可能でしょうか?
> > (なぜ削除されるのでしょうか?)
>
> dump_rootfs*tar.gz の中に残っているはずですね。
> こちらで動作確認してみますので少々お待ちください。
こちらでは再現できませんでした。
/boot/uImage を /home/atmark/uImage にコピーして、dumprootfs を実行してみましたが、
ちゃんと dump_rootfs*.tar.gz の中に /home/atmark/uImage が存在していました。
どこに問題があるのか切り分けていくのが良いと思います。
[armadilloまたはATDE]# tar tf dump_rootfs_YYYYMMDD.tar.gz | grep /home/atmark
上記コマンドで /home/atmark/uImage と /home/atmark/a640.dtb が表示されれば、 dump_rootfs_YYYYMMDD.tar.gz の中にそれらのファイルが含まれています。
含まれていた場合は、上記と同様のコマンドでインストールディスク内の /images/dump_rootfs_YYYYMMDD.tar.gz にファイルが含まれているかどうか確認してみてください。
含まれていなかった場合は、dumprootfs コマンドを実行したArmadillo の /etc/dumprootfs/exclude.list の中に /home/atmark に関する行がないか確認してみてください。
kima
> > > ●質問3)
> > > dumprootfsで生成されたdump_rootfs_YYYYMMDD.tar.gzには、
> > > クローン元の/home/atmark/内に保存しておいた、
> > > uImageおよびa640.dtb ファイルが削除されていました。
> > > /exclude.listには、これらを削除するような記載はしてありません。
> > > 削除しないようにすることは可能でしょうか?
> > > (なぜ削除されるのでしょうか?)
>
> [armadilloまたはATDE]# tar tf dump_rootfs_YYYYMMDD.tar.gz | grep /home/atmark >
> 上記コマンドで /home/atmark/uImage と /home/atmark/a640.dtb が表示されれば、
> dump_rootfs_YYYYMMDD.tar.gz の中にそれらのファイルが含まれています。
【結果】
ご確認いただき、ありがとうございます。
以前、dumprootfsしたときのデータを、上記tar tfコマンドで確認しましたが、
やはりuImage, a640.dtbはありませんでした。
質問させていただいたときには書いていませんでしたが、これらは、
(追加・変更したファイルをまとめておくため。。)
/home/atmark/xxxxxx_armadillo_custom_files/boot/uImage
/home/atmark/xxxxxx_armadillo_custom_files/boot/a640.dtb
というカタチで保存してあります。
dumprootfsは、下記、excludes.listに従い、
"/boot/uImage"と、"/boot/a640.dtb"は、削除してるようなので、
"~/boot/uImage"も削除されてしまっているのでしょうか?
excludes.listは、以下のとおりです。
/excludes.list /boot/* /root/.bashhistory /home/*/.bashhistory /var/log/*
at_kojiro.yamada
> > > > ●質問3)
> > > > dumprootfsで生成されたdump_rootfs_YYYYMMDD.tar.gzには、
> > > > クローン元の/home/atmark/内に保存しておいた、
> > > > uImageおよびa640.dtb ファイルが削除されていました。
> > > > /exclude.listには、これらを削除するような記載はしてありません。
> > > > 削除しないようにすることは可能でしょうか?
> > > > (なぜ削除されるのでしょうか?)
> (略)
> dumprootfsは、下記、excludes.listに従い、
> "/boot/uImage"と、"/boot/a640.dtb"は、削除してるようなので、
> "~/boot/uImage"も削除されてしまっているのでしょうか?
>
> excludes.listは、以下のとおりです。
>
> /excludes.list > /boot/* > /root/.bashhistory > /home/*/.bashhistory > /var/log/* >
こちらの現象、initramfs側の dumprootfs のバグでした。
ご迷惑おかけしてしまい申し訳ございません。
excludes.list を実際に使う前に、処理の都合で各行の先頭の / を削除していたのが原因でした。
先頭の / を削除すると boot/* となり、パスを問わずあらゆる boot/ 以下のファイルを除外する、という意味になっています。
今月余力がなく来月になってしまうかもしれませんが、修正します。
今できる対策として、excludes.list の各行の先頭の / を /./ にすることでこの問題を回避することができます。
上記 excludes.list を修正すると以下のようになります。
/./excludes.list /./boot/* /./root/.bashhistory /./home/*/.bashhistory /./var/log/*
kima
at_kojiro.yamada
> こちらの現象、initramfs側の dumprootfs のバグでした。
> ご迷惑おかけしてしまい申し訳ございません。
>
> excludes.list を実際に使う前に、処理の都合で各行の先頭の / を削除していたのが原因でした。
> 先頭の / を削除すると boot/* となり、パスを問わずあらゆる boot/ 以下のファイルを除外する、という意味になっています。
> 今月余力がなく来月になってしまうかもしれませんが、修正します。
12月になってしまいましたが、
こちらのバグを initramfs v2.1.2 ( dump_rootfs v1.1.2 ) で修正しました。
ニュース[1] で「/etc/dumprootfs/excludes.list 内の絶対パスを相対パスとして扱ってしまうバグを修正」としている項目が本件の修正です。
[1] https://armadillo.atmark-techno.com/news/20231226/software-update-a600
kima
> > ●質問2)
> > dumprootfsを実行する際、
> > /boot/uImageが、開発環境ATDEでビルドしたuImageのままだと、
> > dumprootfsでリブート後、ダンプが開始できません。
> > uImageをAtmark社からダウンロードしたものに差し替えると、ダンプができます。
> > 自分でビルドしたuImageでも、dumprootfsが動作するようにはできませんか?
> > カーネルをビルドする際、必要なオプションがあるのでしょうか?
>
> おそらく、カーネルイメージに結合されている initramfs が古いのだと思います。
>
> https://download.atmark-techno.com/armadillo-640/source/
> から最新の initramfs_a600-[VERSION].cpio.gz をダウンロードし、
> Armadillo-640 製品マニュアルの 「initramfs アーカイブへのシンボリックリンク作成」の手順を再度実行した後に (ln -sf でシンボリックリンクを上書きできます)
> カーネルをビルドしてみてください。
【結果】
ご指摘の通り、カーネルビルド時に結合するinitramfsを、
initramfs_a600-2.1.0.cpio.gz
↓
initramfs_a600-2.1.1.cpio.gz
に変更することで、
dumprootfsが動作するようになりました。
ありがとうございました。
※他の質問に頂いたコメントについても、確認のうえ対応いたしますので、お待ち下さい。
kima
> > ●質問1)
> > この手順で、
> > ddなどでルートファイルシステムのイメージをコピーする方法で問題になる、
> > 複製されては困るデータ(SSHの秘密鍵、UUIDなど)の
> > 問題は解決しているのでしょうか?
>
> 解決されていません。
>
> まずは、コピーしたくないファイルのパスを /etc/dumprootfs/excludes.list に追加して
> そのファイルを dumprootfs の対象から外す必要があります。
>
> コピーされないようにした後の対応はモノによって違うので、
> 分からなければまた聞いていただければと思います。
> その際は、別のトピックにしていただけると助かります。
>
【回答】
●SSHの秘密鍵については、
Armadilloを使った製品量産時に各Armadilloにopenssh-serverを効率的にインストールする方法
https://armadillo.atmark-techno.com/blog/10899/10011
https://armadillo.atmark-techno.com/blog/10899/10043
を参考にトライしてみます。
●UUIDについては、
なにか、参考になる情報はございますでしょうか?
よろしくお願いします。
kima
> > ●質問4)
> > インストールイメージを作成(make-install-disk-image.sh)する際、
> > 引数に指定するuImageとa640.dtbに、
> > 開発環境ATDEでビルドした自作のカーネルとデバイスツリーを指定すると、
> > インストーラー実行時に、これらが/boot/にコピーされていないようです。
> > 代わりに、Armadilloサイトからダウンロードしたファイルを指定すると、
> > 正常に/boot/にコピーされます。
> >
> > 手順や、ビルドの方法に問題があるのでしょうか?
>
> 認識を合わせたいので少し質問させてください。
>
> - 「~インストーラー実行時に、これらが/boot/にコピーされていないようです。」とは、
> A. インストールディスク(つまりSDカード)上
> B. インストール後のArmadilloのeMMC上
> のどちらでしょうか
>
> - 「自身でビルドした uImage が存在せず、かわりに他の uImage が配置されている」
> という状態であってるでしょうか
>
【結果】
質問4については、
私が、質問2の内容と勘違いしているところがあり、
質問内容が適切ではありませんでした。
ご面倒おかけしました。
結果として、以下の方法で、
インストールイメージを生成することで、
SDカードからインストーラーが動作し、
「想定通りに」インストールすることができました。
sudo ./build.sh \
a640 u-boot-a600-console-uart3-v2018.03-at13.imx
<自作uImage> \
<自作dtb> \
<自作rootfs> \
core/uImage \
armadillo-640-v4.14-at61.dtb
従来は、5・6個目の引数を指定せずに実行しておりました。
自作のuImage, a640.dtb を使用時には、5・6個目の引数に、
SDカードから起動する用のuImageとdtbが必要。
ということでよろしいでしょうか?
上記の引数設定が、最適なのかわかりませんので、
ご指摘があればお願い致します。
at_kojiro.yamada
2023年11月15日 13時57分
> ●質問1)
> この手順で、
> ddなどでルートファイルシステムのイメージをコピーする方法で問題になる、
> 複製されては困るデータ(SSHの秘密鍵、UUIDなど)の
> 問題は解決しているのでしょうか?
解決されていません。
まずは、コピーしたくないファイルのパスを /etc/dumprootfs/excludes.list に追加して
そのファイルを dumprootfs の対象から外す必要があります。
コピーされないようにした後の対応はモノによって違うので、
分からなければまた聞いていただければと思います。
その際は、別のトピックにしていただけると助かります。
>
> ●質問2)
> dumprootfsを実行する際、
> /boot/uImageが、開発環境ATDEでビルドしたuImageのままだと、
> dumprootfsでリブート後、ダンプが開始できません。
> uImageをAtmark社からダウンロードしたものに差し替えると、ダンプができます。
> 自分でビルドしたuImageでも、dumprootfsが動作するようにはできませんか?
> カーネルをビルドする際、必要なオプションがあるのでしょうか?
おそらく、カーネルイメージに結合されている initramfs が古いのだと思います。
https://download.atmark-techno.com/armadillo-640/source/
から最新の initramfs_a600-[VERSION].cpio.gz をダウンロードし、
Armadillo-640 製品マニュアルの 「initramfs アーカイブへのシンボリックリンク作成」の手順を再度実行した後に (ln -sf でシンボリックリンクを上書きできます)
カーネルをビルドしてみてください。
>
> ●質問3)
> dumprootfsで生成されたdump_rootfs_YYYYMMDD.tar.gzには、
> クローン元の/home/atmark/内に保存しておいた、
> uImageおよびa640.dtb ファイルが削除されていました。
> /exclude.listには、これらを削除するような記載はしてありません。
> 削除しないようにすることは可能でしょうか?
> (なぜ削除されるのでしょうか?)
dump_rootfs*tar.gz の中に残っているはずですね。
こちらで動作確認してみますので少々お待ちください。
>
> ●質問4)
> インストールイメージを作成(make-install-disk-image.sh)する際、
> 引数に指定するuImageとa640.dtbに、
> 開発環境ATDEでビルドした自作のカーネルとデバイスツリーを指定すると、
> インストーラー実行時に、これらが/boot/にコピーされていないようです。
> 代わりに、Armadilloサイトからダウンロードしたファイルを指定すると、
> 正常に/boot/にコピーされます。
>
> 手順や、ビルドの方法に問題があるのでしょうか?
認識を合わせたいので少し質問させてください。
- 「~インストーラー実行時に、これらが/boot/にコピーされていないようです。」とは、
A. インストールディスク(つまりSDカード)上
B. インストール後のArmadilloのeMMC上
のどちらでしょうか
- 「自身でビルドした uImage が存在せず、かわりに他の uImage が配置されている」
という状態であってるでしょうか