🖥️

LicheeRV Dock(RISC-V)でベアメタル開発を目指す 1日目

に公開

はじめに

本稿ではLichee RV Dockを使ってベアメタル開発を目指した模様をメモします。
間違いなどありましたらお知らせください。

用意するもの

  • Lichee RV Dock
  • AE-UM232R(秋月電子)
  • Windows11のパソコン
    • TeraTermがインストールされているもの。もしくはシリアルで流れてくるデータが見えるアプリなら何でも。
    • お話の成り行き上wslをインストールすることになるのである程度HDDに余裕があるもの(gccだけでも「Warning: git clone takes around 6.65 GB of disk and download size」だそうです[1]
  • USBシリアルケーブル(上記AE-UM232RとPCを接続するためのもの)

おおよその計画

ベアメタルはどんなCPUにとっても非常に難易度の高いものです。今回のAllwinner D1もおそらくすんなりとはいけません。そのためまず第一フェーズではFELというシリアルからつながる緊急起動モードにて感触をためす。第二フェーズではU-bootやDRAMの初期化などは配布されているものを使用してそのうえで起動してみる、第三フェーズで完全ベアメタルを目指します。

まずはコンパイル環境の作成から

Windows上で動作するLinuxとして、wslインストールを行いました。
(Ubuntuなどが動く環境が他にあれば絶対必要ということではありません。)
WindowsメニューからWindows Power Shell→右クリックで管理者権限で起動

> wsl --install

Ubuntuを起動して、GNUツールチェインをインストールする。
まずは依存パッケージのインストール。
こちらのサイトを参考にさせていただきました。

sudo apt-get update 
sudo apt-get install autoconf automake autotools-dev curl python3 python3-pip python3-tomli \ libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool \ patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev libslirp-dev

リポジトリからソースを取得、コンフィグ。ここで
--enable-multilib オプション RV32/RV64 両方のビルドを可能にする

git clone https://github.com/riscv-collab/riscv-gnu-toolchain 
cd riscv-gnu-toolchain
./configure --prefix=$HOME/riscv --enable-multilib
make -j$(nproc)

はまったこと

発生した問題の対応方法含め、以下で説明していきます。

bfd.infoが失敗

Makefile:1780: recipe for target 'doc/bfd.info' failed
make[4]: *** [doc/bfd.info] Error 127

bfd.info(binutils のドキュメント生成)が失敗しました。bfd.infoはgccに必須であるためgccインストールまで達していませんでした。

sudo apt-get update 
sudo apt-get install autoconf automake autotools-dev curl python3 python3-pip python3-tomli \
libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool \
patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev libslirp-dev

MAKEINFOがMissing

MAKEINFO doc/bfd.info
/mnt/c/WorkSpace/RISCV/riscv-gnu-toolchain/binutils/missing: 81: /mnt/c/WorkSpace/RISCV/riscv-gnu-toolchain/binutils/missing: makeinfo: not found
WARNING: 'makeinfo' is missing on your system.
         You should only need it if you modified a '.texi' file, or
         any other file indirectly affecting the aspect of the manual.
         You might want to install the Texinfo package:
         <http://www.gnu.org/software/texinfo/>
         The spurious makeinfo call might also be the consequence of
         using a buggy 'make' (AIX, DU, IRIX), in which case you might
         want to install GNU make:
         <http://www.gnu.org/software/make/>
Makefile:1780: recipe for target 'doc/bfd.info' failed
make[4]: *** [doc/bfd.info] Error 127
make[4]: Leaving directory '/mnt/c/WorkSpace/RISCV/riscv-gnu-toolchain/build-binutils-newlib/bfd'

調べてみたところtexinfoが不足している?可能性があったため、それをインストールしてみます。

sudo apt-get update 
sudo apt-get install texinfo
sudo apt-get install texlive
makeinfo --version

インストールされたら、再ビルド。

C:\の下はダメ!!

ところが、まだMAKEINFOがMissingであると言ってきています。

MAKEINFO doc/bfd.info
(略)
Makefile:1780: recipe for target 'doc/bfd.info' failed
make[4]: *** [doc/bfd.info] Error 127
make[4]: Leaving directory '/mnt/c/WorkSpace/RISCV/riscv-gnu-toolchain/build-binutils-newlib/bfd'

実はこのログで注目すべきは '/mnt/c/WorkSpace/~' というパスで、wslからCの下にインストールしようとすると、binutilsは必ず失敗する、という問題でした。

\wsl$\Ubuntu\home(自分のユーザ名)

こちらに設定して、再度チャレンジします。

Ubuntu 18.04 / 20.04の問題

さらに調べていって分かったのですが、Ubuntu 18.04 / 20.04 では、最新の riscv-gnu-toolchain(2024〜2025)は binutils のビルドが失敗する既知の問題があるそうです。この問題の解決にはUbuntuを22などにアップする必要があります。
Windows Power Shellを管理者権限にて下記。

wsl --install -d Ubuntu-22.04

続いて最初に行った「sudo apt-get update・・・」から全てやり直し。

wslが壊れた

これを実行すると。

wsl --install -d Ubuntu-22.04
Unknown command: --install
WSL
Wsman Shell commandLine, version 0.2.1
(略)

installというオプションがUnknownとは。よくわからなかったので、この場合は公開されているインストーラをGitHubからダウンロード、実行しました。

GDBのビルドが停止

./configureをすると、下記で停止します。

97:configure: error: Building GDB requires GMP 4.2+, and MPFR 3.1.0+.
106:make: *** [stamps/build-gdb-newlib] Error 1

GDBのビルド時に必要なGMP4.2もしくはそれ以上、MPFR3.1.0もしくはそれ以上、この2点が無いためエラーです、と言っているようです。

sudo apt update 
sudo apt install libgmp-dev libmpfr-dev libmpc-dev

expatライブラリが不足

上記インストールは完了し、再度チャレンジしますが・・・

configure: error: expat is missing or unusable
Makefile:11346: recipe for target 'configure-gdb' failed
make[2]: *** [configure-gdb] Error 1

expatという開発ヘッダが必要で、GDBのconfigure時に必要だそうです。

sudo apt update 
sudo apt install libexpat1-dev

このようにして、必要としているものをインストールします。インストールしたら再度チャレンジします。

flex、bisonがありません

'ada-lex.c'を処理しようとしましたが、flexがないため処理できません。
'.y' を処理しようとしましたが、bisonがないため処理できません。

/home/iida/WorkSpace/RISCV/riscv-gnu-toolchain/gdb/missing: flex: not found
WARNING: 'flex' is missing on your system.
         You should only need it if you modified a '.l' file.
         You may want to install the Fast Lexical Analyzer package:
         <http://flex.sourceforge.net/>
Makefile:2734: recipe for target 'ada-lex.c' failed
make[3]: *** [ada-lex.c] Error 1
~(略)~
/home/iida/WorkSpace/RISCV/riscv-gnu-toolchain/gdb/missing: bison: not found
WARNING: 'bison' is missing on your system.
         You should only need it if you modified a '.y' file.
         You may want to install the GNU Bison package:
         <http://www.gnu.org/software/bison/>

これも同じような感じで、必要なもののインストールを行います。

sudo apt update 
sudo apt install flex bison

GCCのLTO部分のビルドが依存パッケージ不足

以下のメッセージで止まってしまいました。

Makefile:1210: recipe for target 'lto-compress.o' failed
make[2]: *** [lto-compress.o] Error 1

これ、調べた限りではGCC12 以降でLTO圧縮にzstdを使うようになってそれがインストールされていないため起きているものらしいです。
そのため、下記を実行します。

sudo apt update 
sudo apt install libzstd-dev zstd
sudo apt install libz-dev

ここまでやってようやくインストールが完了しました。

$ riscv64-unknown-elf-gcc --version
riscv64-unknown-elf-gcc (g5115c7e44) 15.2.0
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

次にxfelをインストール

第一フェーズとしてはFELモードというものを使用してLicheeRV Dockにアクセスするわけですが、ボード側がFELモードに入ったとして通信ができるようになるまでの下準備(DDRメモリの初期化など)のため、xfelというツールの手を借りることにします。

イメージはこんな感じで、ハード的にはUSB-Cを一本接続するだけですが、LicheePI側に制御を出すのが今回インストールするxfelというアプリから。で応答としてはUSB-UARTを使って返送してきます。
ところが、wsl2ではUSBデバイスが直接扱えないという問題があり、Windows側にxfelをインストールする必要があるようです
ここからWindows用のxfelをダウンロードしておきます。
https://github.com/xboot/xfel/releases

上記をダウンロードしたら、Windows Power Shellから実行します。

脚注
  1. GitHubより(https://github.com/riscv-collab/riscv-gnu-toolchain) ↩︎

Discussion