RaspberryPi

[メモ] ラズパイの起動イメージファイル作成

概要

  • ラズパイの起動イメージファイル作成する。
  • 2つパーティション作って、1つ目をvfat(boot関係のファイルをコピー)、2つめをext4(rootfs)にして、/boot/cmdline.txtとか、/etc/fstabをうまく設定すれば、起動するはず。
  • ddでイメージファイルを作成、losetupでオフセット指定して、ループバックデバイスとして、使用する。

環境

  • Raspberry Pi 3 model B
  • Raspbian: なんでもできるはず. 今回は、以下にてテスト。
    • 2017-09-07-raspbian-stretch.imgにて、イメージ作成作業
    • 2016-03-12-jessie-minibianをSD焼いて、stretchにアップデートして、ソースとして使用。

手順

  1. ソースディスクをマウントする(/mnt/boot_src/mnt/root_src)

    sudo mkdir /mnt/{boot,root}_src
    sudo mount /dev/sda1 /mnt/boot_src
    sudo mount /dev/sda2 /mnt/root_src
    
  2. rootユーザにて作業
    sudo bash

  3. 以下、こんな感じ。

    # イメージファイル
    IMG_FILE=/mnt/rpi_sd.img
    
    # イメージファイルを作成 768MBytes
    dd if=/dev/zero of=${IMG_FILE} bs=1M count=768
    
    # パーティション作成 1st:vfat / 2nd:ext4
    fdisk ${IMG_FILE}
    n
    p
    1
    8192
    93814
    n
    p
    2
    94208
    
    t
    1
    c
    t
    2
    83
    p
    w
    
    # イメージファイルの中身を見る
    fdisk -lu ${IMG_FILE}
    
    # (表示例)
    # pi@raspberrypi:~ $ fdisk -lu ${IMG_FILE}
    # Disk /mnt/rpi_sd.img: 768 MiB, 805306368 bytes, 1572864 sectors
    # Units: sectors of 1 * 512 = 512 bytes
    # Sector size (logical/physical): 512 bytes / 512 bytes
    # I/O size (minimum/optimal): 512 bytes / 512 bytes
    # Disklabel type: dos
    # Disk identifier: 0x8170d656
    # Device           Boot Start     End Sectors  Size Id Type
    # /mnt/rpi_sd.img1       8192   93814   85623 41.8M  c W95 FAT32 (LBA)
    # /mnt/rpi_sd.img2      94208 1572863 1478656  722M 83 Linux
    # pi@raspberrypi:~ $
    
    # !!! 環境依存 !!!
    # それぞれのパーティションを /dev/loopX として、設定する。
    # Partition1は、Start 8192 で、Sectors=85623なので、こんな感じ
    losetup --offset $((512*8192))  --sizelimit $((512*85623))   --show --find ${IMG_FILE}
    # /dev/loop0 と表示されるはず
    
    # Partition2は、Start 94208 で、Sectors=1478656なので、こんな感じ
    losetup --offset $((512*94208)) --sizelimit $((512*1478656)) --show --find ${IMG_FILE}
    # /dev/loop1 と表示されるはず
    
    # それぞれフォーマット
    mkfs -t vfat -n boot /dev/loop0
    mkfs -t ext4 -L rootfs /dev/loop1
    
    # マウントフォルダを作って、マウント。
    mkdir /tmp/{boot,root}
    mount /dev/loop0 /tmp/boot
    mount /dev/loop1 /tmp/root
    
    # 
    # ファイルをコピーする
    cp -r /mnt/boot_src/* /tmp/boot/
    cp -a /mnt/root_src/* /tmp/root/
    
    # 必要あれば、以下を編集する。
    # /tmp/boot/cmdline.txt で root= の指定
    # /tmp/root/etc/fstab の ファイルシステムの指定
    
    # 
    sync
    
    # アンマウント
    umount /dev/loop{0,1}
    losetup -d /dev/loop0
    losetup -d /dev/loop1
    
  4. 作成した、rpi_sd.imgをEtcherなどで、SDに焼いて起動を確認。