CUBE SUGAR CONTAINER

技術系のこと書きます。

macOS で Raspberry Pi OS のブートイメージを SD カードに書き込む

久しぶりに Raspberry Pi を扱う機会があったので、思い出しがてら書いておく。

使った環境は次の通り。

$ sw_vers
ProductName:        macOS
ProductVersion:     14.2.1
BuildVersion:       23C71

使ったカードリーダーはこちら。 特にドライバなどをインストールしなくても認識してくれる。

Raspberry Pi と SD カードは相性問題があるので、起動するかはレビューを確認したり以下のサイトで調べておくと良い。

elinux.org

書き込むイメージファイルを用意する

まずは公式サイトからイメージファイルをダウンロードしてくる。

$ wget --trust-server-names https://downloads.raspberrypi.org/raspios_arm64_latest

念のためファイルのハッシュが一致することを確認する。

$ shasum -a 256 2023-12-05-raspios-bookworm-arm64.img.xz     
5c54f0572d61e443a32dfa80aa8d918049814bfc70ab977f2d545eef45f1658e  2023-12-05-raspios-bookworm-arm64.img.xz

確認できたらファイルを展開する。

$ unxz 2023-12-05-raspios-bookworm-arm64.img.xz
$ file 2023-12-05-raspios-bookworm-arm64.img
2023-12-05-raspios-bookworm-arm64.img: DOS/MBR boot sector; partition 1 : ID=0xc, start-CHS (0x40,0,1), end-CHS (0x3ff,3,32), startsector 8192, 1048576 sectors; partition 2 : ID=0x83, start-CHS (0x3ff,3,32), end-CHS (0x3ff,3,32), startsector 1056768, 10346496 sectors

書き込み先を確認する

カードリーダーに SD カードを挿入したら Mac につなげる。 自動で認識するはずなので diskutil を使ってデバイスを確認する。

$ diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *1.0 TB     disk0
   1:             Apple_APFS_ISC Container disk1         524.3 MB   disk0s1
   2:                 Apple_APFS Container disk3         994.7 GB   disk0s2
   3:        Apple_APFS_Recovery Container disk2         5.4 GB     disk0s3

...

/dev/disk6 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.9 GB    disk6
   1:             Windows_FAT_32 boot                    46.0 MB    disk6s1
   2:                      Linux                         15.9 GB    disk6s2

上記では /dev/disk6 が SD カードに対応したデバイスになる。

確認できたら、マウントされているパーティションを全てアンマウントする。

$ sudo diskutil unmountDisk /dev/disk6
Unmount of all volumes on disk6 was successful

イメージを書き込む

dd コマンドを使ってブートイメージを書き込む。 書き込み先のデバイスを間違えると macOS がインストールされている領域が壊れる恐れがあるので注意する。 必ず先ほど確認した SD カードリーダーのデバイスで、かつ RAW デバイス (s がついていない) を指定する。

$ sudo dd bs=1m if=2023-12-05-raspios-bookworm-arm64.img of=/dev/disk6
5568+0 records in
5568+0 records out
5838471168 bytes transferred in 728.015780 secs (8019704 bytes/sec)

書き込みが終わると自動でマウントされるはず。 中身はこんな感じになる。

$ ls /Volumes/bootfs 
LICENCE.broadcom        bcm2711-rpi-400.dtb     fixup.dat           initramfs8          start4cd.elf
bcm2710-rpi-2-b.dtb     bcm2711-rpi-cm4-io.dtb      fixup4.dat          initramfs_2712          start4db.elf
bcm2710-rpi-3-b-plus.dtb    bcm2711-rpi-cm4.dtb     fixup4cd.dat            issue.txt           start4x.elf
bcm2710-rpi-3-b.dtb     bcm2711-rpi-cm4s.dtb        fixup4db.dat            kernel8.img         start_cd.elf
bcm2710-rpi-cm3.dtb     bcm2712-rpi-5-b.dtb     fixup4x.dat         kernel_2712.img         start_db.elf
bcm2710-rpi-zero-2-w.dtb    bootcode.bin            fixup_cd.dat            overlays            start_x.elf
bcm2710-rpi-zero-2.dtb      cmdline.txt         fixup_db.dat            start.elf
bcm2711-rpi-4-b.dtb     config.txt          fixup_x.dat         start4.elf

あとはディスクをアンマウントした上で物理的にカードを抜き取る。

$ sudo diskutil umount /Volumes/bootfs 
Volume bootfs on disk6s1 unmounted

抜き取ったカードを Raspberry Pi にぶっさして起動すればおっけー。

めでたしめでたし。