( 最終確認環境: OS = Devian 10.11/ Kernel =5.10.63-V7+ )
※以下実際に Rasbian を新規インストールしたデフォルトの状態からドライバの組み込みを行った例です。最新のOSの場合は RV-8803-C7 のドライバがデフォルトで組み込まれているためドライバのビルドの工程は不要になります。
★ テストで使用した RaspberryPI* のバージョン等の情報
ハードウェア | RaspberryPi 3B |
OS / Kernel |
OS = Rasbian 9.4 /Kernel =4.17.70-v7+ |
@ リナックスドライバのダウンロード
こちらからリナックスドライバをダウンロード出来ます。ドライバファイルの他にドライバの説明ファイル(PDF/英語)も一緒にダウンロードされますのでそちらもご一読ください。
ダウンロードしたRV-8803-C7 用の Linuxドライバ用のファイルをUSBメモリなどでRaspberryPI* の任意のフォルダ(ドキュメントなど)に移しておきます(パソコンからドライバファイルを取得した場合 )。
A Raspberry PI* での設定 (I2Cを有効化)
先にRasbian の設定の部分で I2Cインターフェースを有効化しておきます。
RV8803-Raspi基板を RaspberryPI* のピンへ接続し、正しく電気的に接続されていると
sudo i2cdetect -y 1
を送った際には以下の様に<0x32アドレス>に接続されていることを確認出来ます。
この状態で I2C経由で RaspberryPi から RV-8803-C7 のレジスタへのアクセス、及び設定が出来ます。
(時刻設定、アラーム、タイマ、周波数オフセット設定など)
任意のプログラムを用いてRV-8803-C7 をIC2デバイスとしてご使用になる場合にはこの後の Linuxドライバの設定は必要ありません。
B 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 として管理者権限でフォルダを開きます )
D make コマンドの実施
カーネルヘッダのインストール後に /usr/src/linux ディレクトリで、
make
の コマンドを実行するとドライバファイルの "rtc-rv8803.ko" が生成されます。
![]() ![]() |
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 として管理者権限でフォルダを開きます )
F depmod コマンドの実施
ここで再度 modprobe rtc-rv8803 のコマンドを使ってもまだエラーになります。これは、
/lib/modules/4.17.70-v7+/modules.dep
のファイルに rv8803 が反映されていないためです。
![]() ![]() |
RV-8803-C7 を modules.dep ファイルに反映させるために同ディレクトリで
depmod
のコマンドを使います。
すると "modules.dep" に rtc-rv8803 が反映され modprobe rtc-rv8803 コマンドが通るようになります。
(ファイルを開くと末尾に rtc-rv8803.ko が登録されていることを確認出来ます)
(ファイル末尾に見つからない場合は検索をかけて確認します)
![]() ![]() |
G 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の管理下になったことが確認出来ます。
後は ご使用方法に合わせて諸設定を行って頂ければ RasbpberryPi の hwclock としてRV-8803-C7 を使用することが出来ます。
時計の初期誤差が気になる場合はネットワークに接続して、時計を再書込みしておけば (hwclock -w コマンド)その後はRaspberryPi本体の電源を落としてもバックアップのリチウム一次電池で時刻情報を正確に保持します。
逆にネットワークに接続して RV-8803-C7 の保持している時刻とネットワーク時刻との誤差を確認することも出来ます。
★RV-8803-C7 を hwclock に設定した後の動作
ハードウェアクロックとして設定すると
demog | grep rv8803
のコマンドで電圧低下の状態を確認することが出来ます。
(電池を抜き差しして故意に電圧低下状態を作って上記コマンドで確認した例 )
Voltage low, temperature compensation stoppted
(電圧が規定値を下回り温度補償動作が停止した)
及び
Voltage low, data is invalid
(電圧が規定値を下回ったため データ=時刻情報 が無効です)
のコメントが確認出来ます。このコメントは RV-8803-C7 のフラグレジスタ (0Ehアドレス、または1Ehアドレス)の値を反映しています。このフラグレジスタは値が"1"の時にフラグが立った状態で"0"と書き込むとクリアされます。ラズパイに RV8803のドライバを組み込んで HWCLOCK として動作させている場合は、新たに時刻情報の書き込みが行われるとドライバの動作でこれらのフラグはクリアされます。