2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CM4 (Raspberrypi) の ブートデバイス切り替え(eMMC->NVME)に苦労した話

Last updated at Posted at 2023-03-07

世界的にRaspberry PIが入手しづらくなっている現在,Compute Module 4略してCM4も選択肢の一つ.
元々は組み込み用のようですがサポートデバイス(例えばこんなのとか)を使えば行けるかなと思い購入しました.
が,オンボードの記憶デバイスではあっという間に足りなくなり,
拡張ボード経由で接続したNVME SSDからのブートにしようとしたら苦労したのでシェアします

使ったデバイス

  • CM4 (eMMC8G,Memory8G)
  • 拡張ボード(Waveshare Mini Base Board(A)): 公式ページはこちら
    (筆者マレーシア在住で,こちらのセットを購入しました)
  • SSD(128GB)

    苦労するポイント

    世の中には散々RaspberryPIをUSBやSSD起動する方法が拡散されていますが本件の場合

    • オンボードストレージが8GBモデルのためLITE Ver.しかインストールできずGUIが使えない(eMMC32GB版は買えませんでして..)
    • CM4はオンボードでのブートローダ書き換えができない
      以上の点がかなりの参考記事を適応不可能にしています

    やること

    基本的にやることは次の通りです

    • オンボードeMMCへのOSインストール(本記事では割愛1
    • ブートローダの書き換え(起動デバイス順序変更)
    • SSDへのファイルの転送

    ブートローダの書き換え

    筆者Windows環境をメインとしていますので,git bash上での作業を説明します(元記事にはMACでの例もあったはず)

    rpibootのコピー

    インストールされたrpibootを別の場所にコピー2

    > copy 'C:\Program Files (x86)\Raspberry Pi\' [どこか中のファイルを編集できるところ]\rpiboot
    

    boot.confの編集

    recoveryディレクトリの中のboot.confを編集します

    boot.conf
    BOOT_ORDER=0xf25641
    

    となっているのを6(NVME)が1(オンボードeMMC)より右側に来るようにします(右から起動順になるようです)

    boot.conf
    BOOT_ORDER=0xf25146
    

    pieeprom.binのダウンロード及び生成

    以下の操作はgit bashで行います

    ~$ cd [rpibootのコピー先]/rpiboot/recovery #リカバリーディレクトリに入る
    recovery$ rm -f pieeprom.original.bin #ブートローダイメージオリジナルを削除
    recovery$ curl -L -o pieeprom.original.bin https://github.com/raspberrypi/rpi-eeprom/raw/master/firmware/stable/pieeprom-2022-12-07.bin #ブートローダオリジナルイメージをダウンロード
    

    最後のバイナリデータはこちらを参照して日付の新しいファイル3を選ぶ,もしくは直接クリックしてダウンロードすればいいです
    ダウンロードしたら先ほど編集したboot.confをもとにブートローダを生成します

    recovery$ ./update-pieeprom.sh
    

    おそらく次のような出力を目にするはずです

    /home/pi/usbboot/tools/rpi-eeprom-config --config boot.conf --out pieeprom.bin pieeprom.original.bin set +x 
    new-image: pieeprom.bin 
    source-image: pieeprom.original.bin 
    config: boot.conf
    

    CM4ボードへの転送

    以下のコマンドを実行し,書き込みモードにしたCM44をUSBでPCに接続します

    recovery$ ../rpiboot.exe -d .
    

    (最後の.をお忘れなく)
    OSをインストールした時のように下記のような出力が得られると思います

    RPIBOOT: build-date Dec 16 2022 version 20221215~105525 5a25e04b
    Loading: recovery/bootcode4.bin
    Waiting for BCM2835/6/7/2711…
    Loading: recovery/bootcode4.bin
    Sending bootcode.bin
    Successful read 4 bytes
    Waiting for BCM2835/6/7/2711…
    Loading: recovery/bootcode4.bin
    Second stage boot server
    Loading: recovery/config.txt
    File read: config.txt
    Loading: recovery/pieeprom.bin
    Loading: recovery/pieeprom.bin
    Loading: recovery/pieeprom.sig
    File read: pieeprom.sig
    Loading: recovery/pieeprom.bin
    File read: pieeprom.bin
    Second stage boot server done
    

    SSDへのファイル転送(CUI環境)

    以下の作業はRaspberryPI上で行いますのでRaspberryPIを起動し,コンソールを繋ぐなりSSHで入るなりしてください
    (起動順を変更済みでもSSD上に何もなければオンボードeMMCないしSDカードから起動します)

    rpi-cloneのダウンロード及び修正

    CUI環境ではrpi-cloneというプログラムで転送できますのでgithubから落とします

    git clone https://github.com/billw2/rpi-clonet.git
    

    そのままではNVMEデバイスのマウントに失敗するので1060行目あたりを修正します

    rpi-clone(old)
    if [[ $dst_disk == *"mmcblk"* ]]
    

    rpi-clone(new)
    if [[ $dst_disk == *"mmcblk"* || $dst_disk == *"nvme"* ]]
    

    デバイス名を確認して

    $ lsblk
    NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    mmcblk0      179:0    0   7.3G  0 disk
    |-mmcblk0p1  179:1    0   256M  0 part /boot
    `-mmcblk0p2  179:2    0     7G  0 part /
    mmcblk0boot0 179:32   0     4M  1 disk
    mmcblk0boot1 179:64   0     4M  1 disk
    nvme0n1      259:0    0 119.2G  0 disk
    |-nvme0n1p1  259:1    0   256M  0 part
    `-nvme0n1p2  259:2    0   119G  0 part
    

    nvme0n1というのが今回の対象になります

    $ rpi-clone nvme0n1
    {省略}
    

    再起動して,例えばdf -hやlsblkコマンドなどでMOUNT POINTが移動していることを確認

    $ lsblk
    NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    mmcblk0      179:0    0   7.3G  0 disk
    |-mmcblk0p1  179:1    0   256M  0 part 
    `-mmcblk0p2  179:2    0     7G  0 part 
    mmcblk0boot0 179:32   0     4M  1 disk
    mmcblk0boot1 179:64   0     4M  1 disk
    nvme0n1      259:0    0 119.2G  0 disk
    |-nvme0n1p1  259:1    0   256M  0 part /boot
    `-nvme0n1p2  259:2    0   119G  0 part /
    

    まとめ

    CM4のBoot loaderがNVMEに対応したのが比較的最近なためか,なかなかまだ情報があまりなく,
    大半の記事でboot.confによる起動順の変更は言及されていましたが,
    pieeprom.origin.binの更新がないと起動順が変更できませんでした.

    参考

    基本的には下記ページを参考にしました
    It took me 2 months to boot CM4 from NVMe
    2か月苦労した筆者の記事を3日足らずで見つけられてよかった..

    1. 例えばこちら参照

    2. CM4をセットアップする際に既にインストールしたかと思いますが,デフォルトでProgram Files以下に入ったり管理者権限がないと編集できなかったり面倒なので改めて別の場所に移しました

    3. この記事を執筆した時点では2023-01-11が最新でした

    4. CM4インストールできてるならやり方は分かりますよね(サポートデバイス依存なので書き(け)ません)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?