前回のラズパイでBluetooth無効化の手順では、達成できないことがある。
そう、BlueZの代わりに別のスタックを動かしたい場合などだ...
ホントに利用するシーンある?
Raspberry Pi 4の初期状態では、こんな風になっている。
$ ls -l /dev/serial0 lrwxrwxrwx 1 root root 5 Jul 2 16:41 /dev/serial0 -> ttyS0 $ ls -l /sys/class/tty/ttyS0 lrwxrwxrwx 1 root root 0 Jul 2 16:48 /sys/class/tty/ttyS0 -> ../../devices/platform/soc/fe215040.serial/fe215040.serial:0/fe215040.serial:0.0/tty/ttyS0 $ ls -l /sys/class/bluetooth/hci0 lrwxrwxrwx 1 root root 0 Jul 2 16:49 /sys/class/bluetooth/hci0 -> ../../devices/platform/soc/fe201000.serial/fe201000.serial:0/fe201000.serial:0.0/serial0/serial0-0/bluetooth/hci0
前回の手順で無効化すると
$ ls -l /dev/serial0 lrwxrwxrwx 1 root root 7 Jul 2 16:30 /dev/serial0 -> ttyAMA0 $ ls -l /sys/class/tty/ttyS0 lrwxrwxrwx 1 root root 0 Jan 1 1970 /sys/class/tty/ttyS0 -> ../../devices/platform/serial8250/serial8250:0/serial8250:0.0/tty/ttyS0 $ ls -l /sys/class/tty/ttyAMA0 lrwxrwxrwx 1 root root 0 Jan 1 1970 /sys/class/tty/ttyAMA0 -> ../../devices/platform/soc/fe201000.serial/fe201000.serial:0/fe201000.serial:0.0/tty/ttyAMA0
実は、BlueToothを無効にするとシリアルコンソールが /dev/ttyS0 から /dev/ttyAMA0 に切り替わってしまう。
これでは、BlueToothに接続されていたポート設定が、シリアルコンソールに変わってしまって意味がない。
そこで、Bluetoothの無効化ではなく、Bluetoothのカーネル自動起動を抑止する。
$ sudo nano /boot/firmware/config.txt
dtoverlay=disable-bt ではなくて、dtparam=krnbt=off でBluetoothのカーネル自動起動を抑止する。
enable_uart=1 は元々の設定。
[all] enable_uart=1 # 内蔵Bluetoothの無効化 # dtoverlay=disable-bt # Bluetoothのカーネル自動起動を抑止 dtparam=krnbt=off
前回はあえて行わなかった、bluetoothサービスの停止を明示的に行う。
$ sudo systemctl stop bluetooth $ sudo systemctl disable bluetooth
これで再起動を行う。
$ ls -l /dev/serial0 lrwxrwxrwx 1 root root 5 Jul 2 19:24 /dev/serial0 -> ttyS0 $ ls -l /sys/class/tty/ttyS0 lrwxrwxrwx 1 root root 0 Jul 2 19:27 /sys/class/tty/ttyS0 -> ../../devices/platform/soc/fe215040.serial/fe215040.serial:0/fe215040.serial:0.0/tty/ttyS0 $ ls -l /sys/class/tty/ttyAMA1 lrwxrwxrwx 1 root root 0 Jul 2 19:27 /sys/class/tty/ttyAMA1 -> ../../devices/platform/soc/fe201000.serial/fe201000.serial:0/fe201000.serial:0.0/tty/ttyAMA1
これで上手くいったはずだが...

