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/BEAGLEBK:加电时覆盖外部 RTC

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/670106/linux-beaglebk-external-rtc-overwritten-on-power-up

器件型号:BEAGLEBK

工具/软件:Linux

您好、Pavel、

BeagleBone Black 与 TI Linux 4.9.41 RT 配合使用。

 我们开发板上作为 RTC1连接的外部 MCP79410在加电时被覆盖。 我已经尝试过3个 BBB 和3个具有 SD 卡的开发板、问题相同。

root@AM335x-EVM:~# dmesg | grep RTC

[1.462824]  hctosys:无法打开 RTC 设备(rtc0)

[6.091636]  RTC rtc0:44e3e000。RTC:dev (253:0)

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

[6.776695]  链接到:RTC_ds1307 (+) EDT_ft5x06 (+) spidev (+) RTC_OMAP musb_AM335x ti_AM335x_tscadc OMA_WDT sch_FQ_codel uio_module_drv (O) uio cryptodev (O)中的模块

[6.937900]  RTC-ds1307 2-006F:读取:B5 08 16 2c 07 03 18

[6.937913]  RTC-ds1307 2-006F:读取 secs=35、mins=8、hours=16、mDay =7、mon=2、 yage=118、wday =3   ##当前日期和时间##

[6.938273]  RTC-ds1307 2-006F:读取:B5 08 16 2c 07 03 18

[6.938283]  RTC-ds1307 2-006F:读取 secs=35、mins=8、hours=16、mDay =7、mon=2、 yage=118、wday =3

[6.938571]  RTC RTC1:mcp7941x:dev (253:1)

[6.938580]  RTC-ds1307 2-006F:RTC 内核:将 mcp7941x 注册为 RTC1

[6.938600]  RTC-ds1307 2-006F:64字节 NVRAM

[10.482313] PM:引导加载程序不支持仅 RTC!

