NetBSD/evbarm on Allwinner Technology SoCsのSupported SoCsではNetBSD-9.0からAllwinner A10(sun4i)に対応するとあるので、それじゃあ-currentを試してみるかという話。Example boardsにはOlimex A10-OLinuXino-LIMEとあるものの、手近にあってすぐ動かせるpcDuinoでいきます。
構築手順はCrosscompiling NetBSD with build.shにあるとおり、cd /usr/src; ./build.sh -m evbearmv7hf-el tools; ./build.sh -u -m evbearmv7hf-el kernel=GENERIC releaseで。二つに分けなくても./build.sh -m evbearmv7hf-el tools kernel=GENERIC releaseと指示することもできますし、-j 5等のオプションを付けてマルチコアを活かすことも可能です。
構築物は/usr/obj/releasedir/evbarm-earmv7hfにあります。何もかもがgzipで圧縮されてしまっていますが、pcDuinoで必要なのはbinary/gzimg/armv7.img.gzとbinary/kernel/sun4i-a10-pcduino.dtb.gz。とはいえ、OpenBSD機上でmicroSDカードを作ってしまうのでarmv7.img.gzだけあれば十分です。
microSDカードの作成は、
- NetBSDイメージの書き込み
- zcat armv7.img.gz | dd of=/dev/rsd1c bs=64k
- Device Tree Blobの書き込み
- mount /dev/sd1i /mnt; cp /usr/local/share/dtb/arm/sun4i-a10-pcduino.dtb /mnt/dtb; umount /mnt
- U-Bootの書き込み
- dd if=/usr/local/share/u-boot/Linksprite_pcDuino/u-boot-sunxi-with-spl.bin of=/dev/sd1c bs=1024 seek=8
こんな感じで。これを書いている時点ではEFI/BOOT/bootarm.efiは-currentで作成したものではなくNetBSD-9.0_RC1付属のものを使わないと起動しないので(とJared McNeillさんからのツイートによるアドバイス、感謝!)、入れ替えておきます。
dmesgはこんな感じ。
♪
とりあえずNetBSD/evbarmを構築〜動作させるまでの手順は分かったので、安心して年を越せそうです。60.00kg(14:40)
20-Sep-2020補足:Device Tree Blobの書き込み先は/mnt→/mnt/dtbに、bootarm.efiの所在はBOOT/EFIではなくEFI/BOOTに修正しています。なお、NetBSD起動後はEFIパーティーションの内容が/bootから参照可能です。
なお、(上の例に追加していませんが)build.shは-xオプションを付け、X11も一緒にビルドした方が良いです。pkg_addによるバイナリパッケージの追加で、X11関連のライブラリを要求されるケースがあるためです。