旧バージョンのRaspberryPI* へのリナックスドライバのインストール

( 最終確認環境: OS = Devian 10.11/ Kernel =5.10.63-V7+ )

以前のラズパイのOSへドライバを組み込む参考手順です。

※以下実際に Rasbian を新規インストールしたデフォルトの状態からドライバの組み込みを行った例です。最新のOSの場合は RV-8803-C7 のドライバがデフォルトで組み込まれているためドライバのビルドの工程は不要になります。

 

★ テストで使用した RaspberryPI* のバージョン等の情報

 ハードウェア  RaspberryPi 3B
 OS / Kernel

 OS = Rasbian 9.4 /Kernel =4.17.70-v7+ 
 OS = Rasbian 10.9/ Kernel =5.10.17-V7+ (確認 2021/09/30)
 OS = Rasbian 10.11/ Kernel =5.10.63-V7+ (最終確認 2022/01/04)

 

@ リナックスドライバのダウンロード

こちらからリナックスドライバをダウンロード出来ます。ドライバファイルの他にドライバの説明ファイル(PDF/英語)も一緒にダウンロードされますのでそちらもご一読ください。

 

ダウンロードしたRV-8803-C7 用の Linuxドライバ用のファイルをUSBメモリなどでRaspberryPI* の任意のフォルダ(ドキュメントなど)に移しておきます(パソコンからドライバファイルを取得した場合 )。

 

A Raspberry PI* での設定 (I2Cを有効化)

先にRasbian の設定の部分で I2Cインターフェースを有効化しておきます 
RV8803-Raspi基板を RaspberryPI* のピンへ接続し、正しく電気的に接続されていると

 

sudo i2cdetect -y 1

 

を送った際には以下の様に<0x32アドレス>に接続されていることを確認出来ます。
RTC リアルタイムクロック ラズパイ
この状態で I2C経由で RaspberryPi から RV-8803-C7 のレジスタへのアクセス、及び設定が出来ます。
(時刻設定、アラーム、タイマ、周波数オフセット設定など)
任意のプログラムを用いてRV-8803-C7 をIC2デバイスとしてご使用になる場合にはこの後の Linuxドライバの設定は必要ありません。

 

kernel-header をインストール

 以下の kernel-header をインストールします。

 

 ・raspberrypi-kernel-headers
 ( apt-get install raspberrypi-kernel-headers でインストール)

 

Cリナックスドライバ組み込みの作業用フォルダの作成

make KDIR = /usr/src/linux 、または~$ sudo pcmanfm  にて管理者権限で /usr/src/を開いて、ここに作業用フォルダとして"/linux" を作成します。ここにドライバ作成用のファイル (Makefile rtc-rv8803.c) をコピーします。
(管理者権限で行う必要があるので、 ~$ sudo pcmanfm   として管理者権限でフォルダを開きます )

 

make コマンドの実施

 

 カーネルヘッダのインストール後に /usr/src/linux ディレクトリで、

 

 make 

 

 の コマンドを実行するとドライバファイルの "rtc-rv8803.ko" が生成されます。

RTC リアルタイムクロック ラズパイ

 

E 作成されたドライバファイルを必要な場所へ移す

作成された "rtc-rv8803.ko" ドライバファイルを必要な場所へ移動します。

 

modprobe rtc-rv8803

 

のコマンドを使うと、

 

Module rtc-rv8803 not found in directry /lib/modules/4.17.70-v7+

 

とエラーが返ってきますので

 

/lib/modules/4.17.70-v7+/

 

のディレクトリに ドライバファイルをコピーします ( "rtc-rv8803.ko" ファイルのみ )。
( kernel のバージョンにより "4.17.70-v7+" の部分は変わってきますので以降も読み替えて下さい )
(管理者権限で行う必要があるので、 ~$ sudo pcmanfm として管理者権限でフォルダを開きます )

 

depmod コマンドの実施

ここで再度 modprobe rtc-rv8803 のコマンドを使ってもまだエラーになります。これは、

 

/lib/modules/4.17.70-v7+/modules.dep

 

のファイルに rv8803 が反映されていないためです。

RTC リアルタイムクロック ラズパイ

RV-8803-C7 を modules.dep ファイルに反映させるために同ディレクトリで

 

depmod

 

のコマンドを使います。
すると "modules.dep" に rtc-rv8803 が反映され modprobe rtc-rv8803 コマンドが通るようになります。
(ファイルを開くと末尾に rtc-rv8803.ko が登録されていることを確認出来ます)
(ファイル末尾に見つからない場合は検索をかけて確認します)

RTC リアルタイムクロック ラズパイ

 

HWCLOCK として組み込むコマンドの実施

ここで

 

modprobe rtc-rv8803

 

のコマンドと、

 

sudo bash
echo rv8803 0x32 > /sys/class/i2c-adapter/i2c-1/new_device
(管理者権限で実行)

 

のコマンドを送ると、ラズパイに hwclock として認識されます。
正しくHWCLOCK として認識されると、

 

i2cdetect -y 1

 

のコマンドで I2Cリスト を確認した際に rv8803の表示が <32> から <UU> に変わっていてOSの管理下になったことが確認出来ます。
RTC リアルタイムクロック ラズパイ

 

後は ご使用方法に合わせて諸設定を行って頂ければ RasbpberryPi の hwclock としてRV-8803-C7 を使用することが出来ます。

 

時計の初期誤差が気になる場合はネットワークに接続して、時計を再書込みしておけば (hwclock -w コマンド)その後はRaspberryPi本体の電源を落としてもバックアップのリチウム一次電池で時刻情報を正確に保持します。

 

逆にネットワークに接続して RV-8803-C7 の保持している時刻とネットワーク時刻との誤差を確認することも出来ます。

 

★RV-8803-C7 を hwclock に設定した後の動作

ハードウェアクロックとして設定すると

 

demog | grep rv8803

 

のコマンドで電圧低下の状態を確認することが出来ます。
(電池を抜き差しして故意に電圧低下状態を作って上記コマンドで確認した例 )
RTC リアルタイムクロック ラズパイ
Voltage low, temperature compensation stoppted
(電圧が規定値を下回り温度補償動作が停止した)
及び
Voltage low, data is invalid
(電圧が規定値を下回ったため データ=時刻情報 が無効です)

 

のコメントが確認出来ます。このコメントは RV-8803-C7 のフラグレジスタ (0Ehアドレス、または1Ehアドレス)の値を反映しています。このフラグレジスタは値が"1"の時にフラグが立った状態で"0"と書き込むとクリアされます。ラズパイに RV8803のドライバを組み込んで HWCLOCK として動作させている場合は、新たに時刻情報の書き込みが行われるとドライバの動作でこれらのフラグはクリアされます。