OSC 2012 愛媛
日本HPさん いつもOSC協賛 今年も勝手に ありがとう企画「NetBSD移植 いまむかし」

Izumi Tsutsui

tsutsui@NetBSD.org

NetBSDの“Ports”・ "Of cource it runs NetBSD”……サポートする「機種」のこと
・現状のPort数： だいたい55～58くらい？
acorn26 acorn32 algor alpha amd64 amiga amigappc arc atari
bebox cats cesfic cobalt dreamcast emips evbarm evbmips
evbppc evbsh3 ews4800mips hp300 hp700 hpcarm hpcmips
hpcsh i386 ia64 ibmnws iyonix landisk luna68k mac68k
macppc mipsco mmeye mvme68k mvmeppc netwinder news68k
newsmips next68k ofppc pmax prep rs6000 sandpoint sbmips
sgimips shark sparc sparc64 sun2 sun3 sun68k vax x68k xenzaurus
http://www.NetBSD.org/ports/

140

YEAR

2712944560

200012009
2010
2011

12008

2007

12006

kept

2005

2004

merged

2003

50

2002

removed

2001

30

2000

1

1999

20

1998

31997

43

1996

101995

1994

01993

Number of Ports

NetBSDポート数の推移
NetBSD portsaddedなぜNetBSDは謎マシンを(略・一言では言い表せない様々な要因

・4.3BSD～4.4BSDの開発の歴史
・ユーザーと開発者の熱い (?) こだわり・ハードウェアベンダーの栄枯……それぞれの絶妙な連携の結果

4.3BSD
・BSDの祖先 1986年6月リリース

・4BSD～4.2BSDに続くリリース
・DEC VAXがターゲット……仮想記憶システム設計もVAX依存
・メモリは高価で少ない・ストレージ(HDD)は比較的速いという前提 （1979年頃の設計）

4.3BSD NET2 ～ 4.4BSD
・複数アーキテクチャサポートの始まり

・HP9000/300等の多機種サポート
他に i386, sparc, pmax, news3400 等々

・仮想記憶機構の再設計
VAX依存を排除し、各種のマシンに適用

・デバイス検出機構の再設計
bus階層によるデバイス構成の抽象化

386BSD
・すべてはここから始まった・PC版UNIX ……4.3BSD NET2ベース
・複数の”パッチキット”作成グループ
・「PCに特化して性能向上させるぜ」派⇒ FreeBSD へ・「4.xBSDを生かして設計にこだわるぜ」派⇒ NetBSD へ

140

YEAR

2712944560

200012009
2010
2011

12008

2007

12006

kept

2005

2004

merged2003

502002

removed2001

30200011999

20199831997

431996101995

1994

01993

Number of Ports

NetBSD移植黎明期
NetBSD ports
addedNetBSD移植黎明期
・それぞれの熱い思いの集結

・386BSD, 4.xBSDベース組
i386, hp300, sparc, pmax, vax ...

・大学および企業の研究開発成果組
pc532, sun3, alpha, mvme68k ...

・「俺のマシンでUNIX動かすぜ」組
amiga, mac68k, atari, arm32, x68k

From
Japan

1

40

YEAR

2

712

9

4

4

560

20001

2009
2010
2011

12008

2007

12006

kept

2005

2004

merged

2003

50

2002

removed

2001

30

2000

1

1999

20

1998

31997

431996101995

1994

01993

Number of Ports

NetBSD移植バブル期
NetBSD ports
addedNetBSD移植バブル背景
・すべては必然？

・移植成果によるカーネルAPIの整備
bus_space, bus_dma, wscons, newconfig
等々の機種に依存しないデバイス実装

・独自ベンダーH/Wの隆盛と淘汰
PC以外のマシンもそこそこ入手可能に「……このマシンでもNetBSD動くんじゃね？」

NetBSD移植バブル(1)・1997年

bebox

FromJapan

・1998年

newsmips

FromJapan

macppcFromJapan

next68k sparc64

・1999年
FromJapan

mmeye
hpcmips

FromJapan

FromJapan

evbsh3
news68k

FromJapan

NetBSD移植バブル(2)・2000年
From
Japan

FromJapan

FromJapan

luna68karc
prepcobalt
amigappc arm26 sgimips mipsco
dreamcast・2001年

hpcsh
sandpoint hpcarm
netwinder
sun2 cesfic algor cats evbppc amd64
playstation2
evbarmFromJapan

Fr om
Japan

FromJapan

1

40

YEAR

2

712944560

200012009
2010
2011

12008

2007

12006

kept

2005

2004

merged2003

502002

removed

2001

30

2000

11999

20199831997

431996101995

1994

01993

Number of Ports

NetBSD移植バブル崩壊？
NetBSD ports
addedバブル崩壊要因
・ネタ切れ

・できそうなマシンにはほぼ移植・残ってるブツもH/W仕様がわからん
NetBSDが動くのが当たり前になると、だんだんH/W調査が苦痛に・新しいマシンも出てこない
世の中皆PCに。独自H/WはSunとHPのみ?

NetBSD移植バブル後・2003～2011年 追加ポート

ibmnws xen iyonix ews4800mips landiskzaurus rs6000 emips
・別ポートにマージされたポートxen→ i386 および amd64 の一部に
pmppc → evbppc に統合
・削除されたポート

evbsh5 pc532 playstation2……toolchain問題が解決できず

NetBSD組み込み時代
・移植マシンネタ切れに代わる主役・組み込みマイコンの高機能化
evbsh3, evbppc, evbmips, evbarm→各種組み込み用CPUの評価用ボード(evaluation board)へのポート

・ARM流行による隠れ移植バブル
実は evbarm の下はすごいことに

NetBSD/evbarm サポート機種
・ざっとこれだけあります
ADI_BRH ARMADILLO210 ARMADILLO9 BEAGLEBOARD
CP3100 DEVKIT8000 DNS323 GEMINI GUMSTIX HDL_G
IGEPV2 IMX31LITE INTEGRATOR IQ31244 IQ80310
IQ80321 IXDP425 IXM1200 KUROBOX_PRO LUBBOCKMARVELL_NAS MINI2440 MMNET_GENERICMPCSA_GENERIC MV2120 NAPPI NETWALKER NSLU2OSK5912 OVERO SHEEVAPLUG SMDK2410 SMDK2800
TEAMASA_NPWR TEAMASA_NPWR_FC TISDP2420
TISDP2430 TOASTER TS7200 TWINTAIL VIPER ZAO425

NetBSD/evbarm 隠れport
・評価用ボード？

・TOASTER：NetBSDトースター
・HDL_G：I-O DATA GigaLANDISK・KUROBOX_PRO：玄箱PRO・SHEEVAPLUG： 玄柴？
・MARVELL_NAS：NAS全般？？
・NETWALKER： 目のつけどころが？？？
→組み込み用CPUだと周辺デバイスも内蔵で評価ボードも製品もあまり変わらなかったり

How to port NetBSD?
・「NetBSDの移植」とは・移植ってそんなに簡単なの？
あまり中身を語る人っていませんよね・そもそも何が必要なの？
黒魔術なのかなんなのか

NetBSD移植 何が必要？
・基本的にはこの3つ？

(1)クロスコンパイラ （toolchain）(2)カーネル起動方法 （読み込みと実行）(3)ハードウェア情報 （CPU、デバイス他）

(1)クロスコンパイラ
・いわゆるブートストラップ

・セルフコンパイラ とはバイナリを作るホスト＝ バイナリを実行するホスト・クロスコンパイラ とはバイナリを作るホスト≠ バイナリを実行するホスト

今から移植するマシンはまだ動いてない→クロスコンパイラ必須

(2)カーネル起動方法
・見落としがちだけど最重要課題

・どうやってカーネルを実行するのか
カーネル作っても実行できなきゃ意味なし

・誰がカーネルをロードするのか
いわゆる BIOS とか ROMモニタ とか全然NetBSD関係なかったり

(3)ハードウェア情報
・最低限これくらいは必要

・メモリマップ： RAMやデバイスの配置
・割り込み：割り込みコントローラ含む
・各種デバイス仕様
・シリアルポート（コンソール用に必須）
・インターバルタイマ
・ネットワーク
・各種ストレージ（HDD, CD-ROM etc.） 等々

NetBSD/news68kへの道
・移植バブル期「むかし」の例http://www.ceres.dti.ne.jp/tsutsui/netbsd/port-news68k.html

NetBSD/news68k 課題(1)・クロスコンパイラ

・クロスビルドサポートは NetBSD 1.6 以降
・当時は NetBSD 1.4 が出た頃
→ gcc, binutils の野良ビルドとmake 起動スクリプトで対応（すでに sun3 や macppc で経験あり）

NetBSD/news68k 課題(2)・カーネル起動方法

・「ブートローダを書く」とかやってらんない・とりあえず NEWS-OS のブートローダを流用
・NetBSDカーネルをNEWS-OSの形式に変換
・NEWS-OSのHDD上にFTPでコピーして起動

NetBSD/news68k 課題(3)・デバイス情報

・使えるものは何でも使う！？
・NEWS-OSの起動メッセージから想像する・本体をバラして中身のIC型名を確認する
・ROMモニタコマンドを叩いて反応を見る
・NetBSD/newsmipsのソースを見る
・NEWS-OSのカーネルヘッダを見る
・NEWS-OSのカーネルを逆アセンブルする

NetBSD/news68kの道のり
・移植構想～マージまで約8か月

http://www.ceres.dti.ne.jp/tsutsui/netbsd/port-news68k.html

NetBSD/evbarm 移植例
・NetBSDカーネル移植の「いま」

・日本HPさんのThin Client T5325（ブース展示中）を取り上げますNetBSD/evbarm の場合(1)・クロスコンパイラ

・今のNetBSDはクロスビルド環境が標準→ “build.sh -m evbarm tools” するだけ

NetBSD/evbarm の場合(2)・カーネル起動方法

・Linux がターゲットのボードがほとんど・製品でも評価ボード仕様のままだったり→ たいてい Red-boot や U-Boot なのでLinux用のツールそのままで OK

NetBSD/evbarm の場合(3)・デバイス情報

・「組み込みCPU」
・メモリマップ： 同じCPUならほぼ共通
・割り込み：
CPU内蔵・デバイス仕様： おおむねCPU内蔵・シリアル、タイマはほぼ組み込み
・最近のSoCは ATA, Ethernet, USBも内蔵なぜHP Thin Clientで(略・「そこに山があるから」ではなく (笑)

・きっかけは NetBSD/hpcarm for W-ZERO3……2010年4月にNetBSD本家にマージ

NetBSD W-ZERO3祭り
・需要と供給・同時期に某店でW-ZERO3の特価販売

NetBSD/wzero3 ＠ OSC
・小さいマシンが大好きです・当然のようにえびじゅんさんが各OSCで展示

NetBSD 展示ネタ問題
・「動いてしまったあとどうするか」問題

・開発者はカーネルが起動したら満足
・展示ではカーネルだけ起動しても意味不明
・謎デモを用意するもややマンネリ気味

NetBSD & mikutter
・NetBSD開発 on Twitter・Twitterクライアントmikutter が pkgsrc にmikutter on W-ZERO3
・Of course it runs mikutter!?

・当然のようにW-ZERO3でmikutterをビルド
・16bpp表示のバグを修正して動作可能に

mikutter ビルド問題
・XScale 416MHz でもダメ？

・mikutter には Ruby が必要
・Ruby の rdoc生成には メモリ256MBは必要
・WS011SHはメモリ128MBしかない
ネットワークもストレージもUSB 1.1経由→ pkgsrc更新のたび mikutterビルドに丸３日

ARMビルドマシン探索
・要件：メモリ512MB以上

・とりあえず「ARM 512MB」でぐぐる

ARMビルドマシン発見
・ ぐーぐるさん さすがですARMビルドマシン即決
・選定理由：・VGA出力内蔵 …シリアルだけだと不便なことが・1クリックで買える・HPさんマシンなら次のOSC四国ネタにできる？
OSC2011香川での発表ネタ→

ARMビルドマシン購入
・2011年8月： とりあえずポチる

ARMビルドマシン到着
・2011年8月： 3日後に到着

ARMビルドマシン熟成
・2011年9月： やる気が出るまで押入れに（ぉぃOSC2012広島
・2011年10月： X680x0展示の裏で mikuter 宣伝

KOF関西・2011年11月： LUNA-II の隣りでmikutterデモ失敗

NetBSDタペストリ
・2011年12月： なんとなくOSC用タペストリ発注

NetBSD/zaurus on SL-C700
・2012年1月：Zaurus SL-C700対応 マージ作業

mikutterシール(白)・2012年2月： ふとOSC大分用にmikutterシール作成

mikutterシール(黒)・2012年3月： OSC東京用に再度mikutterシール発注

ARMビルドマシン開封・2012年3月： OSC愛媛も近づいたのでようやく開封ハードウェア調査・さらに開封シリアルポート・あやしい COM コネクタ

シリアルコンソール調査
・「T5325 serial console」でぐぐるシリアルコンソール加工
・いつものテキトー工作

カーネル起動方法調査(1)・シリアルコンソールのページに U-Boot画面 もカーネル起動方法調査(2)・「uboot netbsd marvell」でぐぐるカーネル起動方法調査(3)・同じ Kirkwood のGuruPlug U-Boot起動方法解説

T5325用カーネル作成
・evbarm/conf/SHEEVAPLUG をベースにいじる・BOARDTYPE を適当に変更
・SATA経由SSDが載ってるっぽいので有効に・marphy 認識してないっぽいので ukphy追加
・SDMMCは無いのでコメントアウト……てな感じでテキトーにビルド

NetBSD on T5325
・というわけでサクッと起動mikutterビルド開始 on T5325
・USBメモリとUSB HDDをセットアップしてビルド開始

mikutterビルド結果 on T5325
・WS011SHで 72時間 → T5325で 17時間 に短縮

T5325 今後の課題
・T5325独自H/W対応（サボりすぎ）

・VGA: XGI Volari Z11 - Xorgドライバあり
・電源SW: GPIO に接続
・audio: 詳細未調査
・その他 Linuxのソース確認要……mikutterビルドには困らないのでまたいつか

移植いまむかし まとめ(1)・「むかし」の移植・ベンダー独自OS用のハードウェア
・ハードも独自で情報入手が困難
・熱意と気合いと根性でがんばる
・「動いた わーい」感は高いです・でも仕様がわからないと動かないまま移植いまむかし まとめ(2)・「いま」の移植

・汎用組み込み用CPUベースマシン
・CPU内蔵デバイス多い
・Linuxターゲット多い →ソース添付
・そもそもぐぐるとなんでも出てくる？

・「動いた わーい」に動機付け重要……というわけで今回もOSC締切駆動でしたおわり