【日本語】Duo用イメージをビルドする

アプリケーションパッケージなどを同梱してBuildrootイメージをビルドすることができます。

用意するもの

・Ubuntu 22.04 LTS以降をインストールしてあるPC
・MicroSDカード
・SDカードリーダー
・Milk-V Duo

ソースをクローンする

どこか適当なわかりやすいディレクトリに移動し、

git clone https://github.com/milkv-duo/duo-buildroot-sdk

でクローンします。(ちょっと時間がかかります)
cd duo-buildroot-sdkでディレクトリに入っておきます。

必要なパッケージ

公式ドキュメント曰く:
pkg-config
build-essential
ninja-build
automake
autoconf
libtool
wget
curl
git
gcc
libssl-dev
bc
slib
squashfs-tools
android-sdk-libsparse-utils
jq
python3-distutils
scons
parallel
tree
python3-dev
python3-pip
device-tree-compiler
ssh
cpio
fakeroot
libncurses5
flex
bison
libncurses5-dev
genext2fs
rsync
unzip
dosfstools
mtools
tcl
openssh-client
cmake
expect
以上のパッケージ類が必要なようです(多いな)

sudo apt install pkg-config build-essential ninja-build automake autoconf libtool wget curl git gcc libssl-dev bc slib squashfs-tools android-sdk-libsparse-utils jq python3-distutils scons parallel tree python3-dev python3-pip device-tree-compiler ssh cpio fakeroot libncurses5 flex bison libncurses5-dev genext2fs rsync unzip dosfstools mtools tcl openssh-client cmake expect

でもこれをコピペしてしまえば楽でしょう(依存関係を破壊しないように注意)。

ビルド

./build.shをそのまま実行するとヘルプが表示されます。
./build.shの引数にボードの名前を入力すればそれに適した設定でビルドされます。
または、引数にlunchと入れれば対話形式で選択できます。

milkv-duo
milkv-duo-spinand
milkv-duo-spinor
milkv-duo256m
milkv-duo256m-spinand
milkv-duo256m-spinor
milkv-duos-emmc
milkv-duos-sd

筆者はDuo(64MB)を使用しているので、引数にmilkv-duoをつけてコンパイルしました。

初回のコンパイル時にツールチェーン(800MBくらい)が自動でダウンロードされます。
ビルドには時間がかかります。

ビルドが完了すると./outディレクトリ直下にmilkv-****.imgのようなフォーマットでファイルが出てきます。
ファイル名の途中に日付と時刻が入るので、ビルド日時順で見分けがつきます。

出てきたファイルを起動してみるセクションと同様にSDカードに焼いて起動できたら成功です。
機能的には標準のイメージと全く変わりません。

メモリをフル活用する

起動してみるセクションで先述した通り、RAMの半分がカメラのアルゴリズム用に持っていかれており、Linuxでは28MBしか使えません。
使えるだけの全部のメモリを使いたいなら、duo-buildroot-sdk/build/boards/cv180x/cv1800b_milkv_duo_sd/memmap.pyの43行目にある

ION_SIZE = 26.80078125 * SIZE_1M

26.80078125を0に書き換えてビルドします。

Duo 256Mの場合 Duo 256Mの場合はパスが duo-buildroot-sdk/build/boards/cv181x/cv1812cp_milkv_duo256m_sd/memmap.py になります。変更する場所は同様です。

パッケージを入れてみる

Buildrootには動的なパッケージ管理システムがありません。
なので、ビルド時にすべて同梱してしまう仕組みになっています。
BuildrootはTUIベースでの設定が可能になっており、難解な操作無しにパッケージを追加できます。
ただしBuildrootに関してはQiitaだけでもたくさんの記事が偉大なる先人たちによって書かれているので、ここで説明することは最低限、本質的なことについては割愛させてもらいます…

必要なファイル類を揃えるためにも、ビルドセクションを参考に一回ビルドを終わらせておきます。

設定ファイルのディレクトリに移動します。

cd buildroot-2021.05/output/milkv-duo_musl_riscv64/

設定画面を開きます。

make menuconfig


ここでは試しにCoremarkを入れてみます。(お好きなパッケージをどうぞ)

設定を保存します。(ちょっと時間がかかります)

make savedefconfig

cd /path/to/duo-buildroot-sdkでBuildroot SDKのディレクトリにもどり、./build.shを実行してビルドします。

出てきたファイルを起動してみるセクションと同様にSDカードに焼き、電源を投入します。

シェルにログインして先ほどビルドしたEEMBC Coremarkを走らせてみます。

[root@milkv-duo]~# coremark
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 12782
Total time (secs): 12.782000
Iterations/Sec   : 2347.050540
Iterations       : 30000
Compiler version : GCC10.2.0
Compiler flags   : -O2   -lrt
Memory location  : Please put data memory location here
			(e.g. code in flash, data on heap etc)
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0x5275
Correct operation validated. See readme.txt for run and reporting rules.
CoreMark 1.0 : 2347.050540 / GCC10.2.0 -O2   -lrt / Heap
[root@milkv-duo]~# 

動きました。
…ちょっと値が低いのはコンパイラのツメが甘いからです。多分。(別のコンパイラでビルドした際は2500程度出ました。)

なにわともあれ、パッケージを追加することができました。

(同一投稿者の Milk-V Duoのすゝめ #Linux - Qiita の内容を転載しています。)

2 Likes