カメラ付き Raspberry Pi Zero WH を作る方法 (OS 編)

カードリーダーとMicroSDカードとSDカードアダプター

前書き

前回の投稿 ではカメラ付きラズパイゼロを作る方法のハードウェア編を書きました。本投稿では OS 編を書いていきます。

大きな流れとしては、ラズパイ公式サイトから OS を取ってきて、それを MicroSD カードに何らかの方法で焼く形になります。この時に必要になるカードリーダーや MicroSD カードを写真に撮ったのが ↑ の画像です。

そこまでできたら、ラズパイゼロが Wi-Fi に接続できるようにすることと ssh ログインできるように設定します。

今回の作業は僕の愛用パソコンである Lenovo の Chromebook (新品 30,000 円で購入) で行います。

OS (Raspberry Pi OS Lite) をダウンロードする

ラズパイゼロにインストールする OS は Raspberry Pi OS Lite (以降、ラズパイ OS と書く) にします。

他にもラズパイゼロにインストールできる OS は探せばあるんでしょうけどオーソドックスな方法で行きます。

ラズパイドットコムのこのページ から、ラズパイ OS をダウンロードします。

そうすると,以下のファイルがダウンロードできました。

$ cd
$ cd Downloads
$ ls -l 2022-09-22-raspios-bullseye-armhf-lite.img.xz 
-rw-r--r--. 1 chronos chronos 354404132 Dec 4 13:07 2022-09-22-raspios-bullseye-armhf-lite.img.xz
$

xz の形式で圧縮されています。ファイルサイズは 350 MB 程度。xz コマンドで解凍します。

$ xz -d 2022-09-22-raspios-bullseye-armhf-lite.img.xz 
$ ls -l 2022-09-22-raspios*
-rw-r--r--. 1 chronos chronos 1874853888 Dec 4 13:07 2022-09-22-raspios-bullseye-armhf-lite.img
$

回答すると、1.87 GB くらいのファイルになりました。

OS (Raspberry Pi OS Lite) を MicroSD カードに焼く

続いて解凍した img ファイルを MicroSD カードに焼いていきます。これは dd コマンドを使います。

chromebook はノートパソコンに過ぎないので MicroSD カードを差し込める箇所はありません。このため Chromebook にカードリーダーを接続します。

エレコムのカードリーダー MR3-A006

僕が使っているカードリーダーはエレコムの MR3-A006 です。これを Chromebook の USB ポートに接続しますが、その前に lsusb コマンドを実行しておきます。

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 8087:0aaa Intel Corp. 
Bus 001 Device 002: ID 04f2:b6ba Chicony Electronics Co., Ltd EasyCamera
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$

ここでカードリーダーを Chromebook に接続してもう一回 lsusb です。

$ lsusb
Bus 002 Device 003: ID 056e:8009 Elecom Co., Ltd USB Reader
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 8087:0aaa Intel Corp. 
Bus 001 Device 002: ID 04f2:b6ba Chicony Electronics Co., Ltd EasyCamera
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$

青字のところに注目していただくと Elecom なになに USB Reader の文字が見えます。これは、カードリーダーが Chromebook に無事認識されたことを意味します。

ここで df コマンドを実行し、現在 Chromebook がマウントしている状況を確認しておきます。これはこのあとの作業に関わってきます。

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 2.8G 2.4G 343M 88% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 109M 1.8G 6% /dev/shm
tmpfs 1.9G 60M 1.9G 4% /tmp
tmpfs 1.9G 776K 1.9G 1% /run
/dev/loop0 384K 384K 0 100% /run/chromeos-config/private
/dev/mmcblk0p1 20G 16G 3.2G 84% /mnt/stateful_partition
/dev/mmcblk0p8 12M 24K 12M 1% /usr/share/oem
/dev/mapper/encstateful 5.9G 524M 5.4G 9% /mnt/stateful_partition/encrypted
media 1.9G 0 1.9G 0% /media
none 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/loop2 98M 98M 0 100% /usr/share/chromeos-assets/speech_synthesis/patts
imageloader 1.9G 0 1.9G 0% /run/imageloader
/dev/loop3 10M 10M 0 100% /usr/share/chromeos-assets/quickoffice/_platform_specific
/dev/loop4 7.0M 7.0M 0 100% /usr/share/cros-camera/libfs
tmpfs 1.9G 0 1.9G 0% /run/arc/sdcard
drivefs://D6CADCC8E33D3C80CA1C012C846D8545 1.0E 18G 1.0E 1% /media/fuse/drivefs-d84269b07085c4817f90fc644e9c03d5
passthrough 20G 16G 3.2G 84% /run/arc/sdcard/write/emulated
$

