0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【完全解決】Raspberry Pi 5 + Ubuntu 24.04でPironman5の背面ファンがGPIO Busyで制御不能になる問題

0
Posted at

この記事を書いた動機

Raspberry Pi 5をPironman 5に入れ、Ubuntu 24.04 LTSでサーバーを構築していました。
組み上げて電源を入れた瞬間、ある事実に気付きます。

CPUは40℃台で涼しいのに、背面のRGBファン2発が常時フル回転で爆音を発し続けている。

sudo pironman5 -gm 3(温度ベース自動制御)を叩いても無反応。
公式ダッシュボードはエラー連発で使い物にならない。
gpiosetコマンドで直接叩いてみると――

sudo gpioset gpiochip4 6=0
# gpioset: error setting the GPIO line values: Device or resource busy

Device or resource busy。
Pironmanのコマンドも、Linux標準のGPIOコマンドも、すべてOSに弾かれていた。

この記事では、「なぜそうなるのか」という根本原因と、Pythonコードを一切書かずにたった1行で完全解決する方法を共有します。


環境

項目 バージョン
ハードウェア Raspberry Pi 5
ケース SunFounder Pironman 5
OS Ubuntu 24.04 LTS
Pironman5ソフト pironman5 v1.2.7
カーネル 6.8以降

症状の確認

サービスのログを見ると、問題の核心が見えます。

sudo systemctl status pironman5.service
● pironman5.service - pironman5 service
     Active: active (running)
...
[INFO] PWM Fan is supported, sync all other fan with pwm fan
[INFO] FanControl initialized

一見正常に見えますが、journalctlでより詳細なログを確認すると…

sudo journalctl -u pironman5.service -n 50 --no-pager

pm_autoモジュールがGPIO 6番にアクセスしようとしてサイレントにエラーを吐き、制御を放棄していることが確認できます。
設定値は正しく書き込まれているのに、ファンには何も伝わっていない状態です。

sudo pironman5 -c
# "gpio_fan_mode": 3  ← 設定は正しい
# でもファンはフル回転のまま

設定ファイルにgpio_fan_mode: 3が正しく書かれているのにファンが止まらない場合、ソフトウェアの問題ではなくOSレベルのGPIOロックが原因である可能性が非常に高いです。


根本原因:Ubuntuカーネルによる「GPIO 6番の自動予約」

これはPironman5のバグではありません。Ubuntu 24.04(Kernel 6.8以降)とRaspberry Pi 5の仕様変更の衝突が原因です。

ラズパイ5はRP1という新しいチップを搭載しており、Ubuntuのカーネルは起動時にデバイスツリーを読み込んで各ピンの用途を割り当てます。
このとき、特定のGPIOピンを「I2C・SPI・1-Wire通信用として将来使うかもしれないから、カーネルドライバで先に予約(ロック)しておこう」とお節介にも自動的に囲い込んでしまいます。

その結果として

Pironman5(pm_auto)
  └→ GPIO 6番にアクセスしようとする
        └→ Ubuntu カーネル「それは俺の予約済みピンだ。触るな(busy)」
              └→ Pironman5「アクセス失敗…制御不能…フェイルセーフ発動…ファン100%で回し続けます」

という最悪の連鎖が起きています。

gpiozeroを最新版(2.0.1)にアップデートすれば直る」という情報もありますが、このカーネルレベルのハードウェアロックには無力でした。
venv内のライブラリ更新、GPIOZERO_PIN_FACTORY=lgpioの環境変数設定、/dev/gpiochip4のシンボリックリンク作成、いずれも効果なしでした。


試した解決策と結果まとめ

試した方法 結果
pironman5 -gm 3(バランスモード設定) ❌ 効果なし
venv内のgpiozeroを2.0.1にアップデート ❌ 効果なし
GPIOZERO_PIN_FACTORY=lgpioを環境変数に追加 ❌ 効果なし
/dev/gpiochip4のシンボリックリンク作成 ❌ 効果なし
gpiosetコマンドで直接操作 Device or resource busy
config.txtにGPIO宣言を追記 完全解決

解決策:/boot/firmware/config.txtへの1行追記

なぜこれで直るのか?

config.txtの設定はLinuxカーネルよりも低いレイヤー(ブートローダー=ファームウェア)が処理します。
つまりUbuntuカーネルがデバイスツリーを読み込んで「GPIO 6番を通信用に予約しよう」と動き出すよりも前の段階で、「このピンはユーザーが出力用に使います」という事実が確定されます。
その結果、カーネルはそのピンに通信用のロックをかけなくなります。

手順

1. config.txtを開く

sudo nano /boot/firmware/config.txt

2. ファイルの末尾に以下を追記する

config.txt
gpio=6=op,dl
パラメータ 意味
6 GPIOのピン番号(Pironman5背面ファンの制御ピン)
op Output(出力モードとして宣言)
dl Drive Low(初期電圧を0V=OFFで固定)

3. 保存して再起動

sudo reboot

動作確認

再起動後、あの煩かった背面ファンが静かになっているはずです。
以下のコマンドで制御が復活していることを確認しましょう。

# テスト①:強制フル回転(これで回ればGPIOアクセス成功)
sudo pironman5 -gm 0
sudo systemctl restart pironman5

# テスト②:温度ベース自動制御(冷えていれば止まる)
sudo pironman5 -gm 3
sudo systemctl restart pironman5

ファンモード(-gm)一覧

モード 名前 起動温度
0 Always On 常時回転
1 Performance 50℃
2 Cool 60℃
3 Balanced 67.5℃
4 Quiet 70℃

OLED・LED・ファンをダッシュボードなしで管理する

Pironman5のダッシュボードはUbuntu環境で不安定なため、すべてコマンドラインで管理するのがおすすめです。

# 現在の設定を確認
sudo pironman5 -c

# LED制御
sudo pironman5 -re true         # LED ON
sudo pironman5 -rc 0a1aff       # 色(16進)
sudo pironman5 -rb 50           # 明るさ(0-100)
sudo pironman5 -rs breathing    # エフェクト
sudo pironman5 -rp 50           # 速度(0-100)

# OLEDディスプレイ制御
sudo pironman5 -oe true         # ON
sudo pironman5 -or 0            # 回転(0 or 180)

# 設定反映
sudo systemctl restart pironman5

OLEDには「スクリーンセーバー的な自動スリープ」機能がありません。画面焼け(バーンイン)を防ぐには、以下のスクリプトで「見たい時だけ30秒だけ点灯させる」運用がおすすめです。

~/oled_wake.sh
#!/bin/bash
sudo pironman5 -oe true
sudo systemctl restart pironman5
echo "OLEDを点灯しました。30秒後に消灯します…"
sleep 30
sudo pironman5 -oe false
sudo systemctl restart pironman5

まとめ

config.txt
gpio=6=op,dl

この1行が、数時間の苦しみを終わらせてくれました。

同じ問題に苦しんでいる人の参考になれば幸いです。
役に立ったと思ったら LGTM をお願いします 👍

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?