[10.482622] 链接模块:pm33xx wkup_m3_IPC wkup_m3_rproc remoteppvrsrvkm (O) omap_ae_driver omap_sham prus_soc_bus crypto_engineti_emif_emph_ds1307 edt_ft5x06 amps dev+) rtc_mosf_cru_c_v3_odr (u_t_mcus_tud_adt_mu_v3_tudc (u_v3_amtudc)

[19.094109] RTC-ds1307 2-006F:写入 secs=41、mins=6、hour=15、mDay =5、mon=2、 yage=118、wday =1  ##旧日期重新输入###

[19.094130] RTC-ds1307 2-006F:写入:C1 06 15 0A 05 03 18

[19.095405] RTC-ds1307 2-006F:读取:C1 06 15 2a 05 03 18

[19.095421] RTC-ds1307 2-006F:读取 secs=41、mins=6、hour=15、mDay =5、mon=2、 yage=118、wday =1

无需拔下电源。 要进行复制、按住断电按钮8秒钟。 然后再次按下断电按钮、启动至 SD 卡。 回写日期是 SD 卡创建的日期。

RTC 作为微芯片数据表由电池供电。 我可以使用 i2cget 和 i2cset 命令检查 RTC、并验证晶体是否正在运行。

附加的完整 dmesg。

期待收到您的来信。

此致

Naseere2e.ti.com/.../6076.dmesg.txt

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

    我怀疑此默认值是在 MCP79410 RTC 驱动程序中设置的。 您应该调试该驱动程序以查找该值的确切位置。

    linux-4.9.41/drivers/rtc/rtc-ds1307.c

    您也可以咨询您的 RTC 芯片供应商支持团队。

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我不知道如何调试 RTC-ds1307.c 我已经浏览过代码、我认为问题不在那里。 READ_TIME 和设置时间从另一个做出决定的文件中调用。
    我看不到微芯片在这方面提供了帮助、时钟正在工作、编程和运行。

    从 dmseg 中、我可以推断出的是
    rtc0上的 htosys 失败-->我不对 rtc0进行编程
    模块初始化 RTC_ds1307
    (笑声)
    mcp79410注册为 RTC1 --> hctosys 在 RTC1上是否起作用?
    (笑声)
    模块初始化 RTC_ds1307 -->是否再次初始化模块? 这不是对的?

    此致

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

    [引用 USER="Naseer Nazar"]采用 TI Linux 4.9.41 RT.[/quot]的 BeagleBone Black

    根据我的理解、您正在使用 ti-processor-sdk-linux-rt-am335x-evm-04.01.00.06 PSDK。 但请注意、BeagleBone Black 开发板不支持 Linux-RT SDK:

    请尝试使用 ti-processor-sdk-linux-am335x-evm-04.01.00.06是否会重现此问题

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel、
    www.ti.com/.../beaglebk 列出了 Linux-RT 版本。 Yordan Kovachev 还建议解决我在 BeagleBone Black 方面遇到的一些 ioctl 延迟问题。 e2e.ti.com/.../519311 返回版本2.00.02.11。

    我们能否进一步澄清一下。

    此致

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

    我将与 Linux 团队一起检查并返回给您。 同时、您可以尝试重现 ti-processor-sdk-linux-am335x-evm-04.01.00.06的问题。

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

    您好、Pavel、
    最后、我选择了最新的 SDK 04.02.00.09。 更新了 DTB 并设置了 tisdk_AM335x-EVM-RT-defconfig
    CONFIG_RTC_HCTSYS_DEVICE_="RTC1"
    CONFIG_RTC_SYSTOHC_DEVICE_="RTC1"

    从 sdcard 和 RTC dmesg 引导会报告当前时间

    root@AM335x-EVM:~# dmesg | grep RTC
    [1.608076] hctosys:无法打开 RTC 器件(RTC1)
    [13.362092] RTC rtc0:44e3e000。RTC:dev (253:0)
    [13.362114] OMAP_RTC 44e3e000.RTC:RTC 内核:将44e3e000.RTC 注册为 rtc0
    [ 13.966215]链接模块:RTC_ds1307 (+) EDT_ft5x06 (+) spidev (+) RTC_OMAP musb_AM335x ti_AM335x_tscadc OMA_WDT sch_FQ_codel uio_module_drv (O) uio cryptodev (O)
    [14.162720] RTC-ds1307 2-006F:读取:D8 56 11 3c 14 03 18
    [14.16274] RTC-ds1307 2-006F:读取 secs=58、mins=56、hour=11、mDay =14、mon=2、 yage=118、wday =3 =>当前时间
    [14.163087] RTC-ds1307 2-006F:读取:D8 56 11 3c 14 03 18
    [14.163098] RTC-ds1307 2-006F:读取 secs=58、mins=56、hours=11、mDay =14、mon=2、 yage=118、wday =3
    [14.16339] RTC RTC1:mcp7941x:dev (253:1)
    [14.163411] RTC-ds1307 2-006F:RTC 内核:将 mcp7941x 注册为 RTC1
    [14.163430] RTC-ds1307 2-006F:64字节 NVRAM
    [14.825904]链接模块:omap_AES_driver (+) crypto_engine omap_sham ti_EMIF_SRAM pruss_bus rtc_ds1307 EDT_ft5x06 spiddev (+) rtc_omap_musb_am335x ti_am335x_tscadc omap_wdtx_Fq_codr (cruio)模块
    [19.393336] PM:引导加载程序不支持仅 RTC!

    但是系统日期未更新、显示旧日期

    root@AM335x-EVM:~# hwclock -r -f /dev/rtc1;日期
    周三2018年3月14日11:58:47秒0.000000秒
    SAT 2017年12月23日13:47:55 UTC

    因此更改为 RTC1 /etc/udev/rules.d/localextra.rules

    #第一个 RTC 器件与/dev/rtc 对称链接
    内核="RTC1"、SYMLINK+="RTC"

    重新启动

    返回到相同的问题、当前时间用旧时间覆盖

    root@AM335x-EVM:~# dmesg | grep RTC
    [1.608131] hctosys:无法打开 RTC 器件(RTC1)
    [6.0546770] OMAP_RTC 44e3e000.RTC:已在运行
    [6.086588] RTC rtc0:44e3e000。RTC:dev (253:0)
    [6.086610] OMAP_RTC 44e3e000.RTC:RTC 内核:将44e3e000.RTC 注册为 rtc0
    [6.750909] RTC-ds1307 2-006F:读取:96 06 12 3c 14 03 18
    [6.750923] RTC-ds1307 2-006F:读取 secs=16、mins=6、hours=12、mDay =14、mon=2、 yage=118、wday =3 =>当前读取时间
    [6.751277] RTC-ds1307 2-006F:读取:96 06 12 3c 14 03 18
    [6.751287] RTC-ds1307 2-006F:读取 secs=16、mins=6、hours=12、mDay =14、mon=2、 yage=118、wday =3
    [6.751628] RTC RTC1:mcp7941x:dev (253:1)
    [6.751650] RTC-ds1307 2-006F:RTC 内核:将 mcp7941x 注册为 RTC1
    [6.751670] RTC-ds1307 2-006F:64字节 NVRAM
    [6.856153]链接到:spidev (+) RTC_ds1307 EDT_ft5x06 RTC_OMAP OMAP_WDT ti_AM335x_tscadc musb_AM335x ssch_FQ_codel uio_module_drv (O) uio cryptodev (O)中的模块
    [9.060818] PM:引导加载程序不支持仅 RTC!
    [12.089673]链接模块:pm33xx wkup_m3_IPC 蓝牙 wkup_m3_rproc remotepcrsrvkm (O) omap_AES_driver pruss_soc_bus crypto_engine omap_sham ti_emif_sram spiDEV_rtc_rtc_rts1307_EDT_06trtc rtc rtc rtc rtc (OMA_t_am35x_tu_v6_tu_v6_tu_v6_codec_am335r)
    [21.702344] RTC-ds1307 2-006F:写入 secs=13、mins=46、hours=13、mDay =23、mon=11、 yage=117、wday =6 === >旧时间写入
    [21.70235] RTC-ds1307 2-006F:写入:93 46 13 0f 23 12 17
    [21.707461] RTC-ds1307 2-006F:读取:93 46 13 2f 23 12 17
    [21.707483] RTC-ds1307 2-006F:读取 secs=13、mins=46、hours=13、mDay =23、mon=11、 yage=117、wday =6
    root@AM335x-EVM:~# date;hwclock -r -f /dev/rtc1
    SAT 2017年12月23日13:47:26 UTC
    SAT 2017年12月23日13:47:26 0.000000秒

    dmesg 第一行建议问题的位置是"hctosys:Unable to open RTC device (RTC1)"。 RTC1尚未注册。 在注册 rtc0和 RTC1后、需要发生 htosys。

    我是否错过了步骤?

    此致
    Naseer

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

    [引用 user="NaserNazar"]www.ti.com/.../beaglebk 列出了 Linux-RT 版本。 Yordan Kovachev 还建议解决我在 BeagleBone Black 方面遇到的一些 ioctl 延迟问题。 e2e.ti.com/.../519311 返回版本2.00.02.11。

    我们能否进一步澄清一下。
    [/报价]

    我使用最新的 ti-processor-sdk-linux-rt-am335x-evm-04.02.00.09 (4.9.59-rt23)检查了 BBB、它启动正常。 我怀疑 Linux-RT 未在 BBB 上完全验证、而是仅在 AM335x EVM 和 AM335x ICE 板上验证、这就是为什么我在上一篇文章中提供的维基网页中缺失的原因。 查看以下有关 AM335x EVM 上的 Linux-RT 验证的 wiki:

    由于您能够重现非 RT Linux SDK 的问题、因此该问题并非特定于 Linux-RT。 有关 Linux-RT 的更多信息、请参阅以下演示:

    我将进一步调查 RTC 覆盖问题并返回给您。

    此致、
    帕维尔

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

    [引用 user="Naser Nazar"> dmesg 第一行建议问题是"hctosys:无法打开 RTC 器件(RTC1)"。 RTC1尚未注册。 [/报价]

    此错误来自以下文件:

    linux-kernel/drivers/rtc/hctosys.c

    有关如何修复该错误的信息、请参阅以下 e2e 线程。

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Pavel、
    成功地提取了所有这些信息。 解决此问题的关键是使外部 RTC 作为 rtc0、RTC OMAP 作为 RTC1。 因此在 tisdk_AM335x-EVM-RT-defconfig 中
    CONFIG_RTC_DRV_DS1307=y
    CONFIG_RTC_DRV_OMAP=m

    menuconfig ->设备驱动程序->实时时钟
    <*>Dallas/Maxim DS1307/37....

    这改变了 RTC 注册的顺序。 其余配置文件与 localextra.rules 一起被重新引用到 rtc0
    最后、我不需要 RTC OMAP、因此将其注释掉并仅报告给 rtc0。
    为此所做的更改在 tisdk_AM335x-EVM-RT-defconfig 中如下

    CONFIG_RTC_HCTSYS_DEVICE_="rtc0"
    CONFIG_RTC_SYSTOHC_DEVICE_="rtc0"
    CONFIG_RTC_DRV_DS1307=y
    # CONFIG_RTC_DRV_OMAP=m

    menuconfig ->设备驱动程序->实时时钟
    (rtc0) RTC、用于设置系统时间
    (rtc0) RTC 用于同步 NTP 调整
    <*>Dallas/Maxim DS1307/37....

    /etc/udev/rules.d/localextra.rules
    kernel="rtc0"、SYMLINK+="rtc"

    引导时使用 dmesg
    root@AM335x-EVM:~# dmesg | grep RTC
    [1.488379] RTC-ds1307 2-006F:读取:A3 34 13 3D 15 03 18
    [1.488392] RTC-ds1307 2-006F:读取 secs=23、mins=34、hours=13、mDay =15、mon=2、 yage=118、wday =4
    [1.488731] RTC-ds1307 2-006F:读取:A3 34 13 3D 15 03 18
    [1.488740] RTC-ds1307 2-006F:读取 secs=23、mins=34、hours=13、mDay =15、mon=2、 yage=118、wday =4
    [1.489023] RTC rtc0:mcp7941x:dev (253:0)
    [1.489050] RTC-ds1307 2-006F:RTC 内核:将 mcp7941x 注册为 rtc0
    [1.495448] RTC-ds1307 2-006F:64字节 NVRAM
    [1.506504] RTC-ds1307 2-006F:读取:A3 34 13 3D 15 03 18
    [1.506518] RTC-ds1307 2-006F:读取 secs=23、mins=34、hours=13、mDay =15、mon=2、 yage=118、wday =4
    [1.506551] RTC-ds1307 2-006F:将系统时钟设置为2018-03-15 13:34:23 UTC (1521120863)
    [17.693169] RTC-ds1307 2-006F:写入秒=39、分钟=34、小时=13、mDay =15、mon =2、 yage=118、wday =4
    [17.693190] RTC-ds1307 2-006F:写入:B9 34 13 0d 15 03 18
    [17.697076] RTC-ds1307 2-006F:读取:B9 34 13 2D 15 03 18
    [17.697098] RTC-ds1307 2-006F:读取 secs=39、mins=34、hours=13、mDay =15、mon=2、 yage=118、wday =4
    [35.563879] RTC-ds1307 2-006F:写入 secs=58、mins=34、hours=13、mDay =15、mon=2、 yage=118、wday =4
    [35.563899] RTC-ds1307 2-006F:写入:D8 34 13 0d 15 03 18
    [35.564521] RTC-ds1307 2-006F:读取:D8 34 13 2D 15 03 18
    [35.564533] RTC-ds1307 2-006F:读取 secs=58、mins=34、hours=13、mDay =15、mon=2、 yage=118、wday =4

    认为此问题已解决

    感谢您的支持

    此致

    Naseer Nazar