Milk-V Duo 256M用のOSイメージの自作
前回公式OSイメージを焼いてインストール&起動まで試してみました。
公式イメージのOSだとパーティションが752MBしか認識してなかったのと、拡張するためにはOSを自分でビルドするしかなさそうだったので、今回は実際にOSビルドを試してみました。
Milk-V Duo 256M版のOSを作成する
まず、Dockerが動作するLinux PCが必要になります。
OSのビルド方法は、リポジトリをクローンして、build.sh
を実行すると、対応しているターゲットが一覧表示される。ここでターゲットを選んでビルドするだけで良さそう。気の利いた作りになっている。
> git clone https://github.com/milkv-duo/duo-buildroot-sdk.git --depth=1
> cd duo-buildroot-sdk
> ./build.sh
Usage:
./build.sh - Show this menu
./build.sh lunch - Select a board to build
./build.sh [board] - Build [board] directly, supported boards as follows:
milkv-duo
milkv-duo-spinand
milkv-duo-spinor
milkv-duo256m
milkv-duo256m-spinand
milkv-duo256m-spinor
milkv-duos-emmc
milkv-duos-sd
今回はmilkv-duo256m
をターゲットとするが、ビルド環境がDockerで用意されているのでそれを利用する。duo-buildroot-sdk
ディレクトリに移動して、カレントディレクトリをマウントして、Milk-Vのビルド用コンテナ?を起動する。
> docker run -itd --name duodocker -v $(pwd):/home/work milkvtech/milkv-duo:latest /bin/bash
Unable to find image 'milkvtech/milkv-duo:latest' locally
latest: Pulling from milkvtech/milkv-duo
43f89b94cd7d: Downloading [===========================================> ] 26.22MB/30.44MB
0bbaee5473cd: Downloading [===> ] 17.74MB/238.1MB
d1f312f4c88d: Download complete
:
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
712a8f1d9989 milkvtech/milkv-duo:latest "/bin/bash" 5 seconds ago Up 3 seconds duodocker
コンテナの起動が完了したら、以下のコマンドでビルドを行う。40コアぐらいあるワークステーションでビルドしても最初は10-20分ぐらいかかった気がする。
成功すると、out
ディレクトリにイメージが出力される。
> docker exec -it duodocker /bin/bash -c "cd /home/work && ./build.sh milkv-duo256m"
:
INFO: hdimage(milkv-duo256m.img): adding partition 'boot' (in MBR) from 'boot.vfat' ...
INFO: hdimage(milkv-duo256m.img): adding partition 'rootfs' (in MBR) from 'rootfs.ext4' ...
INFO: hdimage(milkv-duo256m.img): writing MBR
gnimage for milkv-duo256m success!
/home/work/build
/home/work
Create SD image successful: out/milkv-duo256m-20240502-1503.img
パーティションサイズを指定して再ビルドする。
デフォルトの状態でビルドできることが確認できたので、SDカードに焼いて起動して、パーティションどうなっているか、今一度確認してみた。
> lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk0 179:0 0 29.8G 0 disk
├─mmcblk0p1 179:1 0 128M 0 part
└─mmcblk0p2 179:2 0 768M 0 part /
当然、結果はリリースされているものと全く同じであった。
ここから本題で、ビルドツール内には、genimage.cfg
というファイルがあって、この設定ファイルに上記のパーティションサイズが指定されている。このサイズを編集してOSを再作成すると希望するサイズのイメージになるはず。
ターゲット毎でフォルダが分かれているので注意。
> cd duo-buildroot-sdk
> vi ./device/milkv-duo256m/genimage.cfg
32GBにおいて、最適なサイズが分からが、とりあえず768M
を28672M
(128の倍数かつ32GB未満)に変更
diff --git a/device/milkv-duo256m/genimage.cfg b/device/milkv-duo256m/genimage.cfg
index 027bde1eb..7b917edfc 100644
--- a/device/milkv-duo256m/genimage.cfg
+++ b/device/milkv-duo256m/genimage.cfg
@@ -13,7 +13,7 @@ image rootfs.ext4 {
ext4 {
label = "rootfs"
}
- size = 768M
+ size = 28672M
}
これで再度ビルドする。
> docker exec -it duodocker /bin/bash -c "cd /home/work && ./build.sh milkv-duo256m"
:
Create SD image successful: out/milkv-duo256m-20240502-1555.img
29GBのOSができた。
> ls -lh out
total 839M
-rw-r--r-- 1 root root 897M 5月 2 16:03 milkv-duo256m-20240502-1503.img
-rw-r--r-- 1 root root 29G 5月 2 17:20 milkv-duo256m-20240502-1620.img
でかいのでzip化してからDLする。
自作OSで起動
今までと同じように、SDに焼いてMilk-Vを起動してみる。
ログインしてストレージのサイズを確認。ちゃんとパーティションのサイズが確保されている。
> lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk0 179:0 0 29.8G 0 disk
├─mmcblk0p1 179:1 0 128M 0 part
└─mmcblk0p2 179:2 0 28G 0 part /
> df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 28G 799M 26G 3% /
devtmpfs 83M 0 83M 0% /dev
tmpfs 84M 0 84M 0% /dev/shm
tmpfs 84M 48K 83M 1% /tmp
tmpfs 84M 28K 83M 1% /run
ホントは、公式のイメージを焼いた後で、LinuxのPCでマウントした後で、パーティションサイズをコマンドで変更するのが正解じゃないかと思いましたが、一応やれましたということで。
Discussion