Slide 1

Slide 1 text

NetBSD/atari の歴史と ATARI互換機 Milan サポート オープンソース カンファレンス2018大阪 ひさしぶりの「謎マシン起動しました」展示 Izumi Tsutsui [email protected]

Slide 2

Slide 2 text

去年のOSC大阪  PC-6001実機展示と PC6001VX エミュのデモ

Slide 3

Slide 3 text

pkgsrcに入れてしまえば なんでもNetBSD関連と 言い張れる という手法 ♪〜(´ε`)

Slide 4

Slide 4 text

いつものブース説明  「OSとは」 ●「OSの展示」というのが実に難しい ● 作る人はシングルユーザ起動で満足しがち ● 見る人にとっては、ブートメッセージとか  ログインプロンプトとか見ても意味不明 ➔ 外観勝負の謎マシン展示 or テストを兼ねた mikutter 等のアプリ展示 というのが定番の説明

Slide 5

Slide 5 text

今回のOSC大阪 ♪〜(´ε`) https://twitter.com/tsutsuii/status/954750277642416128

Slide 6

Slide 6 text

ひさしぶりに ガチの NetBSDカーネルネタです ふつーの方にウケるかは 非常に謎です……

Slide 7

Slide 7 text

NetBSDとは  えびはらさん「NetBSDのご紹介」より NetBSDは、4.3/4.4BSD&386BSDベースの OSです。プロジェクトは1993年3月21日か ら開始していて、現在も活発に開発が進ん でいます。60種類以上のハードウェアを、 単一ソースツリーでサポートしています。

Slide 8

Slide 8 text

今も60種類以上?  2018年1月現在 acorn32 algor alpha amd64 amiga amigappc arc atari bebox cats cesfic cobalt dreamcast emips epoc32 evbarm evbmips evbppc evbsh3 ews4800mips hp300 hpcarm hpcmips hpcsh i386 ibmnws hppa iyonix landisk luna68k mac68k macppc mipsco mmeye mvme68k mvmeppc netwinder news68k newsmips next68k ofppc playstation2 pmax prep rs6000 sandpoint sbmips sgimips shark sparc sparc64 sun2 sun3 vax x68k zaurus

Slide 9

Slide 9 text

ATARI とは  Wikipediaより引用 アタリ(ATARI)は、アメリカ合衆国のビデオ ゲーム会社で、ビデオゲームを作ることを主眼に 創立された会社としては世界初。 ノーラン・ブッシュネルにより1972年に創業。 囲碁の日本棋院初段を持つブッシュネルが 囲碁用語「アタリ」から社名を取った。 https://ja.wikipedia.org/wiki/アタリ_(企業)

Slide 10

Slide 10 text

ATARI のコンピュータ  ATARI ST ● 1985年発売 …80386やHP300登場の年 ● MC68000 8MHz 採用 ● 外部バス16ビット(Sixteen) 内部演算32ビット(ThirtyTwo) から ST の名に ● NetBSDは非サポート(MMU無し) だが、後の ATARI 機種の原型 https://en.wikipedia.org/wiki/Atari_ST © Bill Bertram, 2006 CC-BY-2.5 Attribution

Slide 11

Slide 11 text

ATARI 用OS  “The Operating System” ● DOSに似た GEMDOS と GUI の GEM で構成 ● CP/M作成元のデジタルリサーチにより開発 ● Free版の “EmuTOS” が今でも開発継続 https://en.wikipedia.org/wiki/Atari_TOS

Slide 12

Slide 12 text

ATARI のコンピュータ  ATARI TT030 ● 1990年発売 …なおX68030は1993年 ● MC68030 32MHz 採用 ● 外部バス32ビット(ThirtyTwo) 内部演算32ビット(ThirtyTwo) から TT の名に ● 当初からUNIX Workstation を 目指したが、開発遅れで振るわず https://en.wikipedia.org/wiki/Atari_TT030

Slide 13

Slide 13 text