そしてカードリーダーに MicroSD カードを差し込みます。(僕の使っているカードリーダーに直接 MicroSD カードを差し込むと MicroSD が認識されないことが多いです。このため、SD カードアダプターに MicroSD カードを差し込んで、SD カードアダプターをカードリーダーに差し込んでいます)

SD カードアダプター (以降 MicroSD カードと書くことにします) をカードリーダーに差し込むと、Chromebook の右下に以下のメッセージが表示されました。

こういうのは、大体が OS (この場合 Chromebook) が MicroSD カードを自動マウントした時に表示されるメッセージです。

再度 df コマンドでマウント状況を確認します。

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 2.8G 2.4G 343M 88% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 106M 1.8G 6% /dev/shm
tmpfs 1.9G 59M 1.9G 4% /tmp
tmpfs 1.9G 784K 1.9G 1% /run
/dev/loop0 384K 384K 0 100% /run/chromeos-config/private
/dev/mmcblk0p1 20G 16G 3.2G 84% /mnt/stateful_partition
/dev/mmcblk0p8 12M 24K 12M 1% /usr/share/oem
/dev/mapper/encstateful 5.9G 524M 5.4G 9% /mnt/stateful_partition/encrypted
media 1.9G 0 1.9G 0% /media
none 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/loop2 98M 98M 0 100% /usr/share/chromeos-assets/speech_synthesis/patts
imageloader 1.9G 0 1.9G 0% /run/imageloader
/dev/loop3 10M 10M 0 100% /usr/share/chromeos-assets/quickoffice/_platform_specific
/dev/loop4 7.0M 7.0M 0 100% /usr/share/cros-camera/libfs
tmpfs 1.9G 0 1.9G 0% /run/arc/sdcard
drivefs://D6CADCC8E33D3C80CA1C012C846D8545 1.0E 18G 1.0E 1% /media/fuse/drivefs-d84269b07085c4817f90fc644e9c03d5
passthrough 20G 16G 3.2G 84% /run/arc/sdcard/write/emulated
/dev/sda1 253M 55M 198M 22% /media/removable/boot
/dev/sda2 14G 2.0G 12G 15% /media/removable/rootfs
$

青字の 2 行が追加されています。MicroSD カードを差し込んだときにこの 2 つ自動マウントされたわけです。MicroSD カードは Chromebook に /dev/sda で認識されていることもわかります。

dd を実行する前にこの 2 つをアンマウントします。

$ sudo umount /dev/sda1
umount: /media/removable/boot: target is busy.
$ sudo umount /dev/sda2
umount: /media/removable/rootfs: target is busy.
$

target is busy と表示されました。何かのプロセスが触っているようです。

lsof コマンドでプロセスを特定します。

$ sudo lsof /dev/sda1 
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mount-pas 19155 chronos 6r DIR 8,1 4096 1 /media/removable/boot
$ sudo lsof /dev/sda2
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mount-pas 19155 chronos 308r DIR 8,2 4096 2 /media/removable/rootfs
$

プロセス ID 19155 が何かやっているようです。

$ ps -ef | grep 19155 | grep -v grep
chronos 19155 19149 0 12:50 ? 00:00:00 /usr/bin/mount-passthrough --source=/media/removable --dest=/run/arcvm/media/removable --fuse_umask=007 --fuse_uid=10058 --fuse_gid=1077 --android_app_access_type=full
$

