Rasberry Pi 3でirsendが使えなくなったことに対する対応 【続報】
はじめに
前回の記事でkernelアップグレードに対して/boot以下の設定を書き変えることで使用できるようにしたのですが、
部屋のライトは制御できて,エアコンが制御できない現象が発生しました。
Rasberry Pi 3でirsendが使えなくなったことに対する対応 - 家庭でIoTを実現しよう(Rasberry Pi3 & Jetson Nano)
今回はその対策です。
kernelを書き変えますので同じことをやって起動しなくなる可能性もありますので自己責任にてお願いいたします。
SDカードのバックアップを取ってから実行することをお勧めします。
手順は以下の通りです
環境
項目 | 内容 |
---|---|
デバイス | Rasberry Pi 3 B+ |
OS | rasbian stretch |
今回すべてのコマンドはraspi上で行っています。
OSおよびカーネルのアップデート
既に最新になっている方は読み飛ばしてください。
現在のパッケージを最新版にする。
$ sudo apt update $ sudo apt upgrade $ sudo apt dist-upgrade
カーネルをstretchの最新版にアップデートする
$ sudo rpi-update
私のrasbianはstretchだったので最新版のbusterに更新します。
/etc/apt/sources.list と/etc/apt/sources.list.d以下のファイルのstretchをbusterに書き変えてください。
書き変え後以下のようにアップグレードします。途中失敗する場合もありますが,upgradeで失敗してもdist-upgradeを実行してください。
どうやらupgradeは一部パッケージの依存関係を解決できないみたいです。
dist-upgradeが成功すれば大丈夫です。
$ sudo apt update $ sudo apt upgrade $ sudo apt dist-upgrade $ sudo apt autoremove
一度rebootします。
$ sudo reboot
リブートして以下のコマンドで10.以上の数値が出ればアップデートが正常にできています。
$ cat /etc/debian_version
カーネルのビルド。
公式のドキュメントを参考に実行します。環境に合わせて公式に記載の内容で読み替えてください。 一部ソースの書き換えが入ります。 www.raspberrypi.org
ビルドに必要なパッケージをインストールする。
$ sudo apt-get install git bc bison flex libssl-dev
カーネルのソースをダウンロードする
$ git clone --depth=1 https://github.com/raspberrypi/linux
ソースコードの修正
LIRCのコマンドのバッファーサイズを大きくします。 参考 [Stretch/Buster] Using LIRC with kernel 4.19.X and gpio-ir - Raspberry Pi Forums
@ linux/drivers/media/rc/lirc_dev.c #define LIRCBUF_SIZE 256 > #define LIRCBUF_SIZE 1024
カーネルのビルド
$ cd linux $ KERNEL=kernel7 $ make bcm2709_defconfig $ make -j4 zImage modules dtbs
インストール
$sudo make modules_install $sudo cp arch/arm/boot/dts/*.dtb /boot/ $sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/ $sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/ $sudo cp arch/arm/boot/zImage /boot/$KERNEL.img $sudo reboot
おわりに
お疲れさまでした。以上でirsendでエアコンなどの長い信号も送信できるようになったと思います。
正直全部書き変える必要もないのではと思ったりしているのですが,とりあえず今回はこの方法でうまくいったので記事をまとめました。
一応公式にもこのバグは認識されているとは思うのでそのうち修正されるといいなとは思っていますがとりあえず今は自分で対応するしかありませんね。