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

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

ターゲットは以前[DebianをインストールしたARecX6](https://qiita.com/yamori813/items/14e224dc80b3a6c84279)です。

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

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

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

このパスにある

netbsd-SHEEVAPLUG_INSTALL.bin.gz

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

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

![NetBSD_INST.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/611e30cc-9d68-661c-fd62-fd65cd819bf7.png)

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から起動します。

![NetBSD_BOOT.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/d7458cfd-84e3-670c-81be-ce97271e1e11.png)


```
=> 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): 
```

http://dmesgd.nycbug.org/index.cgi?do=view&id=5440

インストール後には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で入って使えるようにしました。

10.99.2を試したら以下のように起動できませんでした。

```
=> bootm
## Booting kernel from Legacy Image at 04000000 ...
   Image Name:   NetBSD/sheevaplug 10.99.2
   Image Type:   ARM NetBSD Kernel Image (uncompressed)
   Data Size:    8611156 Bytes = 8.2 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
   Loading Kernel Image ... Image too large: increase CONFIG_SYS_BOOTM_LEN
Must RESET board to recover
resetting ...
```

カーネルコンフィグレーションからいらないデバイスを抜いたら、起動できました。

10.99.2はMRBの最初にFATがあるとインストールに失敗するのでFATを後にしました。構成は次のようになります。

```
# disklabel sd0
# /dev/rsd0:
type: unknown
disk: sd
label: fictious
flags:
bytes/sector: 512
sectors/track: 32
tracks/cylinder: 64
sectors/cylinder: 2048
cylinders: 76319
total sectors: 156301488
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0 

4 partitions:
#        size    offset     fstype [fsize bsize cpg/sgs]
 a: 154031488        64     4.2BSD      0     0     0  # (Cyl.      0*-  75210*)
 b:   1048576 154031552       swap                     # (Cyl.  75210*-  75722*)
 c: 156301488         0     unused      0     0        # (Cyl.      0 -  76319*)
 d:    610672 155690816      MSDOS                     # (Cyl.  76020*-  76319*)
```

d:のFATにnetbsd.ubがコピーしてある場合にはu-bootで以下のようにして起動します。

```
=> usb start
starting USB...
USB0:   USB EHCI 1.00
scanning bus 0 for devices... 4 USB Device(s) found
       scanning usb for storage devices... 1 Storage Device(s) found
=> fatload usb 0:2 4000000 netbsd.ub
reading netbsd.ub
3690708 bytes read in 282 ms (12.5 MiB/s)
=> bootm 4000000
```

NetBSDがこのドライブから起動しているとdをmount_msdosでマウントすることができないようなので、インストーラーが終った後にmount_msdosしてftpなどでファイルをコピーするのがよさそうです。ちょっと面倒です。良い方法が思いつきません。