MiniBook (J4125版) のファンを低温下で停止させる

10月 28, 2024
ハードウェア, ソフトウェア
UMPC, MiniBook, CHUWI, Embedded Controller, EC, Firmware, Hack

はじめに #

一昔前, GPD Pocketをはじめとした7, 8インチサイズの小型PC, UMPCが流行していたのを覚えているでしょうか. 特にドンキで販売されていたドンキPC, NANOTEシリーズは印象に残っている人も多いと思います. 結局, その流行は過ぎ去り, GPD WinシリーズやSteam Deckなどが今生き残っているUMPCの代表格となっています.

しかし, 流行りに乗り遅れながらもUMPCの魅力に惹かれてしまった私は, 今更ながらCHUWI MiniBookを購入しました. (実はNANOTEも以前購入していましたがあまりにも性能が悪すぎて使い物になりませんでした…)

搭載しているCPUはJ4125であり, N100には遠く及ばないとしてもNANOTEや初代GPD Pocketと比べて性能が高く, 割と(NeoVimでプログラム書いたり, marpによるスライド作成をする程度に)日常的に使えるPCとなっています.

しかし…このMiniBookには一つだけ大きな問題があります. それはファンの音です. CPU使用率が低く, CPU温度が低い状態でもファンが回り続けるため, 作業中にファンの音が気になることがあります. しかも, 高周波成分が多く, そこそこうるさく感じるレベルです. このファンの回転はOSやBIOSから制御することができないため, 通常の方法ではファンを停止させることができません.

そこで本記事では, Embedded Controller (EC) のファームウェアを書き換えることでMiniBookのファンを低温下で停止させることに成功したので, その方法を紹介します.

警告

本記事では, PC内部のコントローラのファームウェア書き換えについて説明します. これは, メーカーの保証を無効にする行為であり, 場合によっては二度とPCが起動しなくなる可能性もあります.

自身で問題を解決できる方, この記事で実施している内容の意味を理解している方, 何が起きても諦めがつく方のみ実施してください.

また, 本記事に従って行った結果生じた損害については一切責任を負いません. 自己責任でお願いします.

前提知識 #

CHUWI MiniBook #

MiniBook (8インチ) 版にはいくつかのモデルが存在. それぞれ異なるCPUやハードウェア構成.

  • m3-8100Y搭載モデル
    • 欧州版
    • 日本版
  • J4125搭載モデル
    • 欧州版 今回対象のモデル
    • 日本版

今回は, 欧州版のJ4125搭載モデルを対象としています. モデルによってハードウェア構成が異なるため, (もちろん) ECのファームウェアも異なります. そのため, 他のモデルに対して本記事の内容を適用することはできません. ご注意を.

Embedded Controller (EC) #

Embedded Controller (EC) とは, マザーボード上に搭載されているマイクロコントローラのことです. このECは, ハードウェアの制御や監視を行うためのものであり, ファンの制御もその一つです.

ものによっては, BIOS (UEFI) に対してインターフェースを提供しており, ファンの制御をBIOS, さらにはOSから行うこともできたりします. しかし, 一部のPCでは, 全ての制御がECによって行われており, BIOSやOSからの制御ができない場合があります. このMiniBookもその一つです.

ECファームウェアの書き換え #

それならば, ECのファームウェアを書き換えてしまえばファンを停止させることができるはずです.

実は, MiniBook (m3-8100Y, 欧州版) では, ECのファームウェアを書き換えることでファンの停止を実現する手法1がフォーラム上で公開されていました.

Minibook EC patch (fans turn off now)

Hello everyone! I made a patch to the EC firmware that turns off the fans when temperatures are low. This took me almost a week! The patch is for European EC firmware! Note that the temperatures are very bad on my machine, probably because I disassembled it, so the fans keep turning on. But they turn off eventually so at least some battery is saved! Anyway, you can roll back it at any time if you’ll experience the same. I’M NOT RESPONSIBLE FOR YOUR BRICKED LAPTOPS! DO THIS AT YOUR OWN RISK! T...

