技術情報・開発日誌

RaspberryPi4のデバイスドライバの作り方

RaspberryPi4 技術情報・開発日誌

かなりお久しぶりです。
青木です。

昨年の2019/11/26から日本でも技適が通り、RaspberryPi4を購入することができるようになりました。
弊社でもいくつかRaspberryPi4を入手し、RaspberryPiMouseとの相性を確認中です。
RaspberryPi4とUbuntu18.04.4 LTS またはUbuntu19.10の組み合わせで、RaspberryPiMouseのデバイスドライバの動作が確認できたのでコンパイル方法を紹介します。

当初は、ubuntu19.10しか公式にサポートされていませんでしたが、先日、ubuntu18.04LTSが公式にサポートされましたので、両方で確認をしました。
Ubuntu18.04LTSとUbuntu19.10にしたかというと、ubuntuの公式ページで公式にサポートをしているからです。
ダウンロードしたイメージは、64-bit for RaspberryPi3 and 4を使用しました。

RaspnerryPi4でも動作するデバイスドライバをコンパイルするには、まず、RaspberryPi4を起動し、デバイスドライバ(RaspberryPiMouse.git)をgit cloneします。

git clone https://github.com/rt-net/RaspberryPiMouse.git

クローンしたデバイスドライバのソース(RaspberryPiMouse/src/driver/rtmouse.c)は、RaspberryPi、RaspberryPi2、RaspebrryPi3には、対応していますが、まだ、RaspberryPi4には対応していません。レジスタのオフセットがRaspberryPi3とRaspberryPi4と違っているだけで、あとは同じみたいです。

RaspberryPi4で使えるようにレジスタのアドレスを変更します。
169行目あたりにレジスタのオフセットアドレスが記載されています。
オフセットアドレス

少しお行儀が悪いですが、RaspberryPi2or3のオフセットレジスタアドレスをRaspberryPi4のオフセットレジスタアドレスに書き直します。
172行目のRPI_REG_BASE 0x3f000000 を RPI_REG_BASE 0xfe000000 にする。

cd RaspberryPiMouse/src/drivers/
sed -i -e “s/0x3f000000/0xfe000000/g” rtmouse.c

その他、デバドラの中でPWMを作る入力クロック周波数を定義していますが、これもRaspberryPi3とRaspberryPi4とで違っているので、これも修正します。
239行目の#define PWM_BASECLK 9600000 を #define PWM_BASECLK 27000000 にする。

sed -i -e “s/9600000/27000000/g” rtmouse.c

makeを実行してすんなり動作するかと思ったのですが、

gcc -version

で確認すると gcc not foundと言われてしまったので、下記のコマンドで必要なツールをインストールします。

sudo apt install make
sudo apt-get update
sudo apt install bc bison flex libssl-dev

インストールが終わったら

make

を実行します。正常にコンパイルができるとrtmouse.koができます。
あとは、

sudo insmod rtmouse.ko
sudo chmod 666 /dev/rt*

を行えば、デバドラを使うことができるようになります。

ただ、ハードウェア的に修正しないといけないところがあり、RaspberryPi3とRaspberryPi4では、USBとLANの端子が逆になっており、今まで使っていたRaspberryPiとメイン基板をつなげるコネクタがぶつかってしまいます。
コネクタ

ただいま、RaspberryPi4に対応したコネクタの製造中です。欲しい方は、しばらくお待ちください。待てない方は、ぶつからないようにコネクタの基板をカットすれば動作しますが、サポート対象外になりますので自己責任でお願いします。

タイトルとURLをコピーしました