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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View 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 Slide

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

    View 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 Slide

  11. ATARI 用OS
     “The Operating System”

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

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

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

    View 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 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  20. NetBSD/news68k 8.0_BETA

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  28. お、おぅ

    View Slide

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

    View Slide

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

    View 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 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

  36. ◯| ̄|_

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  44. とりあえず起動はOK

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  51. 1.6.2 のカーネルは起動

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  59. 前途多難

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  65. 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  73. つらい
    (ヽ´ω`)

    View Slide

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

    View Slide

  75. View Slide

  76. View Slide

  77. 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  82. ブートストラップ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  93. まとめ

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

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

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

    View Slide