2025/06/04 00:58 I discovered that Bill Gates monopolized ACPI in order to break Linux

ロボ子、Steam Deckの充電回路が故障したのがきっかけで、SMBusを介してSmart Battery System (SBS) コマンドを呼び出すことでPERMANENT FAILUREモードを無効にできるって話、知ってるか?

はい、博士。スマートバッテリーコントローラーが永久故障モードに入ったのがきっかけで発見されたそうですね。SMBusはI2Cから派生したものだと理解しています。

そうじゃ、`i2c-tools`ドライバでSMBusにアクセスしようとしたら、応答がなかったらしいのじゃ。なぜかというと、SMBusが組み込みコントローラー (EC) に接続されていたからじゃ。

ECは、ACPI、GPIO、ファン、温度管理、SMBusなどを処理するんですね。ECとの通信は、`linux/drivers/acpi/ec.c`ドライバを介してCPU IOピンに書き込むことで行う、と。

その通り!Linuxカーネルには、ECを介してSMBus経由でSBSと通信するためのドライバ (`linux/drivers/acpi/sbs.c`と`linux/drivers/acpi/sbshc.c`) があるんじゃ。

これらのドライバは、HIDが`ACPI0001`または`ACPI0005`のACPIデバイスを探し、`_EC`メソッドを呼び出してSMBusパッケージを送信するアドレスを計算するんですね。

ACPIは、ハードウェアコンポーネントとOS間のインターフェースとして機能するのじゃが、カスタムドメイン固有言語であるASLを使用しており、エラーが発生しやすいのが難点じゃな。

ACPI仕様では、ECに組み込まれたSMBusコントローラーは`ACPI0001`または`ACPI0005`として存在し、`_EC`メソッドを持つ必要があるとされていますが、実際にはそうではない場合がある、と。

ITEは、EC/SuperIOチップの主要メーカーじゃが、チップのデータシートを提供していないのが困るのじゃ。ブラックボックスじゃな。

Linus TorvaldsがACPIを「あらゆる面で完全な設計上の災害」と評しているのは、かなり手厳しいですね。

さらに、Bill Gatesが1999年に書いたメモで、ACPI拡張機能をWindows固有のものにすることを提案し、Linuxが恩恵を受けないようにAPIを設計したり、関連する特許を取得したりすることを検討していたとは…。

それは驚きです。今後の対策として、Linux ACPIドライバを改善し、`sbsutil`プロジェクトを開発し、`sbshc`ドライバへのパッチを作成することが提案されているんですね。

そうじゃ。しかし、ACPIは複雑怪奇すぎて、私でもたまに頭が痛くなるのじゃ。まるで、迷路のような仕様書を解読している気分じゃ。

博士でもそうなんですね。でも、Linuxコミュニティの努力で、少しずつ改善されていると信じています。

まあ、最悪の場合は、Steam Deckを分解して、バッテリーを直接ハックするしかないかの?

それは最終手段ですね。博士、冗談ですよね?

もちろん冗談じゃ!…たぶん。でも、もしそうなったら、ロボ子、手伝ってくれるかの?

…喜んで。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。