
2025/12/20 5:29
The scariest boot loader code
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
記事は、1999年に廃止されたXターミナルのブートサーバーだったHP 9000/720 PA‑RISC ワークステーションを、著者がすべてのXターミナルを取り外した後に受け取った機械にOpenBSDを移植することで復活させた経緯を語っている。
その2つの425 MB SCSIディスクのうち1台が故障したため、著者はファイルシステムチェックをバイパスして減衰モードでシステムを動かす必要があった。
この作業は、PA‑RISC MkLinux コードにおけるメモリ管理のバグで停滞したMichael Shalayeff の1998年の取り組みを基盤としている。2002年初頭、Matt Fredette は NetBSD/hp700 ポートを拡張し、最初はシングルユーザーで動作させ、後にマルチユーザーサポートを追加した。また、NetBSD/sun2 ポートも作成し、Sun システム向けの「Machine Emulator」(TME) をリリースした。
著者は HP UX ファームウェアコンソールパス(
conspath)を表示・変更する機械固有のブートコマンドを書き、シリアルコンソール経由で 712/715 モデルをヘッドレスに動作させることができた。これらの変更は OpenBSD/hppa のブートローダー(machine console)に組み込まれ、2002年3月にコミットされ、boot_hppa(8) にドキュメントが追加された。テストでは Sun SPARCstation 20 上でサポートされるすべてのボーレート(50–230 400 bps)を切り替え、低速時に HP ファームウェアから出力される冗長なヘルプテキストによって長い遅延が生じたことを報告した。結果として OpenBSD は 712 を最大57 600 bpsでヘッドレスに動作させることができ、HP/UX FAQ に記載された9 600 bpsの制限を超えた。
このプロジェクトは、完全なコンソール切替サポートを備えた安定した OpenBSD/hppa ポートとして完成し、マニュアルページとブートローダー更新で文書化され、PA‑RISC システムに関する広範なコミュニティ活動に貢献した。
本文
背景
1999年、前職の雇用主が会社の X ターミナル用ブートサーバーとして保持されていた HP 9000/720 PA‑RISC ワークステーションを退役させました。
マシンはまだ HP/UX を実行していましたが、内部ディスクが老朽化し、すべての X ターミナルが消えるまで交換したくないという状況でした――結局それが起きました。
9000/720 を渡されましたが、HP/UX ではなく OpenBSD が欲しかったです。PA‑RISC 用の OpenBSD ポートは、亡き Michael Shalayeff 氏によって 1998 年に開始されたものですが、まだ実用には程遠い状態でした。
2002年初頭 – NetBSD の登場
- Matt Fredette(MIT 学生)は既存の OpenBSD/hppa コードをベースにして、HP 9000/715 系マシン向けに NetBSD をポートしました。
- この情報を NetBSD メーリングリストで告知し、最終的なバグを修正した後、マルチユーザー操作が可能になりました。
- Fredette はその後、次の 2 つの新しいポートを作成しました:
→ 後にNetBSD/hp700
に改名NetBSD/hppa
(Sun 2 ワークステーション用:68010/68020)NetBSD/sun2
Fredette の仕事は OpenBSD 側への関心を再燃させ、より多くのハードウェアでカーネルテストが行われるようになりました。
HP‑UX 無人起動(ヘッドレス)における問題
HP の初期 PA‑RISC マシン(例:712)は電源投入時にキーボードを接続しないと停止します。
ファームウェアは「ISL」コンソールパス(
conspath 2/0/4.0x283)を公開しており、BOOT_ADMIN プロンプトから変更できますが、その手順は暗号的でリスクが高く(ミスから復旧するには “dagger” ボードが必要)、安全にシリアルコンソールを設定できませんでした。
目的: OpenBSD のブートローダーに同様の仕組みを導入し、ユーザーが安全にシリアルコンソールを構成できるようにすること。
作業進行中 – コンソールパスサポート
-
初期パッチ(2002年2月8日)
コマンドを追加し、現在のコンソールパスを表示。machine console
で変更可能に。machine console <port>.<speed>.<bits>.<parity>
Port =
またはrs232
。rs232_2
Speed はデフォルトで 9600 bps。
Bits はデフォルトで 8、Parity はデフォルトでなし。
-
712 におけるシリアルコンソール
- 712 を 9600 8N1 シリアルモードに正常に切り替え。
- 設定を永続化(ファームウェアへ書き戻し)実装。
-
サポート拡張
- キーボードと複数シリアルポートの検出を追加:
(2 つのシリアルポート、Hil/Asp)720
(1 つのシリアルポート、PS2/Lasi)712/60
,715/33
(各種バス構成)715/100/XC
- キーボードと複数シリアルポートの検出を追加:
-
ブートローダー統合
を更新。sys/arch/hppa/stand/boot/machine.c- man ページ
を作成し、使用例を記載。boot_hppa(8) - 715/100/XC マシンで動作確認済み。
-
速度テスト
- サポートされる全ビットレート(50 – 230400 bps)を各速率でコンソールパスを切り替えて検証。
- 低速時は
のヘルプテキストが長いため、表示に非常に時間がかかったことを確認。BOOT_ADMIN
-
最終コミット – 2002年3月2日(追加調整は 3 月 7 日)。
主なポイント
- OpenBSD は PA‑RISC シリアルコンソールを安全なブートローダーコマンドで設定できるようになった。
- HP 712/715 系マシンをヘッドレスで運用しても、ファームウェア破損のリスクなしに済む。
- コンソールパス変更は電源サイクル後に有効になる;その後システムは新設定で起動する。
補足
- HP‑UX FAQ はまだ 0x283 の値を参照しており、ユーザーは 9600 bps に限定されている。
OpenBSD 実装ではファームウェアの完全なコンソールパスを書き込むため、712 で最大 57600 bps まで設定可能。 - この作業は、OpenBSD のポーティング、NetBSD の貢献、および個人パッチが協力してレガシー ハードウェアサポートを再活性化できることを示しています。