mount-passthrough というコマンドが何なのかわかりませんが kill します。

$ kill -9 19155
$ ps -ef | grep 19155 | grep -v grep
$

プロセスがなくなりました。再度アンマウントしてみます。

$ sudo umount /dev/sda1
$ sudo umount /dev/sda2
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 2.8G 2.4G 343M 88% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 119M 1.8G 7% /dev/shm
tmpfs 1.9G 60M 1.9G 4% /tmp
tmpfs 1.9G 788K 1.9G 1% /run
/dev/loop0 384K 384K 0 100% /run/chromeos-config/private
/dev/mmcblk0p1 20G 16G 3.2G 84% /mnt/stateful_partition
/dev/mmcblk0p8 12M 24K 12M 1% /usr/share/oem
/dev/mapper/encstateful 5.9G 525M 5.4G 9% /mnt/stateful_partition/encrypted
media 1.9G 0 1.9G 0% /media
none 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/loop2 98M 98M 0 100% /usr/share/chromeos-assets/speech_synthesis/patts
imageloader 1.9G 0 1.9G 0% /run/imageloader
/dev/loop3 10M 10M 0 100% /usr/share/chromeos-assets/quickoffice/_platform_specific
/dev/loop4 7.0M 7.0M 0 100% /usr/share/cros-camera/libfs
tmpfs 1.9G 0 1.9G 0% /run/arc/sdcard
drivefs://D6CADCC8E33D3C80CA1C012C846D8545 1.0E 18G 1.0E 1% /media/fuse/drivefs-d84269b07085c4817f90fc644e9c03d5
passthrough 20G 16G 3.2G 84% /run/arc/sdcard/write/emulated
$

アンマウントされました。やっと dd を実行できる準備が整いました。

$ sudo dd if=./2022-09-22-raspios-bullseye-armhf-lite.img of=/dev/sda bs=128k
14304+0 records in
14304+0 records out
1874853888 bytes (1.9 GB, 1.7 GiB) copied, 134.047 s, 14.0 MB/s
$

134 s と書いてあるので 2 分ほどで dd できたことになります。

dd コマンド終了と同時に Chromebook 右下にポップアップメッセージで「リムーバブルデバイスが検出されました」のメッセージが表示されました。「また自動マウントされたな」と思いました。df で見てみると、

$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 2.8G 2.4G 343M 88% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 107M 1.8G 6% /dev/shm
tmpfs 1.9G 57M 1.9G 3% /tmp
tmpfs 1.9G 788K 1.9G 1% /run
/dev/loop0 384K 384K 0 100% /run/chromeos-config/private
/dev/mmcblk0p1 20G 16G 3.2G 84% /mnt/stateful_partition
/dev/mmcblk0p8 12M 24K 12M 1% /usr/share/oem
/dev/mapper/encstateful 5.9G 525M 5.4G 9% /mnt/stateful_partition/encrypted
media 1.9G 0 1.9G 0% /media
none 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/loop2 98M 98M 0 100% /usr/share/chromeos-assets/speech_synthesis/patts
imageloader 1.9G 0 1.9G 0% /run/imageloader
/dev/loop3 10M 10M 0 100% /usr/share/chromeos-assets/quickoffice/_platform_specific
/dev/loop4 7.0M 7.0M 0 100% /usr/share/cros-camera/libfs
tmpfs 1.9G 0 1.9G 0% /run/arc/sdcard
drivefs://D6CADCC8E33D3C80CA1C012C846D8545 1.0E 18G 1.0E 1% /media/fuse/drivefs-d84269b07085c4817f90fc644e9c03d5
passthrough 20G 16G 3.2G 84% /run/arc/sdcard/write/emulated
/dev/sda2 1.5G 1.1G 279M 80% /media/removable/rootfs
/dev/sda1 255M 50M 206M 20% /media/removable/boot
$

