ARMボードでNetBSD
https://gyazo.com/42459cc9075c1640d69236bed5e72f72
むとうたけし@関西*BSDユーザ会 (@610t) 焼くだけイメージでNetBSDをARMボードで動かす
二つの簡単イメージ
OSCなどのイベント毎に更新
普通に生活できる程度(?) のパッケージが最初から入っている
毎日更新
パッケージ類は入っていない
64bit ARMのイメージもある
両方とも、イメージをmicroSDなどに焼くだけ
dd if=NetBSD-evbarm-aarch64-201806281810Z-generic.img of=/dev/rdisk3 bs=1m
https://gyazo.com/f8df4f5ef18603399be528993d102faa
自分でソースから作ってNetBSDをARMボードで動かす
NetBSDソースツリーを取得: cvs -d :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot co src
armv7.imgを作る
code:shell
% ./build.sh -uU -m evbarm tools
% ./build.sh -uU -m evbarm release
ボード用u-bootを作る: pkgsrc/sysutils/u-boot-* でmake install
/usr/pkg/share/u-boot/<board_name>/にu-bootができる
両者をmicroSDやUSBメモリーなどに焼く
イメージ: dd if=armv7.img of=/dev/rdisk3 bs=1m
u-boot: dd if=u-boot-sunxi-with-spl.bin of=/dev/rdisk3 seek=8
NetBSDでのARMボード対応
Raspberry Pi 3
Pine A64 H64(Pinebook)
NanoPi NEO2
Tegra TX1
参考: 他のBSDでARMボード
FreeBSD
BananaPi, BeagleBone Black & Green, Pine64, Raspberry Pi (B+, 2 and 3)
OpenBSD
インストーラを持ってきてインストール
armv7: BeagleBoard, BeagleBoard xM, BeagleBone, BeagleBone Black, PandaBoard (ES), Cubieboard, pcDuino, SABRE Lite, Nitrogen6X, Wandboard, CuBox-i4Pro, Utilite, Novena arm64: Pine 64/64+, Orange Pi PC2, AMD Seattle Development Board, SoftIron OverDrive 1000, Raspberry Pi 3, Firefly-RK3399 ARMボードの色々なブート方式
u-boot
SDやUSBメモリのu-bootから起動後、FATやext2などのパーティションからkernel起動
システムデフォルトのu-boot起動後、SDなどの設定ファイルに従ってkernelなどを起動
デフォルトシステムブートローダーが特定方法で起動
マウスボタン両方押し+電源ボタンで、zImageをext2パーティションから読み込む(Netwalker) NetBSDでARMボードを動かすための構成要素
ブートローダー: u-bootやシステムデフォルトのもの
Device Tree: ハードウエア情報 *.dtb
kernel: netbsd.img, netbsd.ub など
ユーザランド/ファイルシステム: armv7.imgなど
ユーザランドに、kernelとdtbが含まれるので、これらは別個に必要ない場合も
ブートローダー:u-boot
u-bootは、組み込みボードなどでよく利用されるブートローダー
NetBSDでは、pkgsrc/u-boot-* にボードに対応したu-bootがある
普通は、8セクタから書き込む
dd if=u-boot-sunxi-with-spl.bin of=/dev/rdisk3 seek=8
設定ファイル: boot.scr, extlinux.conf
boot.scrは、mkimageを使ってテキストファイルから作成
code: boot.txt
fatload mmc ${mmcpart} ${kernel_addr_r} ${kernel}
fatload mmc ${mmcpart} ${fdt_addr_r} ${fdtfile}
fdt addr ${fdt_addr_r}
bootm ${kernel_addr_r} - ${fdt_addr_r}
mkimage -C none -A arm -T script -d boot.cmd boot.scr
extlinux.confはテキストファイル
code: extlinux.conf
menu title NetBSD/arm64 boot options
timeout 30
label NetBSD/arm64
kernel /netbsd.img
fdtdir /dtb
append root=ld0a console=fb
Device Tree
ARMで使われて ボードのハードウエア情報記述ファイル
デバイスベースアドレス、割り込み、クロックなどを記述
code: armv7-m.dtsi
// SPDX-License-Identifier: GPL-2.0
/ {
nvic: interrupt-controller@e000e100 {
compatible = "arm,armv7m-nvic";
interrupt-controller;
reg = <0xe000e100 0xc00>;
};
(snip)
};
Device Tree Source(.dts)からDevice Tree Compiler(dtc)を使って、Device Tree Blob(.dtb)に変換して利用
dtc -I dts -i hoge.dts -O dtb -o hoge.dtb
ブートローダーから読み込める場所(FAT,ext2パーティションなど)に配置
NetBSD
NetBSD(FreeBSDも?)は、Flattened Device Tree(FDT)化されている
NetBSD source: src/sys/external/gpl2/dts/dist/arch/arm/boot/dts/
DTBは、目ぼしいものは./build.sh releaseで、armv7.imgに入ります
kernel
ボードに対応したものを用意
ブートローダーが読める場所(FAT, ext2パーティションなど)に配置
NetBSDのユーザランド
armv7.img など
ボードに寄らずアーキテクチャで共通
USBメモリや(micro)SDなどに書き込む
FELモード
母艦からUSB経由でu-boot, DTB, kernelを送り込んでブートする
終わりに
*BSDは、多くのARMボードに対応しています
意外と簡単に、動作環境をつくることができます
ブースに色々なボードがあります
見にきてね!!
https://gyazo.com/6eb46c49dba4d52b07b2b3583c5d892a