技術コラム(第28回)Raspberry Pi 3B+の使い方 ~ROM化編~
初めに
第25回、第27回でRaspberry Piを起動してを利用できるようになるまでについて説明をしました。詳しくは、以下リンクの説明をご覧ください。
Raspberry Piを組込機器利用する場合、電源を長時間ONのままにしたり、シャットダウンの操作をせずに電源コネクタを引き抜くといった使い方をすることがあります。こういった使い方をすると、以下の問題が発生します。
- 長時間電源ON
→ SDカードへのアクセスが長時間続きSDカードの寿命が短くなる。 - シャットダウンの操作をせず電源コネクタを引き抜き
→ ファイル保存中に引き抜かれた場合ファイルが壊れる可能性がある。
そういった問題はSDカードをROM化(読込専用)にすることで防ぐことができます。今回はその方法をご紹介させていただきます。
なお、この記事は以下のサイトを参考にさせていただいております。
ROM化準備
以下コマンドを入力してください。最後のコマンドで再起動したら、ROM化されています。
cd ~
sudo bash
apt-get install git rsync gawk busybox bindfs
dphys-swapfile swapoff
dphys-swapfile uninstall
update-rc.d dphys-swapfile disable
systemctl disable dphys-swapfile
git clone https://github.com/josepsanzcamp/root-ro.git
rsync -va root-ro/etc/initramfs-tools/* /etc/initramfs-tools/
mkinitramfs -o /boot/initrd.gz
echo initramfs initrd.gz >> /boot/config.txt
reboot
それぞれのコマンドについて解説していきます。
cd ~
ホームディレクトリに移動する。
sudo bash
rootへログインする。
apt-get install git rsync gawk busybox bindfs
git、rsync、gawk、busybox、bindfsをインストールする。
dphys-swapfile swapoff
dphys-swapfile uninstall
update-rc.d dphys-swapfile disable
systemctl disable dphys-swapfile
swapを止めて、dphys-swapfileのサービスを無効化する。
git clone https://github.com/josepsanzcamp/root-ro.git
https://github.com/josepsanzcamp/root-ro.gitをgitクローンする。
rsync -va root-ro/etc/initramfs-tools/* /etc/initramfs-tools/
gitクローンでできたroot-ro/etc/initramfs-tools/*を/etc/initramfs-tools/へコピーする。
mkinitramfs -o /boot/initrd.gz
echo initramfs initrd.gz >> /boot/config.txt
ファイルシステムを作成し、/boot/config.txtにそのファイルシステム(initramfs initrd.gz)を書き込む。
reboot
再起動する。
ROM化解除スクリプト
ROM化を解除するときは以下スクリプトを実行すれば、再起動後にROM化が解除されます。
#!/bin/sh
if [ -e /mnt/boot-ro/config.txt ]; then
sudo mount -o remount,rw /dev/mmcblk0p1
sudo grep -v initramfs /mnt/boot-ro/config.txt > /tmp/config.txt
sudo cp /tmp/config.txt /mnt/boot-ro/config.txt
sudo reboot
else
echo SD card is write enabled.
fi
以下にシェルの内容を解説をします。
/mnt/boot-ro/config.txtが存在するとき、ROM化解除処理を実施します。
sudo mount -o remount,rw /dev/mmcblk0p1
読み書きを許可して/dev/mmcblk0p1を再マウントする。
sudo grep -v initramfs /mnt/boot-ro/config.txt > /tmp/config.txt
sudo cp /tmp/config.txt /mnt/boot-ro/config.txt
/mnt/boot-ro/config.txtよりinitramfsが含まれる行を削除する。
sudo reboot
再起動する。
ROM化スクリプト
再びROM化したいときは以下スクリプトを実行すれば、再起動後にROM化されます。
#!/bin/sh
if [ -e /mnt/boot-ro/config.txt ]; then
echo SD card is write disabled.
else
sudo grep -v initramfs /boot/config.txt > /tmp/config.txt
sudo echo initramfs initrd.gz >> /tmp/config.txt
sudo cp /tmp/config.txt /boot/config.txt
sudo reboot
fi
以下にシェルの内容を解説をします。
/mnt/boot-ro/config.txtが存在しない時、ROM化処理を実施します。
sudo grep -v initramfs /boot/config.txt > /tmp/config.txt
sudo echo initramfs initrd.gz >> /tmp/config.txt
sudo cp /tmp/config.txt /boot/config.txt
/boot/config.txt のinitramfsが含まれる行を削除し、最後にinitramfs initrd.gzを書き込む。
sudo reboot
再起動する。
最後に
これでRaspberry Pi 3B+をROM化できました。Raspberry Pi 3B+と記載していますが、Raspberry Pi 4BなどLinuxOSを搭載できるRaspberry Piでも同じ作業でROM化できると思われます。
組込開発.comでは、Raspberry Piを利用した開発実績もあります。案件では、Raspberry Piのファームウェアだけでなく、ハードウェア開発やクラウド環境の構築なども対応しています。
組込開発.comは、ファームウェアだけでなく、ハードウェアやアプリケーションの開発も一括して承ることができますので、お困りの際はぜひお問い合わせください。
投稿者プロフィール
- メインはソフト担当ですが、筐体設計も担当します。プログラミング言語はPythonやC言語の経験が多いです。また、たいチャレ(詳細は右バーナー参照)にも参加しており、日々、様々なことを学びながら業務に取り組んでいます。
最新の投稿
- 技術コラム2022年12月26日技術コラム(第29回)3Dプリンタについて ~部品強度について~
- 技術コラム2022年12月26日技術コラム(第28回)Raspberry Pi 3B+の使い方 ~ROM化編~
- 技術コラム2022年12月22日技術コラム(第27回)Raspberry Pi 3B+の使い方 ~セキュリティー設定編~
- たいチャレ2022年12月22日2022年 たいチャレ日誌 ~オーディオプレイヤー開発前編>~