Debian 13 (Trixie) でriscv は公式サポートされたアーキテクチャになっていて、 RISC-Vボード NezhaでもDebian 本家で配布されているカーネルやインストールイメージをそのまま利用できる。
ただし、このボードは起動に使うファームウェアの大半をmicroSDの特定のオフセットから読む都合で、 公式に配布されているイメージと起動に必要なファームウェアを合わせて配置する必要がある。 大まかな作業のながれはこう:
- u-bootのイメージをビルドする
- または私がビルドしたイメージを使うのでも良い
- microSDにEFI System Partition (ESP) を作る。
- u-bootのイメージを決まった場所に書く。
- Debian Installer のEFI実行ファイルをESP に配置して起動。
u-bootのイメージをビルドする
これはFreeBSDのページに手順を書いた。
ビルド済みイメージもそこにあるので、
手元にu-boot-sunxi-with-spl.binがあればOK.
EFI System Partitionを作る
単にmicroSD 先頭をクリアしてからFAT パーティションをtype 0xef作っているだけだが、 最初のセクタを8192 にしているところがコツ。 Allwinner D1 はmicroSD の先頭のあたりからファームウェアを読むので、この領域と重複しないように若干空けておく必要があるのだ。
$ sudo dd if=/dev/zero of=/dev/sdc bs=1024 count=8192
$ sudo fdisk /dev/sdc
fdisk (util-linux 2.41.2) へようこそ。
ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
書き込みコマンドを使用する際は、注意して実行してください。
デバイスには認識可能なパーティション情報が含まれていません。
新しい DOS (MBR) ディスクラベルを作成しました。識別子は 0xb27c3772 です。
コマンド (m でヘルプ): n
パーティションタイプ
p 基本パーティション (0 プライマリ, 0 拡張, 4 空き)
e 拡張領域 (論理パーティションが入ります)
選択 (既定値 p): p
パーティション番号 (1-4, 既定値 1): 1
最初のセクタ (2048-124735487, 既定値 2048): 8192
最終セクタ, +/-セクタ番号 または +/-サイズ{K,M,G,T,P} (8192-124735487, 既定値 124735487): +512M
新しいパーティション 1 をタイプ Linux、サイズ 512 MiB で作成しました。
コマンド (m でヘルプ): t
パーティション 1 を選択
16 進数コード または別名 (L で利用可能なコードを一覧表示します): ef
パーティションのタイプを 'Linux' から 'EFI (FAT-12/16/32)' に変更しました。
コマンド (m でヘルプ): w
パーティション情報が変更されました。
ioctl() を呼び出してパーティション情報を再読み込みします。
ディスクを同期しています。
$ sudo mkfs.vfat -F 16 -n ESPRV64 /dev/sdc1
最後のボリュームラベルをESPRV64としているところは何でも良いはずで、好きな名前を付けたら良い。
u-bootのイメージを決まった場所に書く
これはNezha のおまじないなので、深く考えずに特定のオフセットにspl+u-boot+OpenSBIのイメージを書く。
$ sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdc bs=1024 seek=128
Debian Installer のEFI実行ファイルをESP に配置して起動
Debian 13 (Trixie) では、
公式配布物に含まれるmini.efiを使うとDebian-Installer が起動した。
sudo mount /dev/sdc1 /mnt curl -LOf --compressed https://deb.debian.org/debian/dists/trixie/main/installer-riscv64/current/images/netboot/mini.efi sudo mkdir -p /mnt/EFI/boot sudo cp mini.efi /mnt/EFI/boot/bootriscv64.efi sudo umount /mnt
この状態でmicroSD をNezha に挿入し電源を入れる。 シリアルコンソールを見て待っていると、カーネルが起動して、なぜか一回再起動する。 コールドブートだとカーネル起動中に一回再起動するのだ。 諦めかけたところで放置しておくと、二回目の起動は無事に完了するのでDebian-Installer が動いている。 後は通常のPC でのDebianインストールと同じ。
インストール後は通常のPC と同じような感じで利用可能だ。 起動ログ.
豆知識: MACアドレスが起動のたびに変わる
u-boot でHit any key to stop autoboot
と言われたときにすかさずキーを押して、saveenvするとMACアドレスは固定になる。
Hit any key to stop autoboot: 0 => saveenv Saving Environment to FAT... OK