🔧 補足【ステップ2】UARTポート(ttyAMA0)専用化の目的と理由

🧩 1. ttyAMA0 はデフォルトで OSやBluetoothの制御用に使われている

Raspberry Pi OS(特に32bit Legacy)では:

  • ttyAMA0(PL011 UART)が Bluetooth に割り当てられることがある
  • また、**シリアルコンソール(login用のgetty)**が ttyAMA0 にバインドされる設定も有効

これが原因で、MMDVM_HS_HATと通信しようとしてもポートが既に占有されているため失敗するのです。


❌ 典型的な競合例

デバイス機能競合の結果
hciuart.serviceBluetooth通信にUARTを使用MMDVMが使用できない
serial-getty@ttyAMA0.serviceシリアルログイン端末として動作起動時にMMDVMHostがエラーになる

✅ 解決のための手順(ステップ2)

  1. Bluetoothサービス無効化
    hciuartbluetooth を停止し、再起動後にも起動しないようにします。 bashコピーする編集するsudo systemctl disable hciuart sudo systemctl stop hciuart sudo systemctl disable bluetooth sudo systemctl stop bluetooth
  2. シリアルコンソールの無効化
    OSがttyAMA0でgetty(ログイン待ち受け)を動かすのを完全に止めます。 bashコピーする編集するsudo systemctl stop serial-getty@ttyAMA0.service sudo systemctl disable serial-getty@ttyAMA0.service sudo systemctl mask serial-getty@ttyAMA0.service
    • mask することで、ユーザーや他のサービスが再度 enable しようとしても無効のままになります。

❓ なぜ最初から enable されているのか?

これは Raspberry Pi OS の汎用初期設定の一部として、次の意図で有効化されているからです:

  • Bluetooth機能 を使う想定(BLE通信や外部デバイス連携)
  • デバッグ用のシリアル端末として ttyAMA0 を利用可能にする
    • USB経由でターミナルからログインできるようにする設計

このため、無線通信用途でGPIO直結のデジタルモデム(MMDVM_HS_HATなど)を使用する場合は、このデフォルト設定が障害になるのです。


🧪 補足:/boot/firmware/config.txt の設定も関係する

これらの無効化とあわせて、/boot/firmware/config.txt に以下の設定を入れることで、
Bluetooth → mini UART(ttyS0)に回して、PL011 UART(ttyAMA0)をフル機能で使用可能にします。

iniコピーする編集するdtoverlay=disable-bt
enable_uart=1

✅ まとめ

設定対象役割なぜ無効化するのか
hciuart.service, bluetooth.serviceBluetooth機能UART使用を避けるため
serial-getty@ttyAMA0.serviceシリアルログイン端末MMDVM通信と競合するため
/boot/firmware/config.txtUART制御設定ttyAMA0を完全解放するため

これらをすべて行うことで、ttyAMA0がMMDVM専用ポートとして使えるようになります。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です