
2026/02/09 23:07
**UEFI バインディング(JavaScript 用)** - **目的** JavaScript コードが UEFI ファームウェア機能と直接対話できるようにする API セットを提供します。 - **主な特徴** - UEFI のブートサービスおよびランタイムサービスへのアクセス。 - システム構成テーブルの読み取り・変更が可能。 - セキュアブートの検証と署名操作に対応。 - **典型的な使用例** ```javascript // 例:ファームウェアバージョンを取得する const firmwareInfo = EFI.getFirmwareVersion(); console.log(`UEFI Firmware Version: ${firmwareInfo.major}.${firmwareInfo.minor}`); ``` - **インストール手順** 1. プロジェクトに `uefi.js` ライブラリを組み込みます。 2. UEFI サービスへのアクセス権がある環境で実行してください(通常は管理者権限が必要です)。 - **セキュリティ上の注意点** - バインディングは信頼できるソースからのみ取得してください。 - ファームウェアを変更する前に、その整合性を検証してください。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
要約
本プロジェクトは、UEFI環境内で単純なJavaScriptブートローダーが動作できることを示しています。カスタムバインディングを作成してUEFIサービスをJavaScriptに公開することで実現します。FAT形式のブートボリュームに配置された
script.js ファイルは、Promethee と呼ばれる最小限のランタイムによってロードされ、システムのブートローダーとして実行されます。このサンプルスクリプトは、画面描画用の低レベルUEFIインターフェイスであるGraphics Output Protocol (GOP) にアクセスし、赤い四角形を描画します。これにより、JavaScript が本来ネイティブコード専用とされるハードウェア機能と相互作用できることが証明されます。
ビルドは意図的に軽量です。スタブ化された C ライブラリ関数のみを使用し、依存関係は
get-deps スクリプトで取得します。Node.js は Duktape(埋め込み型 JavaScript エンジン)のソース生成時にのみ必要です。一度ビルドされると、ファームウェアイメージは QEMU 上で単一の make run コマンドでテストできます。
ドキュメントに示唆された今後の作業では、これらのバインディングを拡張してJavaScript にさらに多くの UEFI 機能を公開し、完全に高水準言語で書かれたよりリッチなブートローダーを実現する可能性があります。
本文
これが何か
JavaScript 用 UEFI バインディング
仕組み
Promethee はブートボリュームから
script.js を読み込み、実行します。このスクリプトがあなたのブートローダーです。UEFI サービスで実装できれば、同じことを JavaScript でも実現できます。
クイックスタート
-
依存関係を取得
./get-deps -
QEMU 上でビルド&実行
make run
エントリポイントは
script.js です。run ターゲットはそれを UEFI FAT ボリューム上の \script.js としてコピーします。
小さな例
script.js の中身:
var gop = efi.SystemTable.BootServices.LocateProtocol(efi.guid.GraphicsOutput); if (gop) { var red = { r: 255, g: 0, b: 0 }; gop.Blt(red, 'EfiBltVideoFill', 0, 0, 50, 50, 200, 120, 0); }
注意点
- Duktape ツールチェーンは Node.js を必要とします(ソース生成に使用)。
- ビルドはフリースタンディングで、最小限の libc スタブのみが提供されます。
もしこれを読んで笑顔になったら、おそらくあなたこそが次世代の光となるでしょう。