【要約】Let's Note SV1のファン回転数がLinuxで一切取れないのでEC RAMを直読みした [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
ユーザーがLet's Note SV1をLinuxで使用した際、ファンの回転数が取得できない問題に直面した。標準的なツールでは、ハードウェアの状態を正しく把握できなかった。詳細は以下の通りである。
- ・sensorsコマンドを実行しても、値がN/Aと表示される。
- ・/sys/class/hwmon/内のデバイスは存在するが、中身が空である。
- ・ACPIのcooling_deviceは、OSからの制御状態を示すだけで実測値ではない。
- ・ACPIテーブル(SSDT)を確認したが、回転数を示すラベルの実体定義が欠落していた。
// Approach
開発者が標準的なACPI/WMI経由の取得を断念し、EC RAMを直接解析する手法を採用した。ハードウェアの生データを読み取ることで、実装漏れを回避した。具体的な手順は以下の通りである。
- ・ec_sysモジュールを読み込み、debugfs経由でEC RAMをダンプする。
- ・CPU負荷を意図的に変動させ、温度変化と連動するバイト列を目視で探す。
- ・オフセット0x34から2バイト(リトルエンディアン)がRPM値であることを特定する。
- ・Pythonスクリプトとsystemdサービスを用い、非特権ユーザーでの監視環境を構築する。
// Result
開発者は、特定のオフセットからファン回転数を正確に取得する手段を確立した。これにより、システムの状態を可視化できるようになった。成果は以下の通りである。
- ・高負荷時(2900〜3500 RPM)とアイドル時(400〜1100 RPM)の変動を確認した。
- ・Pythonによる軽量なモニタリングスクリプトを作成した。
- ・systemdによる権限管理の自動化により、Waybar等のツールへの組み込みを容易にした。
Senior Engineer Insight
> 本手法は、ファームウェアの不備を低レイヤーの解析で突破する極めて実践的なアプローチである。しかし、特定機種の特定オフセットに依存するため、汎用性は皆無である。運用環境への導入は、ハードウェアの仕様変更やカーネルアップデートによる破壊的変更のリスクを伴う。組み込みデバイスのデバッグ手法としては非常に価値が高いが、スケーラブルなシステム設計においては「回避策」として扱うべき技術である。