9

"hwclock"シェル コマンドではなく、C コードで RTC からの読み取りを通信したいと考えています。

ただし、を使用すると、 (これは私の RTC スレーブ アドレスです) がステータスを持っているi2cdetectことが示されます。これは、 「このアドレスは現在ドライバーによって使用されているため、プローブはスキップされました」という意味です。そして、私が試した後、「ボットがアドレスを次のように設定できました:デバイスまたはリソースがビジーです」と表示されました。0x68"UU"i2cget0x68

そのため、Linux カーネルに何らかの問題があり、RTC から常に読み取らなければならないか、またはその他の理由があるかどうかを考えています。

ありがとう

4

2 に答える 2

10

DS-1307 RTC またはそのバリエーションの 1 つを使用していると仮定しています (0x68 スレーブ アドレスのため)。ドライバーがロードされているかどうかを確認します。

$ lsmod | grep rtc

上記のコマンドの出力に rtc_ds1307 のエントリ (このように -> rtc_ds1307 17394 0) が表示された場合、このドライバーがそのアドレスを保持している可能性があります。

ドライバーがシステムにロードされている場合は、次を使用してアンロードします

$ rmmod rtc-ds1307

編集:

(OPのフィードバックに照らして)次のことを行ってください

1) cat /sys/bus/i2c/devices/3-0068/modalias. これにより、このデバイスをビジー状態にしているカーネル ドライバーの名前がわかります。コロン (:) OP のコマンド出力の後にドライバー名をコピーすると、そのds1337が示されます。

2) 次を使用して、ds1337 がドライバーのエイリアスであるかどうかを確認します。

grep ds1337 /lib/modules/`uname -r`/modules.alias

うまくいけば、次の出力が得られます

alias i2c:ds1337 rtc_ds1307

これは、rtc_ds1307 が実際には I2C アドレス 0x68 を保持しているドライバーであるという私たちの推定を裏付けています。

3)rmmod rtc_ds1307ドライバーをアンロードするために使用します。注: これは、ドライバーがロード可能なカーネル モジュールである場合にのみ機能します。それ以外の場合は、次のエラーが表示されます。

ERROR: Module rtc_ds1307 does not exist in /proc/modules

その場合、そのドライバーを無効化/モジュール化してカーネルを再コンパイルする必要があります。

于 2013-07-24T14:17:56.363 に答える
0

0x68 は一部のドライバーで使用されています。カーネル ソース コードでそのドライバーを無効にして、ソース コードを再コンパイルしてください。

于 2016-10-17T12:15:06.917 に答える