これを参考にしつつ, MiniBook (J4125, 欧州版) に対しても同様の手法が適用できないか試してみました.

準備 #

  • やらかしても諦める心または, なんとしても復旧するという覚悟
    • 例: ROMライタ, SOIC8クリップなど
  • CHUWI MiniBook (J4125, 欧州版)
    • このモデル以外は対象外です…!!
    • 他のモデルもまあ, 似た感じにできるので知識がある人は自分でリバースエンジニアリングしてバイナリの似た部分を探してみてください.
  • USBメモリ
  • ファームウェア読み書き用ツール

手順 #

作業は以下の手順で行います.

  1. ファームウェアのダンプ
  2. ファームウェア解析・書換え
  3. ファームウェアのフラッシュ
  4. ファン停止確認

1. ファームウェアのダンプ #

まずは, ECのファームウェアを読み出します. これは, 今後の作業でのバックアップとしても重要です. もし, 書換えに失敗しても, バックアップがあればROMライタで書き込めばなんとかなるかもしれません.

USBメモリの準備 #

まず, 準備でダウンロードしたrarファイルを解凍します. その中には以下のファイルが含まれています.

  • 2019-10-29欧版EC/
    • ec.bin
      • ECのファームウェア
      • m3-8100Y版向けのため今回は不要
    • efi/boot/
      • BootIa32.efi
      • Bootx64.efi
        • UEFIシェル
    • eFuitX64.efi
      • フラッシュツール (今回のメイン)
    • Startup.nsh
      • 今回は不要
      • 絶対に削除すること

フラッシュツールはEFIアプリケーションなので, これを起動するためにUSBメモリから起動できるようにします.

  1. USBメモリをFAT32でフォーマット
  2. 必要なファイルをUSBメモリにコピー
    • 不要なファイルは削除

最終的には以下のような構成になります.

  • USBメモリ (root) /
    • efi/boot/
      • BootIa32.efi
      • Bootx64.efi
    • eFuitX64.efi

フラッシュツールを使ってダンプ #

ファイルのコピーが終わったUSBメモリをMiniBookに挿入し, 電源を入れます. するとUEFIシェルが起動します.

UEFI Shell

  1. fsX: を実行し, USBメモリにアクセス
    • 環境によって異なるため, fsX: でアクセスできるドライブを探してください
    • ls でファイル一覧を表示し, 正しいドライブか確認
    • 画像の例では, fs4 がUSBメモリであることがわかります
  2. eFuitX64.efi /d ec.bin を実行してファームウェアをダンプ
    • ec.bin にファームウェアが保存される
    • この時, 異なるファイル名で何回かダンプしておくことをお勧めします

注意

状況によっては, 読み出しミスでファームウェアが正常にダンプできていないことがあります. そのため, 何度か異なるファイルにダンプしてハッシュ値を比較し, 同じファイルがダンプできていると確信が持てるまでダンプを繰り返すことをお勧めします.

2. ファームウェア解析・書換え #

ダンプしたファームウェアがUSBメモリに保存されているので, これを解析し, ファンの停止に関わる部分を探します.

先人の教え1によると,

For devs: Our EC is IT8987 which contains the 8051 CPU inside. Official docs for this EC are not available, however you can find datasheets for similar chips, for example IT8570E or IT8511E. You can find the common part of EC firmware on GitHub 118, but you have to RE the OEM part. 8051 controller is 8-bit, but it’s very easy to learn how it works because of it’s simplicity :). Note that the firmware is divided into 4 “memory banks” (1 common at address 0, 3 other switchable, starting at 0x8000, bank size is 0x8000 bytes each), but the last one is not used. So 2+1 banks in total. The part that controls the fans is in 2nd bank. The patch is literally 1-byte.

