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.

[参考译文] SK-AM62A-LP:SDK-10.01日期重置为 Linux epoch、没有 RTC 或访问 NTP 服务器

Guru**** 2463330 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1473416/sk-am62a-lp-sdk-10-01-date-resets-to-linux-epoch-without-rtc-or-access-to-ntp-server

器件型号:SK-AM62A-LP

工具与软件:

尊敬的 Linux 专家:

我已经注意到、SDK 版本10.01中的日期功能与9.0或9.1中的工作方式不同。 我的开发板通常未连接到 NTP 服务器、这也是我的产品的用例。 经过一些研究,它似乎最有可能与 Busybox hwclock 应用功能有关。

root@am62axx-evm:~# date
1月1日(周四) 00:10:39 UTC 1970年

root@am62axx-evm:~# hwclock
1970年01月01日00:10:37.404647+00:00

如果我将开发板连接到 NTP 服务器、它将使用"日期"命令以正确的日期进行更新。

root@am62axx-evm:~# date
UTC 2025年2月12日、星期三、00:13:06

如果我更新 hwclock、它会更新/etc/adjtime 上的时间文件:

root@am62axx-evm:~# hwclock -w
root@am62axx-EVM:~# cat /etc/adjtime
0.000000 1739319206 0.000000
1739319206
UTC

但重新启动后,日期将重置为1970年1月1日和时间在"/etc/adjtime "。

请注意、我已经注意到、使用此 Linux epoch 日期也会导致"/opt/edgeai-gst-apps/scripts/install_gst_plugins.sh "出错。

是否有办法让这项工作像以前的 SDK 一样、在这些 SDK 中、它至少会保留启动之间中断的时间(假设通过读取/写入本地文件)、并且没有 NTP 服务器访问或 RTC?

谢谢!

