Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The history of NetBSD/atari and support for ATARI compatible Milan / OSC2018Osaka

The history of NetBSD/atari and support for ATARI compatible Milan / OSC2018Osaka

OSC2018 大阪の NetBSDセミナーで発表した『NetBSD/atari の歴史と ATARI互換機 Milan サポート』のスライドです。

Izumi Tsutsui

January 27, 2018
Tweet

More Decks by Izumi Tsutsui

Other Decks in Programming

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. 今も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

    View full-size slide

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

    View full-size slide

  10. 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

    View full-size slide

  11. ATARI 用OS
     “The Operating System”

    DOSに似た GEMDOS と GUI の GEM で構成

    CP/M作成元のデジタルリサーチにより開発

    Free版の “EmuTOS” が今でも開発継続
    https://en.wikipedia.org/wiki/Atari_TOS

    View full-size slide

  12. ATARI のコンピュータ
     ATARI TT030

    1990年発売 …なおX68030は1993年

    MC68030 32MHz 採用

    外部バス32ビット(ThirtyTwo)
    内部演算32ビット(ThirtyTwo)
    から TT の名に

    当初からUNIX Workstation を
    目指したが、開発遅れで振るわず
    https://en.wikipedia.org/wiki/Atari_TT030

    View full-size slide

  13. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  20. NetBSD/news68k 8.0_BETA

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  28. お、おぅ

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  31. 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キーボード・マウス
    ➢シリアル、パラレル

    View full-size slide

  32. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  37. とりあえず
    動かしてみる

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  43. とりあえず起動はOK

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  50. 1.6.2 のカーネルは起動

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  58. 前途多難

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  64. 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
    メンテナ的にはインパクトあっても
    ユーザーには見えない変更も多くあります

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  72. つらい
    (ヽ´ω`)

    View full-size slide

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

    View full-size slide

  74. 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());
    }
    }

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  79. ブートストラップ

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  83. netbsd-4でデバイスが見えない問題
     仮想アドレスを見えているデバイスと
    同じ領域にしてみる ⇒ダメ
     見えているデバイスと見えないものとで
    ページテーブル設定を比べてみる
    ⇒見えていない方は PMAP_WIRED 設定?

    pmap_enter(9) で PMAP_WIRED を
    外したらうごくようになりました
    (3.0ではなんで動いてたのか不明)

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  90. まとめ

    カーネルデバッグは大変ですが
    自分で調べて動くと楽しいです

    放置してると動かなくなるので
    定期的なメンテが重要です

    OSC展示駆動がおすすめです
    「-currentが動いたら OSC大阪展示するよ!」
    と元オーナーに宣言してたのでした

    View full-size slide