NetBSD/atari の始まり  「NetBSD移植勢」としては古参 ●1994年の NetBSD/amiga 1.0 をベースに Leo Weppelman 氏により TT030 を対象に移植作業開始 ●1995年3月にNetBSDに正式portに ●同年11月の NetBSD 1.1 が最初のリリース 当時は amiga, atari, mac68k, x68k 等々の68k勢が活発でした http://www.netbsd.org/ports/atari/history.html

Slide 14

Slide 14 text

NetBSD/atari と TT030 と 私 https://twitter.com/tsutsuii/status/954767562893479936

Slide 15

Slide 15 text

2009年 OSC関西@京都 http://www.ceres.dti.ne.jp/tsutsui/osc2010kobe/img02.html  とりあえず展示しました

Slide 16

Slide 16 text

2010年 OSC関西@神戸 http://www.ceres.dti.ne.jp/tsutsui/osc2010kobe/SMC_TT-OSC2010Kobe.html  謎NIC作成 + ドライバ作成 して展示

Slide 17

Slide 17 text

2011年 OSC関西@神戸 http://www.ceres.dti.ne.jp/tsutsui/osc2011kobe/NetBSD-EtherNEC.html  謎NICその2 + ドライバ作成 + セミナー

Slide 18

Slide 18 text

その後はメンテナンスモードに  リリース区切りで動作確認 ●NetBSD 6.0: 2012/10/17 ●NetBSD 7.0: 2015/9/25 ●NetBSD 8 ブランチ 2017/6

Slide 19

Slide 19 text

KOF2017での転機 https://twitter.com/tsutsuii/status/929229302146596865  NWS-800 メインボード画像の差し入れ

Slide 20

Slide 20 text

NetBSD/news68k 8.0_BETA

Slide 21

Slide 21 text

zlib NULLチェックの罠 ふたたび •zlib が展開先アドレスのNULLチェックしてる •NetBSD/news68kカーネルはアドレス0にロード ➔NULLチェックでコケる罠

Slide 22

Slide 22 text

NetBSD/atari もテスト https://twitter.com/tsutsuii/status/930768218553122816

Slide 23

Slide 23 text

いろいろおかしい(´・ω・`) https://twitter.com/tsutsuii/status/930796600741453825 https://twitter.com/tsutsuii/status/930797987529342976

Slide 24

Slide 24 text

インストールFD 1.44MB問題  複数フロッピーサポートが待たれる…… ●NetBSD/atari のインストーラは 2HD FDにファイルシステムが入っている ●いろいろバイナリが太るとあふれる ●デイリービルドを通すために 使ってなさそうなコマンドを消す人がいる ●実は使われてて落ちる罠 ⇒実機テスト重要……

Slide 25

Slide 25 text

とりあえず 8.0_BETA は直しました https://twitter.com/tsutsuii/status/931170150929199104

Slide 26

Slide 26 text

とかいうやりとりを [email protected] のメーリングリストに 投げていたら

Slide 27

Slide 27 text

port-atariメンテナからのメール  デジャヴュ MLのメールやりとりが一段落した11/25 「Milan (ATARI clone) いらない?」 「持ってたけどずっと作業してなくて」 「実際に作業する人に送りたい」

Slide 28

Slide 28 text

お、おぅ

Slide 29

Slide 29 text

Milanとは http://www.uweschneider.de/en/projects_milan.php

Slide 30

Slide 30 text

Milanとは  非x86な ATマザーボードの謎マシン ●ドイツ Milan-Computer-Systems社による ATARIクローン ●MC68040 と安価なPC用パーツを使用して ATARI機とソフトコンパチなマシンを作る ……というコンセプト

Slide 31

Slide 31 text

Milanとは ● 1997年10月頃アナウンス、1998年登場? ● PC-ATフォームマザーボード ● MC68040 25MHz (68060オプションも存在) ● 72pin EDO SIMM x4 (max 512MB) ● モトローラ 68901 MFP (タイマ、シリアル他) ● Intel 82371 サウスブリッジ + SuperIO ➢PCI×4, ISA×3, IDEx2, FDD ➢PS/2キーボード・マウス ➢シリアル、パラレル

Slide 32

Slide 32 text

NetBSD/atari での Milan サポート ●2000年 2月:MLで最初の問い合わせ ●2000年 8月:MLで TODOリストに挙がる ●2001年 4月:カーネルコンフィグ追加 ●2001年 6月:Milanテスト用カーネル公開 ●2002年 3月:PCIサポートカーネル公開 ●2002年 9月:NetBSD 1.6 で正式サポート http://mail-index.netbsd.org/port-atari/oindex.html

Slide 33

Slide 33 text

NetBSD/atari その後  続けるのは大変…… 2003年12月を最後に、Milan その他 NetBSD/atari に精力的にコミットしていた Leo Weppelman 氏のアクティビティが低下 なお NetBSD 2.0 リリースは 2004年12月

Slide 34

Slide 34 text

https://twitter.com/tsutsuii/status/575350376796405761

Slide 35

Slide 35 text

https://twitter.com/yojiro/status/575350578982735872

Slide 36

Slide 36 text

◯| ̄|_

Slide 37

Slide 37 text

というわけで今度はイギリスから https://twitter.com/tsutsuii/status/944590685327339520

Slide 38

Slide 38 text

とりあえず 動かしてみる

Slide 39

Slide 39 text

ATケースは高い (´・ω・`) https://www.amazon.co.jp/dp/B00JJ7UF7I

