RTCドライバデバッグ

4797 ワード

この文書では、以前に駆動移植作業を行ったときのRTCのデバッグの概要を記録します.Platform:RK 3368 OS:Android 7.1 RTC:hym 8563
 
RTCコアファイル
/drivers/rtc/class.c
このファイルはlinuxデバイスモデルコアにクラスRTCを登録し、ドライバに登録/ログアウトインタフェースを提供します.
/drivers/rtc/rtc-dev.c
オープン、readなどの基本的なデバイスファイル操作関数を定義します.
/drivers/rtc/interface.c
主にユーザープログラムとRTC駆動のインタフェース関数を提供し、ユーザープログラムは一般的にioctlを通じてRTC駆動とインタラクティブであり、ここではioctlコマンドごとに呼び出す必要がある関数を定義する.
/drivers/rtc/rtc-sysfs.c
sysfsに関連
/drivers/rtc/rtc-proc.c
Procファイルシステムに関連
/include/linux/rtc.h
RTCに関するデータ構造の定義
 
 
 
 
 
 
設備の住所と配置:
モジュールhym 8563、バスアドレス:1010 001 R/W
右シフト1位得:0101 0001—>reg=<0 x 51>
dts構成
hym8563@51 {
        compatible = "haoyu,hym8563";
        reg = <0x51>;
        #clock-cells = <0>;
};

ボード上のデバイスパス/sys/bus/i 2 c/devices/3-0051
classデバイスノード/sys/class/rtc/rtc 0
rockchip:/sys/class/rtc/rtc0 $ ls
date device  max_user_freq power       subsystem uevent    
dev  hctosys name          since_epoch time      wakealarm

rockchip:/sys/class/rtc/rtc0 $ cat time
11:33:54
rockchip:/sys/class/rtc/rtc0 $ cat date
2019-01-16
rockchip:/sys/class/rtc/rtc0 $ cat name
hym8563
rockchip:/sys/class/rtc/rtc0 $ cat max_user_freq                              
64
rockchip:/sys/class/rtc/rtc0 $ cat uevent                                     
MAJOR=253
MINOR=0
DEVNAME=rtc0

駆動経路/sys/bus/i 2 c/drivers/rtc-hym 8563/3-0051
登録に成功しました.
rtcモジュールのi 2 cバスクロックをテストし、hwclock-wリターンを入力してクロックピンの波形変化を検出する
RTC駆動コード分析:
停電後の電源投入時のRTCのシステム時間設定関数はdrivers/rtc/hctosysにある.c
/*                                                                                                                                             
 * RTC subsystem, initialize system time on startup
*/

#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include 
static int __init rtc_hctosys(void)
{
    int err = -ENODEV;
    struct rtc_time tm;
    struct timespec64 tv64 = {
        .tv_nsec = NSEC_PER_SEC >> 1,
    };
    struct rtc_device *rtc = rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);

    if (rtc == NULL) {
        pr_info("unable to open rtc device (%s)
", CONFIG_RTC_HCTOSYS_DEVICE); goto err_open; } err = rtc_read_time(rtc, &tm); if (err) { dev_err(rtc->dev.parent, "hctosys: unable to read the hardware clock
"); goto err_read; } tv64.tv_sec = rtc_tm_to_time64(&tm); err = do_settimeofday64(&tv64); /* * RTC */ dev_info(rtc->dev.parent, "setting system clock to " "%d-%02d-%02d %02d:%02d:%02d UTC (%lld)
", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, (long long) tv64.tv_sec); err_read: rtc_class_close(rtc); err_open: rtc_hctosys_ret = err; return err; } late_initcall(rtc_hctosys);

上記の関数を実行してカーネルに印刷する情報は次のとおりです.
rockchip:/ $ dmesg | grep rtc                                                 
[    1.086439] rtc-hym8563 3-0051: rtc core: registered hym8563 as rtc0
[    2.150024] rtc-hym8563 3-0051: setting system clock to 2019-01-16 11:18:42 UTC (1547637522)
//  ,  2019-01-16 11:18:42 UTC
//   RTC
rockchip:/ $ date
Wed Jan 16 11:19:13 GMT 2019

i 2 cバス初期化装置関数はdrivers/rtc/rtc-hym 8563にある.c
static int hym8563_init_device(struct i2c_client *client)
{
    int ret;

    /* Clear stop flag if present */
    ret = i2c_smbus_write_byte_data(client, HYM8563_CTL1, 0);  //   0
    if (ret < 0)
        return ret;

    ret = i2c_smbus_read_byte_data(client, HYM8563_CTL2);   // , 0 
    if (ret < 0)
        return ret;

    /* Disable alarm and timer interrupts */
    ret &= ~HYM8563_CTL2_AIE;
    ret &= ~HYM8563_CTL2_TIE;

    /* Clear any pending alarm and timer flags */
    if (ret & HYM8563_CTL2_AF)
        ret &= ~HYM8563_CTL2_AF;

    if (ret & HYM8563_CTL2_TF)
        ret &= ~HYM8563_CTL2_TF;

    ret &= ~HYM8563_CTL2_TI_TP;
    return i2c_smbus_write_byte_data(client, HYM8563_CTL2, ret);
} 

上位レベルへのインタフェース:/dev/rtc 0
 
参考記事:
rtc結晶の振動が起こらない問題:
https://www.cnblogs.com/Pual623548198/p/6683934.html
https://blog.csdn.net/u010278579/article/details/47303297?utm_source=blogxgwz1
https://blog.csdn.net/weiwei_xiaoyu/article/details/82819864
RTCクロック駆動:https://www.cnblogs.com/wanghuaijun/p/7189733.html
RTC関連レジスタ:http://tech.hqew.com/fangan_1852073
デバイスツリーの構成:https://www.cnblogs.com/fah936861121/articles/6908230.html 
 https://www.cnblogs.com/lifexy/p/7839625.html