マウントされていました。これは好都合なのでこのままにして次の作業に進みます。

ラズパイ OS の SSH 設定

ラズパイゼロで SSH を有効にするための設定は ssh という名前の空ファイルを置くだけです。

この ssh ファイルですが、置く場所は boot ディレクトリの中になります。具体的なパスは df コマンドから特定していきます。

$ df -h | fgrep /dev/sda
/dev/sda2 1.5G 1.1G 279M 80% /media/removable/rootfs
/dev/sda1 255M 50M 206M 20% /media/removable/boot
$

/media/removable/boot ディレクトリに ssh ファイルを作れば良いです。

$ ls -l /media/removable/boot
total 49868
-rwxr-xr-x. 1 chronos chronos-access 18693 Aug 30 10:43 COPYING.linux
-rwxr-xr-x. 1 chronos chronos-access 1594 Aug 30 10:43 LICENCE.broadcom
-rwxr-xr-x. 1 chronos chronos-access 28367 Aug 30 10:43 bcm2708-rpi-b-plus.dtb
-rwxr-xr-x. 1 chronos chronos-access 27739 Aug 30 10:43 bcm2708-rpi-b-rev1.dtb
-rwxr-xr-x. 1 chronos chronos-access 28060 Aug 30 10:43 bcm2708-rpi-b.dtb
-rwxr-xr-x. 1 chronos chronos-access 27981 Aug 30 10:43 bcm2708-rpi-cm.dtb
-rwxr-xr-x. 1 chronos chronos-access 29216 Aug 30 10:43 bcm2708-rpi-zero-w.dtb
-rwxr-xr-x. 1 chronos chronos-access 27805 Aug 30 10:43 bcm2708-rpi-zero.dtb
-rwxr-xr-x. 1 chronos chronos-access 29254 Aug 30 10:43 bcm2709-rpi-2-b.dtb
-rwxr-xr-x. 1 chronos chronos-access 29253 Aug 30 10:43 bcm2709-rpi-cm2.dtb
-rwxr-xr-x. 1 chronos chronos-access 30119 Aug 30 10:43 bcm2710-rpi-2-b.dtb
-rwxr-xr-x. 1 chronos chronos-access 32482 Aug 30 10:43 bcm2710-rpi-3-b-plus.dtb
-rwxr-xr-x. 1 chronos chronos-access 31871 Aug 30 10:43 bcm2710-rpi-3-b.dtb
-rwxr-xr-x. 1 chronos chronos-access 30106 Aug 30 10:43 bcm2710-rpi-cm3.dtb
-rwxr-xr-x. 1 chronos chronos-access 31179 Aug 30 10:43 bcm2710-rpi-zero-2-w.dtb
-rwxr-xr-x. 1 chronos chronos-access 31179 Aug 30 10:43 bcm2710-rpi-zero-2.dtb
-rwxr-xr-x. 1 chronos chronos-access 51955 Aug 30 10:43 bcm2711-rpi-4-b.dtb
-rwxr-xr-x. 1 chronos chronos-access 52087 Aug 30 10:43 bcm2711-rpi-400.dtb
-rwxr-xr-x. 1 chronos chronos-access 52540 Aug 30 10:43 bcm2711-rpi-cm4.dtb
-rwxr-xr-x. 1 chronos chronos-access 49870 Aug 30 10:43 bcm2711-rpi-cm4s.dtb
-rwxr-xr-x. 1 chronos chronos-access 52460 Aug 30 10:43 bootcode.bin
-rwxr-xr-x. 1 chronos chronos-access 154 Sep 22 00:23 cmdline.txt
-rwxr-xr-x. 1 chronos chronos-access 2075 Sep 22 00:04 config.txt
-rwxr-xr-x. 1 chronos chronos-access 7262 Aug 30 10:43 fixup.dat
-rwxr-xr-x. 1 chronos chronos-access 5399 Aug 30 10:43 fixup4.dat
-rwxr-xr-x. 1 chronos chronos-access 3170 Aug 30 10:43 fixup4cd.dat
-rwxr-xr-x. 1 chronos chronos-access 8379 Aug 30 10:43 fixup4db.dat
-rwxr-xr-x. 1 chronos chronos-access 8379 Aug 30 10:43 fixup4x.dat
-rwxr-xr-x. 1 chronos chronos-access 3170 Aug 30 10:43 fixup_cd.dat
-rwxr-xr-x. 1 chronos chronos-access 10228 Aug 30 10:43 fixup_db.dat
-rwxr-xr-x. 1 chronos chronos-access 10226 Aug 30 10:43 fixup_x.dat
-rwxr-xr-x. 1 chronos chronos-access 145 Sep 22 00:23 issue.txt
-rwxr-xr-x. 1 chronos chronos-access 6269408 Aug 30 10:43 kernel.img
-rwxr-xr-x. 1 chronos chronos-access 6629712 Aug 30 10:43 kernel7.img
-rwxr-xr-x. 1 chronos chronos-access 7040160 Aug 30 10:43 kernel7l.img
-rwxr-xr-x. 1 chronos chronos-access 8192917 Aug 30 10:43 kernel8.img
drwxr-xr-x. 2 chronos chronos-access 24576 Sep 22 00:04 overlays
-rwxr-xr-x. 1 chronos chronos-access 2973536 Aug 30 10:43 start.elf
-rwxr-xr-x. 1 chronos chronos-access 2249280 Aug 30 10:43 start4.elf
-rwxr-xr-x. 1 chronos chronos-access 803964 Aug 30 10:43 start4cd.elf
-rwxr-xr-x. 1 chronos chronos-access 3744808 Aug 30 10:43 start4db.elf
-rwxr-xr-x. 1 chronos chronos-access 2996680 Aug 30 10:43 start4x.elf
-rwxr-xr-x. 1 chronos chronos-access 803964 Aug 30 10:43 start_cd.elf
-rwxr-xr-x. 1 chronos chronos-access 4816712 Aug 30 10:43 start_db.elf
-rwxr-xr-x. 1 chronos chronos-access 3720360 Aug 30 10:43 start_x.elf
$ touch /media/removable/boot/ssh
$ ls -l !$
ls -l /media/removable/boot/ssh
-rwxr-xr-x. 1 chronos chronos-access 0 Dec 4 15:47 /media/removable/boot/ssh
$