MiniBook (m3-8100Y) で使われているECはIT8987というものらしいです. まあ, おそらく同じコントローラか似たものが使われていると予想してこの教えに従いましょう.(後に調べた結果同じでした)

具体的に教えのどこが参考になるんだよという細かい内容についてはノーコメントで

特に使われているCPUは, Intel 8051で命令がすべて1バイトの良い感じのCPUです. 先人の言うように勉強用にもちょうど良い感じです.

先人の手法ではこのECのファームウェアの, PWMによるファン制御の最小デューティサイクルを0に変更することで, ファンが回転を始める温度をより高温に変更しているようです.

ここでも同じようにデューティサイクルを変更します. まずはその値が設定されている場所を特定しなければなりません.

便利ツール紹介 #

このオフセットを探すために便利だったツールがこちら.

8051-disassembler #

いい感じに逆アセンブルしてくれる

GitHub - anarcheuz/8051-disassembler

Contribute to anarcheuz/8051-disassembler development by creating an account on GitHub.

8051 Instruction Set #

書き換えるアドレスの特定 #

以上のツールなどを駆使した結果, 以下の表のオフセットにファンのデューティサイクルを設定する部分があることがわかりました. これを書き換えることでファンの停止を実現します.

offsetbeforeafter
0x1159d0x660x00

お好きなバイナリエディタや何らかの方法で, ダンプしたファームウェアを書き換えてください. この際, 元のファームウェアとは異なる名前で保存しておくことをお勧めします.

ここでは, 例として ec_patched.bin という名前で保存しておきます.

3. ファームウェアのフラッシュ #

手順1のファームウェアのダンプで用いたフラッシュツールを使って今度は書き換えたファームウェアをフラッシュします.

USBメモリの準備 #

USBメモリの構成は, 手順1と同じです. ただし, 今回は書き換えたファームウェアをUSBメモリにコピーしてください.

構成は以下のようになります.

  • USBメモリ (root) /
    • efi/boot/
      • Bootla32.efi
      • Bootx64.efi
    • eFuitX64.efi
    • ec_patched.bin
      • 書き換えたファームウェア

フラッシュ #

USBメモリをMiniBookに挿入し, 電源を入れます. UEFIシェルが起動したら, フラッシュツールを使ってファームウェアを書き換えます.

UEFI Shell

  1. fsX: を実行し, USBメモリにアクセス
  2. eFuitX64.efi ec_patched.bin /faildelay を実行してファームウェアを書き換え
    • 書き換えが完了すると, ファームウェアの書き換えが成功した旨のメッセージが表示されます

警告

ファームウェアの書き換えに失敗すると, PCが起動しなくなる可能性があります. そのため, 書き換え中に電源が切れるような事態は絶対に阻止してください. ここでやらかすと面倒なことになります.

4. ファン停止確認 #

ファームウェアの書き換えが完了したら, MiniBookを再起動してファンが停止しているか確認します.

高温時(大体55°C以上)になるまでファンが回転しないことを確認できれば成功です. おめでとうございます. 軽い作業を行なっている間は静かなMiniBookを楽しむことができるでしょう.

おわりに #

本記事では, CHUWI MiniBook (J4125, 欧州版) のファンを低温下で停止させる方法を紹介しました.

ファンの音が気になる方は, ぜひ試してみてください. ただし, 何かあっても自己責任でお願いします.

やらかしても諦める心を持ち, 何が起きても諦めがつく覚悟で実施してください.

決して, 他のモデルに対して本記事の内容を適用しないでください. 他のモデルに対しては, 別途調査が必要です. 以前フォーラムに公開されていたパッチ済みファームウェアは, m3-8100Y搭載モデル向けのものであるのに, 別の日本語モデルやJ4125搭載モデルのECのフラッシュに書き込んで文鎮化させている人を見かけて哀れな気持ちになりました. よく理解せずにやるとこうなるので, 本当に気をつけてください.

おそらく, 日本語版でも同様の手法が適用できると思われますが, その場合は別途調査が必要です.