Steve T

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

    Steve、您好!

    我们将研究此问题、并尽快回复您。

    此致、

    建中

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

    到目前为止有什么想法吗? 在测试之后,它似乎也是 timedectl 也可能在这里玩.

    谢谢!

    Steve T

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

    Steve、您好!

    当我在 SK-AM62A 上运行标准 TI SDK v10.1映像时、我看不到您所描述的内容。 系统在重新启动之间保持"单调时间"、无法访问 NTP 服务器。

    您是否看到 TI SDK 映像和 SK-AM62A 板上存在问题? 或者您是否自定义了系统?

    需要检查几个方面。 该机制的工作方式是通过`systemd-timesyncd`,它应该运行如下:

    root@am62axx-evm:/opt/edgeai-gst-apps# systemctl status systemd-timesyncd
    * systemd-timesyncd.service - Network Time Synchronization
         Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; preset: enabled)
         Active: active (running) since Sat 2024-10-19 17:58:46 UTC; 3min 12s ago
           Docs: man:systemd-timesyncd.service(8)
       Main PID: 169 (systemd-timesyn)
         Status: "Idle."
          Tasks: 2 (limit: 3289)
         Memory: 1.6M (peak: 2.1M)
            CPU: 279ms
         CGroup: /system.slice/systemd-timesyncd.service
                 `-169 /usr/lib/systemd/systemd-timesyncd
    
    Oct 09 15:18:14 am62axx-evm systemd[1]: Starting Network Time Synchronization...
    Oct 19 17:58:46 am62axx-evm systemd-timesyncd[169]: System clock time unset or jumped backwards, restored from recorded timestamp: Sat 2024-10-19 17:58:46 UTC
    Oct 19 17:58:46 am62axx-evm systemd-timesyncd[169]: /etc/systemd/timesyncd.conf:14: Assignment outside of section. Ignoring.
    Oct 19 17:58:46 am62axx-evm systemd[1]: Started Network Time Synchronization.
    Oct 19 17:58:52 am62axx-evm systemd-timesyncd[169]: Network configuration changed, trying to establish connection.
    Oct 19 17:58:52 am62axx-evm systemd-timesyncd[169]: Network configuration changed, trying to establish connection.
    

    您可以看到重新启动后的时间将根据日志消息"Restored from recorded timestamp..."(从记录的时间戳中恢复)恢复。

    这是为了保持时间而被更新的实际文件(`touch`)。。。

    oot@am62axx-evm:/opt/edgeai-gst-apps# ls -al /var/lib/systemd/timesync/clock
    -rw-r--r-- 1 systemd-timesync systemd-timesync 0 Oct 19 18:02 /var/lib/systemd/timesync/clock

    时间存储的间隔可通过`/etc/systemd/timesyncd.conf`(通过`SaveIntervalSec=`、请参阅`man timesyncd.conf)控制、默认为60s。 当系统运行时、您可以看到时间戳文件每分钟都会更新一次。、

    这里也有一些很好的相关讨论: https://ubuntu.com/server/docs/use-timedatectl-and-timesyncd

    此致、Andreas

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

    尊敬的 Andreas:

    感谢您的回答并调查了本问题。 我看到 SK-AM62A 板上的 TI SDK v10.1映像以及自定义映像构建的结果相同(最近一次是昨晚)。 以下是我在 TI SDK v10.1将 WIC 映像用于 SD 卡的结果:

    TI SDK v10.1
    root@am62axx-evm:/opt/edgeai-gst-apps# systemctl status systemd-timesyncd
    * systemd-timesyncd.service - Network Time Synchronization
         Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; preset: enabled)
         Active: active (running) since Wed 2024-10-09 15:18:15 UTC; 54 years 9 months left
           Docs: man:systemd-timesyncd.service(8)
       Main PID: 175 (systemd-timesyn)
         Status: "Idle."
          Tasks: 2 (limit: 3289)
         Memory: 1.6M (peak: 2.1M)
            CPU: 224ms
         CGroup: /system.slice/systemd-timesyncd.service
                 `-175 /usr/lib/systemd/systemd-timesyncd
    
    Oct 09 15:18:14 am62axx-evm systemd[1]: Starting Network Time Synchronization...
    Oct 09 15:18:15 am62axx-evm systemd-timesyncd[175]: /etc/systemd/timesyncd.conf:14: Assignment outside of section. Ignoring.
    Oct 09 15:18:15 am62axx-evm systemd[1]: Started Network Time Synchronization.
    Jan 01 00:00:21 am62axx-evm systemd-timesyncd[175]: Network configuration changed, trying to establish connection.
    Jan 01 00:00:22 am62axx-evm systemd-timesyncd[175]: Network configuration changed, trying to establish connection.
    Jan 01 00:00:22 am62axx-evm systemd-timesyncd[175]: Network configuration changed, trying to establish connection.
    Jan 01 00:00:22 am62axx-evm systemd-timesyncd[175]: Network configuration changed, trying to establish connection.
    
    root@am62axx-evm:/opt/edgeai-gst-apps# date
    Thu Jan  1 00:01:05 UTC 1970
    
    root@am62axx-evm:/opt/edgeai-gst-apps# dmesg | grep recorded
    root@am62axx-evm:/opt/edgeai-gst-apps# dmesg | grep timestamp
    [    0.854875] workingset: timestamp_bits=46 max_order=20 bucket_order=0
    
    root@am62axx-evm:/opt/edgeai-gst-apps# ls -al /var/lib/systemd/timesync/clock
    -rw-r--r-- 1 systemd-timesync systemd-timesync 0 Jan  1 00:01 /var/lib/systemd/timesync/clock
    root@am62axx-evm:/opt/edgeai-gst-apps# ls -al /var/lib/systemd/timesync/clock
    -rw-r--r-- 1 systemd-timesync systemd-timesync 0 Jan  1 00:15 /var/lib/systemd/timesync/clock
    root@am62axx-evm:/opt/edgeai-gst-apps# ls -al /var/lib/systemd/timesync/clock
    -rw-r--r-- 1 systemd-timesync systemd-timesync 0 Jan  1 00:20 /var/lib/systemd/timesync/clock
    
    
    root@am62axx-evm:/opt/edgeai-gst-apps# cat /etc/systemd/timesyncd.conf
    #  This file is part of systemd.
    #
    #  systemd is free software; you can redistribute it and/or modify it under the
    #  terms of the GNU Lesser General Public License as published by the Free
    #  Software Foundation; either version 2.1 of the License, or (at your option)
    #  any later version.
    #
    # Entries in this file show the compile time defaults. Local configuration
    # should be created by either modifying this file, or by creating "drop-ins" in
    # the timesyncd.conf.d/ subdirectory. The latter is generally recommended.
    # Defaults can be restored by simply deleting this file and all drop-ins.
    #
    # See timesyncd.conf(5) for details.
    
    [Time]
    NTP=0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.org
    FallbackNTP=ntp.ubuntu.com

    我注意到,没有消息关于恢复时间在 dmesg 或服务(但它重新启动时,所以它不会落后)。 运行时间与显示的日期命令不同、这一点看起来确实很有趣。  这是否为您提供了可能发生的事情的任何线索?

    我仍然失败、因为可能会有什么不同、具体在我的设置中会导致这种情况。

    此致、

    Steve T

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

    Steve、您好!

    我仍在丢失,因为什么可能是不同的,并导致这个具体在我的设置。

    这可能需要很长时间、但让我们尝试一下。 我的 SK-AM62A 板已插入网络、但它是本地网络、无法对外覆盖。 也许是网络接口已启动 (认为 NTP)是一种依赖关系? 我无法从我的电路板上拔下网络插头(我今天比较偏远)、但这样是否可以改变您的终端(将您的电路板插入本地网络)

    此致、Andreas

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

    我还刚刚注意到、当它在第一分钟内启动时、我将获得以下结果:

    root@am62axx-evm:/opt/edgeai-gst-apps# ls -al /var/lib/systemd/timesync/clock
    -rw-r--r-- 1 systemd-timesync systemd-timesync 0 Oct  9  2024 /var/lib/systemd/timesync/clock
    root@am62axx-evm:/opt/edgeai-gst-apps# date
    Thu Jan  1 00:01:05 UTC 1970
    root@am62axx-evm:/opt/edgeai-gst-apps# ls -al /var/lib/systemd/timesync/clock
    -rw-r--r-- 1 systemd-timesync systemd-timesync 0 Oct  9  2024 /var/lib/systemd/timesync/clock
    root@am62axx-evm:/opt/edgeai-gst-apps# ls -al /var/lib/systemd/timesync/clock
    -rw-r--r-- 1 systemd-timesync systemd-timesync 0 Jan  1 00:01 /var/lib/systemd/timesync/clock

    所以似乎检查日期不是正确的..

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

    我的网络实际上是本地网络(我的开发 PC 和 SK 板与路由器一起连接到8端口交换机)。 我只是尝试从 SK 板拔下网络电缆、通过串行 UART 发出命令、并获得了与上述相同的结果。

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

    我不知道我是否肯定在这里的东西,但我至少有几个观察.

    1."系统 ctl 重新启动 systemd-timesyncd"后,如果您在启动后的第一~60秒内发出命令,系统会将时间更新为上一次写入的时间。 否则、它将使用看起来像文件系统日期的内容。

    2.从设备树中删除了别名"rtc0 =&wkup_rtc0"和"RTC1 =&tps659312"并将其放在 SK 板上。 我在 dmesg 中看到:

    root@sdk10-01dev:~# dmesg | grep rtc
    [    2.042808] tps6594-rtc tps6594-rtc.4.auto: registered as rtc0
    [    2.048796] tps6594-rtc tps6594-rtc.4.auto: hctosys: unable to read the hardware clock
    [    7.107730] rtc-ti-k3 2b1f0000.rtc: registered as rtc1
    

    现在、时间正在引导时正确更新。

    当使用库存 SDK "k3-am62a7-sk.dtb"时、它会显示:

    root@sdk10-01dev:~# dmesg | grep rtc
    [    2.512974] tps6594-rtc tps6594-rtc.5.auto: registered as rtc1
    [    7.993502] rtc-ti-k3 2b1f0000.rtc: registered as rtc0
    [    8.046948] rtc-ti-k3 2b1f0000.rtc: setting system clock to 1970-01-01T00:00:14 UTC (14)

    我尝试删除了  定制电路板的"rtc0 =&wkup_rtc0"别名(我只为其添加了 rtc0别名)、但我仍然看到:

    root@am62axx-evm:~# dmesg | grep rtc
    [    7.184357] rtc-ti-k3 2b1f0000.rtc: registered as rtc0
    [    7.184409] rtc-ti-k3 2b1f0000.rtc: setting system clock to 1970-01-01T00:00:14 UTC (14)

    时间仍将回到 Linux epoch。 可能有与 RTC-ti-K3驱动器相关的东西导致了此行为吗?

    或者它可能与"k3-am62a-wakup.dtsi"器件树文件中的"wkup_rtc0"节点有关?

    此致、

    Steve T.

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

    我不知道我是否肯定在这里的东西,但我至少有几个观察.

    1."系统 ctl 重新启动 systemd-timesyncd"后,如果您在启动后的第一~60秒内发出命令,系统会将时间更新为上一次写入的时间。 否则、它将使用看起来像文件系统日期的内容。

    2.从设备树中删除了别名"rtc0 =&wkup_rtc0"和"RTC1 =&tps659312"并将其放在 SK 板上。 我在 dmesg 中看到:

    root@sdk10-01dev:~# dmesg | grep rtc
    [    2.042808] tps6594-rtc tps6594-rtc.4.auto: registered as rtc0
    [    2.048796] tps6594-rtc tps6594-rtc.4.auto: hctosys: unable to read the hardware clock
    [    7.107730] rtc-ti-k3 2b1f0000.rtc: registered as rtc1
    

    现在、时间正在引导时正确更新。

    当使用库存 SDK "k3-am62a7-sk.dtb"时、它会显示:

    root@sdk10-01dev:~# dmesg | grep rtc
    [    2.512974] tps6594-rtc tps6594-rtc.5.auto: registered as rtc1
    [    7.993502] rtc-ti-k3 2b1f0000.rtc: registered as rtc0
    [    8.046948] rtc-ti-k3 2b1f0000.rtc: setting system clock to 1970-01-01T00:00:14 UTC (14)

    我尝试删除了  定制电路板的"rtc0 =&wkup_rtc0"别名(我只为其添加了 rtc0别名)、但我仍然看到:

    root@am62axx-evm:~# dmesg | grep rtc
    [    7.184357] rtc-ti-k3 2b1f0000.rtc: registered as rtc0
    [    7.184409] rtc-ti-k3 2b1f0000.rtc: setting system clock to 1970-01-01T00:00:14 UTC (14)

    时间仍将回到 Linux epoch。 可能有与 RTC-ti-K3驱动器相关的东西导致了此行为吗?

    或者它可能与"k3-am62a-wakup.dtsi"器件树文件中的"wkup_rtc0"节点有关?

    此致、

    Steve T.

    最新动态:

    我发现在设备树中添加"/delete-node/&wkup_rtc0"(当然也会删除相关的别名)会使自定义电路板的系统上电时正确恢复日期(即未复位为 EPOCH)。 我不确定这样做会有什么影响、但日期和时间至少保持最新。 我的定制电路板永远不会进入睡眠/低功耗模式。

    能否提供您关于此器件树更改的专业知识?

    谢谢!

    Steve T

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

    Steve、您好!

    谢谢你从你这边驱动这个、我刚刚再次深入我的设置、并且意识到我的`RTC_ti_K3`内核驱动程序(模块)未被载入、这是因为我的 AM62A SDK SD 卡映像中的内核在`/lib/modules`下没有可用的正确模块、这是我在板上进行的前一内核调试工作的左边赝像。 UTC-刷写 从 TI.com 下载的原始 SD 卡映像我现在可以在消息日志中看到与相关的相同提示(`rtc-ti-k3 2b1f0000.rtc:将系统时钟设置为1970-01-01T00:00:14 Re (14)`)。 这就解释了为什么我的系统保持了这么好的时间、因为硬件 RTC 驱动程序永远不会有机会覆盖时间、并且只使用了基于`/var/lib/systemd/timesync/clock`的机制。 所以这个神秘的部分被解决了。

    我发现在设备树中添加"/delete-node/&wkup_rtc0"(当然、还删除了相关的别名)会使自定义板的系统上电时正确恢复日期(即未重置为 epoch)。 我不确定这样做会有什么影响、但日期和时间至少保持最新。 我的定制电路板永远不会进入睡眠/低功耗模式。

    是的、如果您不想使用硬件 RTC (并且/或者不接受其对开发板造成的副作用)、可以采取以下任一措施:

    1. 通过设备树禁用硬件 RTC
    2. 禁用内核驱动程序(DISABLE `CONFIG_RTC_DRV_TI_K3`)
    3. Re-配置 systemd 计时机制

    选项1是我可能会使用的选项之一、因为如果需要、很容易查看/理解/撤销。 但删除整个设备树节点通常需要将如下内容添加到板级设备树文件中:

    // Disable HW RTC to only use SW-based system timekeeping
    &wkup_rtc0 {
        status = "disabled";
    };

    此致、Andreas

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

    尊敬的 Andreas:

    啊、很高兴听到这不仅仅是我的系统/设置。 这似乎方案1对我来说也是最好的。 我 没有发现 wkup_rtc0节点有一个状态参数、因此我将其删除、但我将尝试对设备树进行解编译以进行检查、因为它可能只是没有添加到"k3-am62a-wakeup.dtsi"中。

    所以 禁用 RTC 没有其他副作用? 它不会影响看门狗、系统日志记录等。

    此处是否可以使用 RTC-ti-K3补丁?

    谢谢!

    Steve

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Ah,很高兴听到这不仅仅是我的系统/设置。 这似乎方案1对我来说也是最好的。 我 没有发现 wkup_rtc0节点有一个状态参数、因此我将其删除、但我将尝试对设备树进行解编译以进行检查、因为它可能只是没有添加到"k3-am62a-wakeup.dtsi"中。

    如果`status`属性行不存在隐式`status ="确定"`被假定。 这是常规的设备树语法/用法、因此除非明确禁用、否则通常会省略(例如、对于稍后在板级文件级别重新启用的功能等)。

    [报价 userid="495347" url="~/support/processors-group/processors/f/processors-forum/1473416/sk-am62a-lp-sdk-10-01-date-resets-to-linux-epoch-without-rtc-or-access-to-ntp-server/5671140 #56711540"] 禁用 RTC 没有其他副作用? 它不会影响看门狗、系统日志记录等?

    我想不出这里有任何负面影响。 看门狗是 CPU 集群的一部分、因此完全不同。

    这里是否有 RTC-ti-K3的补丁?

    这是一个很好的问题、我们应该审查/了解为什么硬件 RTC 似乎没有保留重新启动之间的时间、看看可以/应该做什么(如果有)。 我还没有深入研究这方面来了解这是硬件还是软件问题、需要花些时间深入研究一下。

    此致、Andreas