Slide 40

Slide 40 text

こいつで代用 https://twitter.com/tsutsuii/status/944598980746293249

Slide 41

Slide 41 text

さらに発掘 https://twitter.com/tsutsuii/status/944607656144117760

Slide 42

Slide 42 text

これも必要 https://twitter.com/tsutsuii/status/944607041728823299

Slide 43

Slide 43 text

AT電源 Tips https://twitter.com/tsutsuii/status/944614712154644480

Slide 44

Slide 44 text

とりあえず起動はOK

Slide 45

Slide 45 text

カーネル起動にはFDDも必要

Slide 46

Slide 46 text

ケーブルも発掘が大変 https://twitter.com/tsutsuii/status/952490340740603904

Slide 47

Slide 47 text

FDDもヘッド固着してたり…… https://twitter.com/tsutsuii/status/952490597171916800 https://twitter.com/tsutsuii/status/952499725248315392

Slide 48

Slide 48 text

IDE HDD 8GB の壁 https://twitter.com/tsutsuii/status/952571925431181312

Slide 49

Slide 49 text

PCI PIO NIC https://twitter.com/tsutsuii/status/952537950037803008

Slide 50

Slide 50 text

NetBSD/atari 1.6.2 からテスト https://twitter.com/tsutsuii/status/952515661552480262

Slide 51

Slide 51 text

1.6.2 のカーネルは起動

Slide 52

Slide 52 text

……が、panic https://twitter.com/tsutsuii/status/952517934429057024

Slide 53

Slide 53 text

2.1 のカーネルも起動 https://twitter.com/tsutsuii/status/952527952419287040

Slide 54

Slide 54 text

……が、途中でハングる https://twitter.com/tsutsuii/status/952529526885462016

Slide 55

Slide 55 text

netbsd-3 ブランチのカーネルも NetBSD 2.1 とほぼ同じ感じ ちなみに NetBSD 3.0 リリースは 2005年12月

Slide 56

Slide 56 text

netbsd-4 ブランチカーネル なぜか一部のデバイスが アクセスできていない? (HDDも見えていない) なお NetBSD 4.0 リリースは 2007年12月

Slide 57

Slide 57 text

NetBSD 5.2.3 のカーネルも netbsd-4 と同じくおかしい NetBSD 5.0 リリースは 2009年 4月

Slide 58

Slide 58 text

NetBSD 6.1.5 のカーネル なお NetBSD 6.0 リリースは 2012年10月 起動直後のVGAの初期化の デバッグメッセージの後で ハングアップ?

Slide 59

Slide 59 text

前途多難

Slide 60

Slide 60 text

