NetBSDのarmをインストールしてみた


FreeBSDのarm(Marvell Kirkwood armv5t)が異常に遅いので、比較のためにNetBSDでも試してみるためインストールしてみた。

ターゲットは以前DebianをインストールしたARecX6です。

NetBSDはこれまで一度もインストールしてことなくてまったくの素人なので、いろいろネットを検索しました。

NetBSDなマシンは一台もないのでビルド環境を作ることができません。(NetBSDはFreeBSDなどでもビルドできるようです) NetBSDはコンパイル済みのバイナリも用意しているのでそれを使うのが良さそうです。

ftp://ftp2.jp.NetBSD.org/pub/NetBSD/NetBSD-9.0/evbarm-earm/installation/instkernel/

このパスにある

netbsd-SHEEVAPLUG_INSTALL.bin.gz

がインストーラになり、これをダウンロードしてUSBのストレージの先頭部分にFATを作り、解凍してコピーします。あとの方はNetBSDのインストール領域にするのでそのままにしておきます。

このバイナリはカーネルとインストールプログラムのsysinstと関連ファイルが入ったもののようです。

u-bootからインストーラーを実行します。

=> usb start;fatload usb 0 8000 netbsd-SHEEVAPLUG_INSTALL.bin;go 8000

これでインストーラーが立ち上がるのですが、以下のエラーメッセージが連続して出力され、表示が乱れます。

sdmmc0: sdmmc_mem_enable failed with error 60

対処方法がわからないので、^Lしながら選んでインストールしています。結構な荒行です。

イメージはネットワーク越しに拾うのでEthernetをつないでおきました。

最初100MくらいのUSBメモリにインストールしたら、容量が足りなくて失敗したので、80GのUSB HDにインストールしました。

インストールはgccが必要なのでX11無しの標準でインストールしました。

2時間弱でインストールできました。

u-bootはNetBSDのfsにあるカーネルは読めないので、別途kernelを用意します。

ftp://ftp2.jp.NetBSD.org/pub/NetBSD/NetBSD-9.0/evbarm-earm/binary/kernel/

のパスにある

netbsd-SHEEVAPLUG.ub.gz

がkernelで、これをFAT部分にコピーしてu-bootから起動します。

=> usb start;fatload usb 0 4000000 netbsd-SHEEVAPLUG.ub;bootm 4000000

これで起動して、rootfsを聞かれるのでsd0aと入力するとmountできます。

[   6.4999694] root device: sd0a
[   6.4999694] dump device (default sd0b): 
[   6.4999694] file system (default generic): 
[   6.4999694]  dumps on sd0b

initもきかれますが、そのままリターンで大丈夫です。これでloginまで行けます。

[   7.8399791] init path (default /sbin/init): 

インストール後にはrootはパスワードなしでログインできます。

rubyのパッケージのインストールはこうしました。

localhost# pkg_add ftp://ftp2.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/evbarm/9.0/All/ruby26-base-2.6.5nb1.tgz

依存パッケージがなくてインストールできないパッケージもあるようです。

NetBSDのパッケージは/usr/pkgにインストールされるようです。

あとはbison-3.4.2.tgzをインストールして、mruby 2.1をビルドしてみました。

ファイルは以下の方法でダウンロードできます。

% ftp https://github.com/mruby/mruby/archive/2.1.0.tar.gz

mrubyのビルドは30分くらいかかります。結構時間かかります。

FreeBSDではmrubyのfib(32)が295秒かかったのがNetBSDは10秒でした。やっぱりFreeBSDのarmはおかしいです。

コンソールはエラーログが出続けるので、頑張ってアカウント追加して、sshで入って使えるようにしました。