2017年には新しい命令セットアーキテクチャである
はじめに
RISC-V
ISAとは,
- ※1
- 実際にCPUを作るためには,
ISAに従った動作にするために 「どう作るか」 を定めるマイクロアーキテクチャなど, 他にも様々な事柄を決める必要があります。
RISC-Vは2010年頃からカリフォルニア大学バークレー校で設計が始まり,
RISC-Vが注目されている理由のひとつが,
それに対してRISC-V Foundationは複数の企業・
RISC-V用のツールチェインについて
残念ながらRISC-Vは,
特定のアーキテクチャの実機が存在しない場合や存在したとしてもコンパイルするのにリソースが足りない場合は,
幸い
もちろんツールチェインをビルドするためのツールチェインが必要になりますが,
LXDを使っているなら,
- ※2
- ただし権限の都合上,
LXDの初期設定ではルートファイルシステムイメージの作成ができないことに注意してください。これについては次回以降に説明します。
以下に,
1. LXDのインストール $ sudo snap install lxd 2. LXDの初期設定 $ sudo lxd init Do you want to configure a new storage pool (yes/no) [default=yes]? Name of the new storage pool [default=default]: Name of the storage backend to use (dir, btrfs, ceph, lvm, zfs) [default=zfs]: Create a new ZFS pool (yes/no) [default=yes]? Would you like to use an existing block device (yes/no) [default=no]? Size in GB of the new loop device (1GB minimum) [default=23GB]: Would you like LXD to be available over the network (yes/no) [default=no]? Would you like stale cached images to be updated automatically (yes/no) [default=yes]? Would you like to create a new network bridge (yes/no) [default=yes]? What should the new bridge be called [default=lxdbr0]? What IPv4 address should be used (CIDR subnet notation, “auto” or “none”) [default=auto]? What IPv6 address should be used (CIDR subnet notation, “auto” or “none”) [default=auto]? LXD has been successfully configured. 3. ユーザーをLXDグループに追加 $ sudo adduser $USER lxd 4. コンテナイメージの作成 $ lxc launch ubuntu:16.04 riscv $ lxc exec riscv bash 5. SSH公開鍵の登録 $ sudo -i -u ubuntu ssh-import-id gh:(GitHubのアカウント名) $ apt update $ apt full-upgrade -y
クロスコンパイル環境の構築
まずはRISC-Vのツールチェインをビルドするためのツールチェインを導入しましょう。
$ sudo apt install autoconf automake autotools-dev curl \ device-tree-compiler libmpc-dev libmpfr-dev libgmp-dev \ libusb-1.0-0-dev gawk build-essential bison flex texinfo \ gperf libtool patchutils bc zlib1g-dev pkg-config libncurses5-dev
次にriscv-toolsリポジトリとそのgit submoduleを導入します。submoduleのsubmoduleなどもダウンロードするため,
$ git clone https://github.com/riscv/riscv-tools.git $ cd riscv-tools $ git submodule update --init --recursive
submoduleのダウンロード後にディレクトリのサイズを確認したところ,
riscv-tools本体はただのビルドスクリプトで,
- riscv-isa-sim:RISC-Vの簡易シミュレーターです。
- riscv-fesvr:ホスト側で動作する
「Front-end server」 です。Host-Target InterFace (HTIF)を経由してターゲットプロセッサーと通信します。 - riscv-pk:最低限のシステムコールを処理するProxy Kernelです。ホスト上のシミュレーター上で動かすことを想定しています。
- riscv-opcodes:オペコードの定義リストです。
- riscv-tests:テストツールです。
- riscv-llvm:LLVMにRISC-Vサポートを追加したコードです。
- riscv-gnu-toolchain:GCCやglibc,
qemuなどGNUツールチェインやエミュレーターです。 - riscv-openocd:JTAG-ICEにも対応したデバッガです。
ビルドしたツールは環境変数RISCVの先にインストールされるようになっています。そこで今回はホームディレクトリに任意のディレクトリを作って,
- ※3
- RISCVの値は
./
のconfigure --prefix
オプションに渡しているだけなので,build. shを見ながら自分で実行しても良いでしょう。
$ mkdir $HOME/riscv/ $ export RISCV=$HOME/riscv/
あとはビルドスクリプトを実行するだけです。
$ time ./build.sh Starting RISC-V Toolchain build process (中略) RISC-V Toolchain installation completed! real 77m30.212s user 70m26.496s sys 5m59.994s
IvyBridge世代でi5-3317UのCPUと4GiBのメモリーで,build.
からはパラレルビルドする方法がわからなかったのですが,-j
」
コンパイル後の$RISCVの下には400MiB弱のバイナリが用意されることになります。