なぜ動かなくなるのか  「何もしてないのに」「何もしないから」 なぜ時とともに動かなくなるのか? ➔ NetBSDのソース構成を見る必要がある ➢「機種依存部分」(Machine Dependent, MD) ➢「機種独立部分」(Machine Independent, MI)

Slide 61

Slide 61 text

MI/MD構成 OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通(MI) デバイス ドライバ SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種依存(MD)部 ←OSの全体の5%くらい?

Slide 62

Slide 62 text

MI/MD構成 OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通(MI) デバイス ドライバ SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種依存(MD)部 ←OSの全体の5%くらい? 「移植」というのはこの部分の実装 ポートメンテナが作業するのもここ

Slide 63

Slide 63 text

MI/MD構成 OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通(MI) デバイス ドライバ SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種依存(MD)部 ←OSの全体の5%くらい? OS全体共通部分が変わった場合、 機種別の接続I/Fも書き直す必要がある

Slide 64

Slide 64 text

MI/MD構成 OS共通部分 メモリ管理 タスク管理 ファイルシステム ネットワークプロトコル …… 共通(MI) デバイス ドライバ SCSI ATA Ethernet …… CPU 固有部 割り込み アドレス変換 …… 機種依存(MD)部 ←OSの全体の5%くらい? 共通のドライバのI/Fが変わった場合も 機械的な置き換えだけをすると 機種固有の問題にハマることが……

Slide 65

Slide 65 text

MI変更の例 NetBSD 2.0:M:Nスレッド SMPサポート (Scheduler Activation) NetBSD 4.0:VMレイアウト変更、gcc 4.1 NetBSD 5.0:SMP構成変更、softint(9) NetBSD 6.0:gcc 4.5 メンテナ的にはインパクトあっても ユーザーには見えない変更も多くあります

Slide 66

Slide 66 text

NetBSD 4, 5 それぞれの VM変更、SMP変更では atari, x68k, luna68k 等々 持ってないマシンのコードを 直すのが結構大変でした…… なぜか今はどれも持っていたり

Slide 67

Slide 67 text

まずは NetBSD/atari が まだ活発だったころの NetBSD 2.1 をベースに デバッグを開始 デバッグ開始

Slide 68

Slide 68 text

クロスビルド環境 https://twitter.com/tsutsuii/status/952557435700494337

Slide 69

Slide 69 text

NFS root 設定 https://twitter.com/tsutsuii/status/952564344436408320

Slide 70

Slide 70 text

デバッグサイクル  適当に修正したカーネルをビルド  カーネルを gzipする  gzipカーネルをDOSフォーマットFDに書く  Milanを起動して TOSを立ち上げる  "loadbsd.ttp” のローダーアプリを起動  フロッピーからgzipカーネルをロード  NetBSDカーネルが起動

Slide 71

Slide 71 text

デバッグサイクル  適当に修正したカーネルをビルド  カーネルを gzipする  gzipカーネルをDOSフォーマットFDに書く  Milanを起動して TOSを立ち上げる  "loadbsd.ttp” のローダーアプリを起動  フロッピーからgzipカーネルをロード  NetBSDカーネルが起動 数秒〜数十秒 ほぼ一瞬 約30秒 約2分 フロッピー入れ替えと ダブルクリックと コマンドタイプ 約2分 ⇒ 合計 5〜6分

Slide 72

Slide 72 text

デバッグ用に カーネル内部に printfを足して 様子を見るだけでも 5〜6分かかる しかもフロッピーを入れ替える必要あり

Slide 73

Slide 73 text