0 バイトの ssh ファイルの作成ができました。

ラズパイ OS の Wi-Fi 設定

次が wpa_supplicant.conf です。同じく boot ディレクトリに保管するのですが、Wi-Fi 設定を定義する必要があります。

必要な情報は、Wi-Fi の SSID とパスワードです。注意点としてはラズパイゼロは 2.4GHz の Wi-Fi にしか対応していないので 2.4GHz の SSID とパスワードが必要です。

$ cd /media/removable/boot/ 
$ vi wpa_supplicant.conf

(vi の操作は割愛)
 
$ cat wpa_supplicant.conf 
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
    ssid="your_wifi_network_name"
    psk="your_wifi_network_password"
    key_mgmt=WPA-PSK
}

wpa_supplicant.conf 内の ssid と psk のところに、接続させたい Wi-Fi の SSID とパスワードを記載して保存すればオーケーです。

以上で、ラズパイ OS の設定は完了です。MicroSD カードをアンマウントします。

$ cd
$ df -h | fgrep /dev/sda
/dev/sda2 1.5G 1.1G 279M 80% /media/removable/rootfs
/dev/sda1 255M 50M 206M 20% /media/removable/boot
$ sudo umount /dev/sda1
$ sudo umount /dev/sda2
$ df -h | fgrep /dev/sda
$

ラズパイゼロの起動確認

MicroSD カードをカードリーダーから取り出してラズパイゼロにセットします。

 

電源ケーブル (USB ケーブル) をラズパイゼロに接続すると給電されるためラズパイ OS が起動してきます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください