te_kawasaki
2014年7月6日 15時52分
SDカード上に、ユーザーランドの圧縮イメージを置き、オンボードのフラッシュからのブートの様にRAMディスク上に展開して起動する方法は無いでしょうか?
FAQかもしれませんが?ドキュメントに見当たりませんでしたので質問させて頂きます。
よろしくお願いいたします。
コメント
te_kawasaki
返答遅くなりました。
弊社では、電源管理も不要な単機能の装置を作ることが多く、ルートファイルシステムはRAMDISK上に展開して動かす様にしています。
この場合、ファームウェアアップデートを行うには、netflash等を使いオンボードフラッシュ上のイメージを書き換える必要がありますが、SDから展開起動できれば、ユーザーに納めた後でもSDカードの入れ替えだけでアップデートが行えるのでコンソール操作などを行わずに済むからです。
SDに起動スクリプトを仕込んでそこからフラッシュ書き込みと言う手もありますが、840だとユーザーランドのイメージ書き込みに長時間掛かるので出来れば、SDから直接展開したいです。
以上です、よろしくお願いいたします。
at_daisuke.sasaki
佐々木大輔です。
回答いただきありがとうございます。
SDブート + ReadOnlyマウント で、やりたい事はできないでしょうか?
「SD交換だけで、ユーザーに納めた後でもSDカードの入れ替えだけでアップデートがしたい」
というのはSDブートで解決できると思います。
懸念されているのは、電源断などで、SDカードのデータが壊れてしまう事だと思いますが、
これについてはユーザーランドをReadOnlyでマウントしておくことで回避します。
※一時的にデータを書き込みたい領域については「tmpfs」などをマウントしておくことで確保します。
上記で解決できるといいのですが、いかがでしょうか?
te_kawasaki
at_takenoshita
こんにちは。
竹之下です。
アイデアレベルで試していませんが、SDカード上にrootfsのアーカイブを置いておき、
それをramfsに展開した後pivot_rootすることで実現できないでしょうか?
下記のような手順になるかと思います。
- 一度、フラッシュメモリから展開したRAMDISK上のユーザーランドで起動(initの代わりにshが起動するようにしておく)
- SDカードをマウント(mount /dev/mmcblk0p1 /mnt)
- ramfsをマウント (mkdir /new-root; mount -t ramfs none /new-root)
- SDカード上のアーカイブをramfsに展開(tar xzf /mnt/rootfs.tgz -C /new-root)
- ramfsにpivot_rootする(cd /new-root; pivot_root . old-root)
- 新しいrootfsにchrootする(exec chroot . sh dev/console 2>&1)
- 元のrootfsをアンマウントする(umount /old-root)
- 新しいrootfsのinitを実行
pivot_rootに関しては、manページも参照してください。
http://man7.org/linux/man-pages/man8/pivot_root.8.html
http://man7.org/linux/man-pages/man2/pivot_root.2.html
※pivot_rootコマンドは、busyboxのutil-linuxにも含まれています。
at_daisuke.sasaki
2014年7月22日 17時04分
佐々木大輔です。
ユーザーランドの圧縮イメージをRAMに展開し、起動することは現状できません。
差し支えなければ、なぜ、そのようにしたいのか教えて頂けますか?