OSC2018 大阪の NetBSDセミナーで発表した『NetBSD/atari の歴史と ATARI互換機 Milan サポート』のスライドです。
NetBSD/atari の歴史とATARI互換機 Milan サポートオープンソース カンファレンス2018大阪ひさしぶりの「謎マシン起動しました」展示Izumi Tsutsui[email protected]
View Slide
去年のOSC大阪 PC-6001実機展示と PC6001VX エミュのデモ
pkgsrcに入れてしまえばなんでもNetBSD関連と言い張れる という手法♪〜(´ε`)
いつものブース説明 「OSとは」●「OSの展示」というのが実に難しい● 作る人はシングルユーザ起動で満足しがち● 見る人にとっては、ブートメッセージとか ログインプロンプトとか見ても意味不明➔ 外観勝負の謎マシン展示 orテストを兼ねた mikutter 等のアプリ展示というのが定番の説明
今回のOSC大阪♪〜(´ε`)https://twitter.com/tsutsuii/status/954750277642416128
ひさしぶりに ガチのNetBSDカーネルネタですふつーの方にウケるかは非常に謎です……
NetBSDとは えびはらさん「NetBSDのご紹介」よりNetBSDは、4.3/4.4BSD&386BSDベースのOSです。プロジェクトは1993年3月21日から開始していて、現在も活発に開発が進んでいます。60種類以上のハードウェアを、単一ソースツリーでサポートしています。
今も60種類以上? 2018年1月現在acorn32 algor alpha amd64 amiga amigappc arc ataribebox cats cesfic cobalt dreamcast emips epoc32 evbarmevbmips evbppc evbsh3 ews4800mips hp300 hpcarmhpcmips hpcsh i386 ibmnws hppa iyonix landisk luna68kmac68k macppc mipsco mmeye mvme68k mvmeppcnetwinder news68k newsmips next68k ofppcplaystation2 pmax prep rs6000 sandpoint sbmips sgimipsshark sparc sparc64 sun2 sun3 vax x68k zaurus
ATARI とは Wikipediaより引用アタリ(ATARI)は、アメリカ合衆国のビデオゲーム会社で、ビデオゲームを作ることを主眼に創立された会社としては世界初。ノーラン・ブッシュネルにより1972年に創業。囲碁の日本棋院初段を持つブッシュネルが囲碁用語「アタリ」から社名を取った。https://ja.wikipedia.org/wiki/アタリ_(企業)
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, 2006CC-BY-2.5 Attribution
ATARI 用OS “The Operating System”●DOSに似た GEMDOS と GUI の GEM で構成●CP/M作成元のデジタルリサーチにより開発●Free版の “EmuTOS” が今でも開発継続https://en.wikipedia.org/wiki/Atari_TOS
ATARI のコンピュータ ATARI TT030●1990年発売 …なおX68030は1993年●MC68030 32MHz 採用●外部バス32ビット(ThirtyTwo)内部演算32ビット(ThirtyTwo)から TT の名に●当初からUNIX Workstation を目指したが、開発遅れで振るわずhttps://en.wikipedia.org/wiki/Atari_TT030
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
NetBSD/atari と TT030 と 私https://twitter.com/tsutsuii/status/954767562893479936
2009年 OSC関西@京都http://www.ceres.dti.ne.jp/tsutsui/osc2010kobe/img02.html とりあえず展示しました
2010年 OSC関西@神戸http://www.ceres.dti.ne.jp/tsutsui/osc2010kobe/SMC_TT-OSC2010Kobe.html 謎NIC作成 + ドライバ作成 して展示
2011年 OSC関西@神戸http://www.ceres.dti.ne.jp/tsutsui/osc2011kobe/NetBSD-EtherNEC.html 謎NICその2 + ドライバ作成 + セミナー
その後はメンテナンスモードに リリース区切りで動作確認●NetBSD 6.0: 2012/10/17●NetBSD 7.0: 2015/9/25●NetBSD 8 ブランチ 2017/6
KOF2017での転機https://twitter.com/tsutsuii/status/929229302146596865 NWS-800 メインボード画像の差し入れ
NetBSD/news68k 8.0_BETA
zlib NULLチェックの罠 ふたたび•zlib が展開先アドレスのNULLチェックしてる•NetBSD/news68kカーネルはアドレス0にロード➔NULLチェックでコケる罠
NetBSD/atari もテストhttps://twitter.com/tsutsuii/status/930768218553122816
いろいろおかしい(´・ω・`)https://twitter.com/tsutsuii/status/930796600741453825 https://twitter.com/tsutsuii/status/930797987529342976
インストールFD 1.44MB問題 複数フロッピーサポートが待たれる……●NetBSD/atari のインストーラは2HD FDにファイルシステムが入っている●いろいろバイナリが太るとあふれる●デイリービルドを通すために使ってなさそうなコマンドを消す人がいる●実は使われてて落ちる罠⇒実機テスト重要……
とりあえず 8.0_BETA は直しましたhttps://twitter.com/tsutsuii/status/931170150929199104
とかいうやりとりを[email protected]のメーリングリストに投げていたら
port-atariメンテナからのメール デジャヴュMLのメールやりとりが一段落した11/25「Milan (ATARI clone) いらない?」「持ってたけどずっと作業してなくて」「実際に作業する人に送りたい」
お、おぅ
Milanとはhttp://www.uweschneider.de/en/projects_milan.php
Milanとは 非x86な ATマザーボードの謎マシン●ドイツ Milan-Computer-Systems社によるATARIクローン●MC68040 と安価なPC用パーツを使用してATARI機とソフトコンパチなマシンを作る……というコンセプト
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キーボード・マウス➢シリアル、パラレル
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
NetBSD/atari その後 続けるのは大変……2003年12月を最後に、Milan その他NetBSD/atari に精力的にコミットしていたLeo Weppelman 氏のアクティビティが低下なお NetBSD 2.0 リリースは 2004年12月
https://twitter.com/tsutsuii/status/575350376796405761
https://twitter.com/yojiro/status/575350578982735872
◯| ̄|_
というわけで今度はイギリスからhttps://twitter.com/tsutsuii/status/944590685327339520
とりあえず動かしてみる
ATケースは高い (´・ω・`)https://www.amazon.co.jp/dp/B00JJ7UF7I
こいつで代用https://twitter.com/tsutsuii/status/944598980746293249
さらに発掘https://twitter.com/tsutsuii/status/944607656144117760
これも必要https://twitter.com/tsutsuii/status/944607041728823299
AT電源 Tipshttps://twitter.com/tsutsuii/status/944614712154644480
とりあえず起動はOK
カーネル起動にはFDDも必要
ケーブルも発掘が大変https://twitter.com/tsutsuii/status/952490340740603904
FDDもヘッド固着してたり……https://twitter.com/tsutsuii/status/952490597171916800 https://twitter.com/tsutsuii/status/952499725248315392
IDE HDD 8GB の壁https://twitter.com/tsutsuii/status/952571925431181312
PCI PIO NIChttps://twitter.com/tsutsuii/status/952537950037803008
NetBSD/atari 1.6.2 からテストhttps://twitter.com/tsutsuii/status/952515661552480262
1.6.2 のカーネルは起動
……が、panichttps://twitter.com/tsutsuii/status/952517934429057024
2.1 のカーネルも起動https://twitter.com/tsutsuii/status/952527952419287040
……が、途中でハングるhttps://twitter.com/tsutsuii/status/952529526885462016
netbsd-3 ブランチのカーネルもNetBSD 2.1 とほぼ同じ感じちなみに NetBSD 3.0 リリースは2005年12月
netbsd-4 ブランチカーネルなぜか一部のデバイスがアクセスできていない?(HDDも見えていない)なお NetBSD 4.0 リリースは 2007年12月
NetBSD 5.2.3 のカーネルもnetbsd-4 と同じくおかしいNetBSD 5.0 リリースは2009年 4月
NetBSD 6.1.5 のカーネルなお NetBSD 6.0 リリースは 2012年10月起動直後のVGAの初期化のデバッグメッセージの後でハングアップ?
前途多難
なぜ動かなくなるのか 「何もしてないのに」「何もしないから」なぜ時とともに動かなくなるのか?➔ NetBSDのソース構成を見る必要がある➢「機種依存部分」(Machine Dependent, MD)➢「機種独立部分」(Machine Independent, MI)
MI/MD構成OS共通部分メモリ管理タスク管理ファイルシステムネットワークプロトコル……共通(MI)デバイスドライバSCSIATAEthernet……CPU固有部割り込みアドレス変換……機種依存(MD)部 ←OSの全体の5%くらい?
MI/MD構成OS共通部分メモリ管理タスク管理ファイルシステムネットワークプロトコル……共通(MI)デバイスドライバSCSIATAEthernet……CPU固有部割り込みアドレス変換……機種依存(MD)部 ←OSの全体の5%くらい?「移植」というのはこの部分の実装ポートメンテナが作業するのもここ
MI/MD構成OS共通部分メモリ管理タスク管理ファイルシステムネットワークプロトコル……共通(MI)デバイスドライバSCSIATAEthernet……CPU固有部割り込みアドレス変換……機種依存(MD)部 ←OSの全体の5%くらい?OS全体共通部分が変わった場合、機種別の接続I/Fも書き直す必要がある
MI/MD構成OS共通部分メモリ管理タスク管理ファイルシステムネットワークプロトコル……共通(MI)デバイスドライバSCSIATAEthernet……CPU固有部割り込みアドレス変換……機種依存(MD)部 ←OSの全体の5%くらい?共通のドライバのI/Fが変わった場合も機械的な置き換えだけをすると機種固有の問題にハマることが……
MI変更の例NetBSD 2.0:M:Nスレッド SMPサポート(Scheduler Activation)NetBSD 4.0:VMレイアウト変更、gcc 4.1NetBSD 5.0:SMP構成変更、softint(9)NetBSD 6.0:gcc 4.5メンテナ的にはインパクトあってもユーザーには見えない変更も多くあります
NetBSD 4, 5 それぞれのVM変更、SMP変更ではatari, x68k, luna68k 等々持ってないマシンのコードを直すのが結構大変でした……なぜか今はどれも持っていたり
まずはNetBSD/atari がまだ活発だったころのNetBSD 2.1 をベースにデバッグを開始デバッグ開始
クロスビルド環境https://twitter.com/tsutsuii/status/952557435700494337
NFS root 設定https://twitter.com/tsutsuii/status/952564344436408320
デバッグサイクル 適当に修正したカーネルをビルド カーネルを gzipする gzipカーネルをDOSフォーマットFDに書く Milanを起動して TOSを立ち上げる "loadbsd.ttp” のローダーアプリを起動 フロッピーからgzipカーネルをロード NetBSDカーネルが起動
デバッグサイクル 適当に修正したカーネルをビルド カーネルを gzipする gzipカーネルをDOSフォーマットFDに書く Milanを起動して TOSを立ち上げる "loadbsd.ttp” のローダーアプリを起動 フロッピーからgzipカーネルをロード NetBSDカーネルが起動数秒〜数十秒ほぼ一瞬約30秒約2分フロッピー入れ替えとダブルクリックとコマンドタイプ約2分⇒ 合計 5〜6分
デバッグ用にカーネル内部にprintfを足して様子を見るだけでも5〜6分かかるしかもフロッピーを入れ替える必要あり
つらい(ヽ´ω`)
ドイツ語キーボード問題 NetBSD/atari の起動後に再起動するとなぜかNVMの設定が壊れる NVM設定が初期化されるとTOSの表示とキーボード配列がドイツ語設定になる ‘-’ を打とうとすると 'ß' になる netbsd.gz の ‘z’ を打つと ‘y’ になる起動するのも一苦労になったり……
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());}}
HDD起動できるようにCD-ROMからHDDにバイナリを展開してみる
https://twitter.com/tsutsuii/status/952583345468203008
https://twitter.com/tsutsuii/status/952594463569805312
負荷をかけると確率的にハングするのでブートローダーとカーネルだけを入れてみる
ブートストラップ
フローピーの呪縛からは開放されたので、-current に追従するためNetBSD 4.0以降でおかしい問題をチェック
netbsd-4でデバイスが見えない問題なぜか一部のデバイスがアクセスできていない?(HDDも見えていない)
netbsd-4でデバイスが見えない問題 タイマやキーボードは検出されている PCIもデバイス検出はできているがレジスタアクセスができていない 見えているデバイスと見えないものとではアドレスのマップ方法が違う? NetBSD 3 → 4 で VM APIが変わっている
netbsd-4でデバイスが見えない問題 仮想アドレスを見えているデバイスと同じ領域にしてみる ⇒ダメ 見えているデバイスと見えないものとでページテーブル設定を比べてみる⇒見えていない方は PMAP_WIRED 設定?↓pmap_enter(9) で PMAP_WIRED を外したらうごくようになりました(3.0ではなんで動いてたのか不明)
netbsd-6で起動直後に止まる問題起動直後のVGAの初期化のデバッグメッセージの後でハングアップ?
netbsd-6で起動直後に止まる問題 コンソール初期化付近にデバッグprintfを入れつつ、怪しい関数をコメントアウトという手法で探索 ISAのコンソールデバイス(キーボード)の初期化でハングしているっぽい? 5.0 と 6.0 の差分を確認⇒デバイス構造体変更でNULLアクセス発生 そこを修正して起動まで進むように
その他の雑多な問題 ISA割り込みを設定したらハング⇒locore.s のハンドラに typo 入ってた FDDが検出されない⇒MIドライバ変更でATARI固有設定の 変更漏れ tar ball 展開でハングする問題⇒存在しないメモリをアクセスしている? メモリ量を16MBのみとすることで とりあえずそれなりに動いている?
-current動作確認とコミット netbsd-6 と同様の修正で 8.0_BETA も-current も無事に起動して動作
-current動作確認とコミット 結局修正したのは実質 5つのファイルだけ 都度メンテしないと調査が大変……
今後の課題 メモリ検出の問題各SIMMの物理アドレス配置調査が必要?直せれば 512MB なビルドマシンも可能!? 高負荷でハングする問題とにかく race condition っぽいところを調べるしか無い? 各PCIデバイス動作の検証
まとめ●カーネルデバッグは大変ですが自分で調べて動くと楽しいです●放置してると動かなくなるので定期的なメンテが重要です●OSC展示駆動がおすすめです「-currentが動いたら OSC大阪展示するよ!」と元オーナーに宣言してたのでした