経緯
第2回AIエッジコンテスト(実装コンテスト①)に参加しています。
その過程でSDカードイメージを作る必要があったので、メモとして残します。
私はWSL上のUbuntuで操作していますが、Linuxであれば同じ操作でいけると思います。
要件
提出物詳細 (submission_details.pdf)より
- SDカードバイナリイメージ(e.g. sd.img)
- SDカードイメージにはboot.bin(uboot+bitstream)、LinuxKernel、アプリを含めて「 Win32 DiskImager 」などのソフトでIMG形式のファイルを作成してください。
- 審査の過程では、Ultra96ボードのSDカードのセットアップで使用した「Etcher」を用いて動作確認を行います。
手順
イメージ自体はUltra96V2向けVitis AI(2019.2)の組み立て方。を参照し作成しています。
サイズが8GiBのimageを作成
$ truncate -s 8GiB sd.img
使用されていないループデバイスを確認
$ sudo losetup -f
/dev/loop0
使用されていないループデバイスにsd.imgを関連付ける
$ sudo losetup /dev/loop0 sd.img
パーティショニングとフォーマット
$ # 8GiB中、先頭2GiBをfat32、残りをext4で確保
$ sudo parted /dev/loop0 -s mklabel msdos -s mkpart primary fat32 0 2GiB -s mkpart primary ext4 2GiB 100%
$
$ # bootをfat32でフォーマット
$ sudo mkfs.vfat /dev/loop0p1
$ # rootをext4でフォーマット
$ sudo mkfs.ext4 /dev/loop0p2
マウント
$ # マウントポイント作成
$ mkdir -p ./mnt/boot ./mnt/root
$
$ # マウントする
$ sudo mount /dev/loop0p1 ./mnt/boot/
$ sudo mount /dev/loop0p2 ./mnt/root/
データの格納
$ # boot領域のデータコピー
$ sudo cp ./make_ultra96/sd_card/boot/* ./mnt/boot/
$
$ # root領域のデータをコピー
$ sudo tar -C ./mnt/root/ -xzvf ./make_ultra96/sd_card/rootfs/rootfs.tar.gz
$ # 追加で必要なデータは、 ./mnt/root/home/root 以下に置けばOK
$
$ # キャッシュ上のデータをディスクへ反映
$ sudo sync
マウント解除
$ sudo umount ./mnt/boot
$ sudo umount ./mnt/root
$ sudo losetup -d /dev/loop0
あとは、sd.imgをBalenaEcher等のツールで焼けばOK。