#始めに
Raspberry Pi4でもUSBからブートできるようになり、各種ディストリビューションでも動作するようになってきました。64bit対応のものでもできるようになってきましたが、まだ手順がいろいろあり、一発で動作するようにはなっておりません。特にArchlinuxは32bit版はできるが、64bit版ができない状態でした。やっと方法の文章を見つけたので、試したところ、MBRディスク限定ですが成功したので、手順を公開しておきます。
#参考サイト
- [SOLVED] RPi 4- aarch64 enable USB early in boot process
- Raspberry pi 4とArchlinux 64bitとKVMとqemuでWindows10 WOAを動かす
#準備するもの
- Raspberry Pi 4(USB boot対応済のもの)
- SDカード 16 or 32GB 仮環境の構築
- SSD or HDD 2TB未満のもの( GPT対応不可のため )
- Linux PC 環境作成に使用
#インストラクション
まず、SDカードにArchlinux 64bitの環境をインストールします。linux PCを使い、こちらの記事に記載されている「Archlinuxのインストール」の部分でインストールを行ってください。インストールが完了したら、同記事の「Raspberry Pi 4の環境設定」のうちのsudoを設定するところまで完了してください。以降、ユーザpiで入り直したところからの手順となります。
まず、ベースの環境をインストールして、ワークディレクトリを作ります。
$ sudo pacman -S base-devel
$ mkdir work
$ cd work
次にPCなどで、ブラウザで以下のアドレスをアクセスしてください。(SSHなどでPCからraspberry piに接続していることを想定)
ここに出ている5つのテキストファイルを同名でworkディレクトリ内に作成してください。
0001-rpi-increase-space-for-kernel.patch
PKGBUILD
boot.txt.v2
boot.txt.v3
mkscr
多分viなどの画面にコピペすることになりますが、
この時、
0001-rpi-increase-space-for-kernel.patch
は最後空行が必要、それ以外は最後空行はNGとなります。(実行時にエラーとなります。)
次にPKGBUILDを開きます。
$ vi PKGBULID
以下の変更をします。
(1) pkgnameを uboot-raspberrypi-rc にします。
(2) pkgver を 2020.10rc2 にします。
(3) md5sums の最初の行のチェックサムを 'bae5280c7ce49961c3722fa9019535bf' にします。
出来上がったら、実行してビルドします。
$ makepkg -si
ビルドが無事終了すると、最後に出来上がったパッケージをインストールしようとしてエラーで落ちます。なので、手動でインストールします。
$ mkdir tmp
$ tar xf uboot-raspberrypi-rc-2020.10rc2-2-aarch64.pkg.tar.xz -C tmp
$ sudo cp tmp/boot/* /boot
次にイニシャライズ部分の変更をします。
$ sudo vi /etc/mkinitcpio.conf
MODULES=()
の行を
MODULES=(pcie_brcmstb)
に変更して、以下を実行します。
$ sudo mkinitcpio -P
これで、USB boot可能なイメージが出来上がりました。Raspberry pi4はシャットダウンしてください。
このイメージをlinux PCを用いて、SSD/HDDに写し取ります。SDカードイメージには、/bootと/の2つのイメージが入っているため、SDカードと同じ要領でパーティションを作成します。このパーティションにSDカードのパーティション内容をコピーします。コピーするときはrootユーザで実行してください。また、/をコピーするときは、cp -rpとpオプションを指定して、オーナー情報等を保存してください。
これでやっとUSB bootができます。
Raspberry Pi4にSSD/HDDだけを取り付け、電源を入れてください。立ち上がると思います。
Archlinux aarch64版の良いところは、別記事にもあるように最初からKVMがついており、aarch64のVMを高速に動作させることができることです。そのためには、容量に余裕のあるSSD/HDDで環境構築できるといろいろ良いことがあると思います。よかったら試してみてください。