つらい (ヽ´ω`)

Slide 74

Slide 74 text

ドイツ語キーボード問題  NetBSD/atari の起動後に再起動すると なぜかNVMの設定が壊れる  NVM設定が初期化されるとTOSの表示と キーボード配列がドイツ語設定になる  ‘-’ を打とうとすると 'ß' になる  netbsd.gz の ‘z’ を打つと ‘y’ になる 起動するのも一苦労になったり……

Slide 75

Slide 75 text

No content

Slide 76

Slide 76 text

No content

Slide 77

Slide 77 text

NVMドライバをいじって 初期化しないように修正 /* XXX: Milan's firmware seems to use different check method */ if ((machineid & ATARI_MILAN) == 0) { if (!nvram_csum_valid(nvram_csum())) { printf(": Invalid checksum - re-initialized"); for (nreg = MC_NVRAM_START; nreg < MC_NVRAM_CSUM; nreg++) mc146818_write(RTC, nreg, 0); nvram_set_csum(nvram_csum()); } }

Slide 78

Slide 78 text

HDD起動できるように CD-ROMからHDDに バイナリを展開してみる

Slide 79

Slide 79 text

https://twitter.com/tsutsuii/status/952583345468203008

Slide 80

Slide 80 text

https://twitter.com/tsutsuii/status/952594463569805312

Slide 81

Slide 81 text

負荷をかけると 確率的にハングするので ブートローダーと カーネルだけを 入れてみる

Slide 82

Slide 82 text

ブートストラップ

Slide 83

Slide 83 text

フローピーの呪縛からは 開放されたので、 -current に追従するため NetBSD 4.0以降で おかしい問題をチェック

Slide 84

Slide 84 text

netbsd-4でデバイスが見えない問題 なぜか一部のデバイスが アクセスできていない? (HDDも見えていない)

Slide 85

Slide 85 text

netbsd-4でデバイスが見えない問題  タイマやキーボードは検出されている  PCIもデバイス検出はできているが レジスタアクセスができていない  見えているデバイスと見えないものとでは アドレスのマップ方法が違う?  NetBSD 3 → 4 で VM APIが変わっている

Slide 86

Slide 86 text

netbsd-4でデバイスが見えない問題  仮想アドレスを見えているデバイスと 同じ領域にしてみる ⇒ダメ  見えているデバイスと見えないものとで ページテーブル設定を比べてみる ⇒見えていない方は PMAP_WIRED 設定? ↓ pmap_enter(9) で PMAP_WIRED を 外したらうごくようになりました (3.0ではなんで動いてたのか不明)

Slide 87

Slide 87 text

netbsd-6で起動直後に止まる問題 起動直後のVGAの初期化の デバッグメッセージの後で ハングアップ?

Slide 88

Slide 88 text

netbsd-6で起動直後に止まる問題  コンソール初期化付近にデバッグprintfを 入れつつ、怪しい関数をコメントアウト という手法で探索  ISAのコンソールデバイス(キーボード)の 初期化でハングしているっぽい?  5.0 と 6.0 の差分を確認 ⇒デバイス構造体変更でNULLアクセス発生  そこを修正して起動まで進むように

Slide 89

Slide 89 text

その他の雑多な問題  ISA割り込みを設定したらハング ⇒locore.s のハンドラに typo 入ってた  FDDが検出されない ⇒MIドライバ変更でATARI固有設定の  変更漏れ  tar ball 展開でハングする問題 ⇒存在しないメモリをアクセスしている?  メモリ量を16MBのみとすることで  とりあえずそれなりに動いている?

Slide 90

Slide 90 text

-current動作確認とコミット  netbsd-6 と同様の修正で 8.0_BETA も -current も無事に起動して動作

Slide 91

Slide 91 text

-current動作確認とコミット  結局修正したのは実質 5つのファイルだけ  都度メンテしないと調査が大変……

Slide 92

Slide 92 text

今後の課題  メモリ検出の問題 各SIMMの物理アドレス配置調査が必要? 直せれば 512MB なビルドマシンも可能!?  高負荷でハングする問題 とにかく race condition っぽいところを 調べるしか無い?  各PCIデバイス動作の検証

Slide 93

Slide 93 text

まとめ ● カーネルデバッグは大変ですが 自分で調べて動くと楽しいです ● 放置してると動かなくなるので 定期的なメンテが重要です ● OSC展示駆動がおすすめです 「-currentが動いたら OSC大阪展示するよ!」 と元オーナーに宣言してたのでした