This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM4378:内部 RTC、OMAP-RTC 驱动程序、"RTC_RD_TIME:无效参数"

Guru**** 2539500 points
Other Parts Discussed in Thread: AM4372, AM4378

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/626770/linux-am4378-internal-rtc-omap_rtc-driver-rtc_rd_time-invalid-argument

器件型号:AM4378
主题中讨论的其他器件:AM4372

工具/软件:Linux

我正在尝试在运行 Linux、内核版本4.1.18的定制板上读取 AM4378上的内部 RTC。  我已使用"/arch/arm/boot/dts/am437x-gp-evm.dts "作为指南来设置器件树。  我没有外部时钟源。  默认情况下包括"am4372.dtsi"、其中包括配置 RTC 的本节。

RTC:RTC@44e3e000{
兼容="ti、am4372-rtC"、"ti、am3352-rtC"、"ti、DA830-rtC";
reg =<0x44e3e000 0x1000>;
中断= ;
ti、hwmds ="rtc";
系统电源控制器;
status ="禁用";
}; 

在基于"AM437X-gp-evm.dts "的自定义 DTS 文件中、我有以下行。

RTC{(&R)
状态="确定";
}; 

我的理解是、这应该会启用内部 RTC。  在启动期间、我观察到以下情况:

[1.251581] OMAP_RTC 44e3e000.RTC:RTC 内核:将44e3e000.RTC 注册为 rtc0...

[1.472652] OMAP_RTC 44e3e000.RTC:hctosys:无法读取硬件时钟 

我认为这表明"OMAP_RTC"驱动程序正在正确加载。  RTC 出现在器件树中(作为/dev/rtc0)。

问题是、我似乎无法从该器件读取数据。  我已经查看了有关"hwclock"的信息、下面显示了各种命令的结果。


# hwclock --help
Busybox v1.23.2 (2017-08-09 12:21:48 EDT)多呼叫二进制文件。

用法:hwclock [-r|--show][-s|--hctosys][-w|--systohc][-t|--systz][-l|--localtime][-u|--UTC][-f|--RTC 文件]

查询和设置硬件时钟(RTC)

-r 显示了硬件时钟时间
-s 从硬件时钟设置系统时间
w 设置系统时间的硬件时钟
t 设置内核时区、正确的系统时间
如果硬件时钟处于本地时间
-u 假设硬件时钟保持 UTC 状态
-l 假设硬件时钟保持本地时间
f 文件使用指定的器件(例如/dev/rtc2) 

# hwclock -r -f /dev/rtc0
hwclock:rtc_rd_time:参数无效 

这似乎表明"OMAP_RTC"驱动程序内的 ioctl 函数调用有问题。


# hwclock -w -f /dev/rtc0

此函数调用不清楚写入(设置硬件时钟)是否成功。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们将对此进行研究。 反馈将发布在此处。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Kevin:

    [引用用户="Kevin Sylvestre93">我没有外部时钟源。 [/报价]

    [引用用户="Kevin Sylvestre93">RTC: RTC@44e3e000{compatible ="ti,am4372-rtC"、"ti,am3352-rtC"、"ti,DA830-rtC";reg =<0x44e3e000 0x1000>;interrupts = ;ti、hwmods ="rtc";系统电源控制器;状态="禁用";};

    [引用用户="Kevin Sylvestre93"]&RTC{status ="确定";};

    [引用 USER="Kevin Sylvestre93"[1.472652] OMAP_RTC 44e3e000.RTC:hctosys:无法读取硬件时钟[/quot]

    我怀疑主要问题是您没有为 RTC 模块提供32KHz 时钟(外部时钟和内部时钟)。 在 AM437x TI EVM DTS 文件中、我们有:

    RTC:RTC@44e3e000{
             兼容="ti、am4372-rtC"、"ti、am3352-rtC"、
                    "TI、DA830-RTC";
             reg =<0x44e3e000 0x1000>;
             中断=<GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH
                     GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH_>;
             ti、hwmods ="rtc";
             时钟=<&clk_32768_ck>;
             时钟名称="int-clk";
             STATUS ="禁用";
          };

    CLK_32768_ck:CLK_32768_ck{
          #clock-cells =<0>;
          兼容="固定时钟";
          时钟频率=<32768>;
       };

    RTC{(&R)
       时钟=<&clk_32k_rtc>、<&clk_32768_ck>;
       时钟名称="ext-clk"、"int-clk";
       系统功率控制器;
       状态="正常";
    };

    我建议您尝试提供内部32K 时钟。 有关 RTC 32K 外部/内部时钟方案的更多详细信息、请参阅 AM437x 文档(DM 和 TRM)。

    此致、
    帕维尔