You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
hwclock не работает со встроенным RTC на HI3516cv300 #191
root@openipc-hi3516cv300:/# hwclock
hwclock: can't open '/dev/misc/rtc': No such file or directory
root@openipc-hi3516cv300:/# ln -s /dev/hi_rtc /dev/rtc0
root@openipc-hi3516cv300:/# hwclock
hwclock: RTC_RD_TIME: Operation not permitted
Ядро hi3516cv300 собиралось без RTC class (# CONFIG_RTC_CLASS is not set), поэтому /dev/rtc0 не было вообще.
В device tree RTC был описан как "hisilicon,hi_rtc", а штатный драйвер rtc-hibvt ищет "hisilicon,hi35xx-rtc" и к нему не привязывался.
hi3516cv300_rtc.ko из SDK — это символьное устройство со своими ioctl HI_RTC_*, а не RTC-драйвер Linux. Поэтому симлинк /dev/rtc0 → /dev/hi_rtc давал RTC_RD_TIME: Operation not permitted.
Сам RTC (SPI-мост на 0x12090000) исправен: счётчик идёт.
Что изменено
hi3516cv300: bind rtc-hibvt to the SoC RTC, and judge the time by its counter linux#125 исправляет compatible в device tree. В rtc-hibvt счётчик, сбросившийся при пропадании питания, теперь считается «не установленным», и время 1970 при загрузке не выставляется. Ошибки записи в RTC возвращаются как ошибки. На cv300 драйвер не трогает RTC_CLK_CFG, как и драйвер из SDK.
hibvt_rtc 12090000.rtc: rtc core: registered 12090000.rtc as rtc0
# hwclock -r -u
Tue Oct 20 13:06:28 2026 0.000000 seconds
После тёплой перезагрузки ядро берёт время из RTC.
После отключения питания (без батарейки счётчик сбрасывается) пишет hctosys: unable to read the hardware clock, а не 1970. Время затем восстанавливают fake-hwclock и NTP.
Ограничения
Без батарейки RTC не сохраняет время при отключении питания: это аппаратное ограничение платы. На плате с батарейкой не проверялось.
hi3516ev100 (то же семейство) не включён, потому что не было платы для проверки.
Исправление попадёт в ночную сборку после этих мержей.
Why it failed (English):
The cv300 kernel had no RTC class, so there was no /dev/rtc0.
The device tree named the RTC "hisilicon,hi_rtc", which rtc-hibvt never binds.
The SDK's hi3516cv300_rtc.ko exposes only private HI_RTC_* ioctls, which is why pointing /dev/rtc0 at it gave EPERM.
Activity
hi3516cv300: give hwclock the SoC RTC as /dev/rtc0
hi3516cv300: give hwclock the SoC RTC as /dev/rtc0
hi3516cv300: bind rtc-hibvt to the SoC RTC, and judge the time by its…
hi3516cv300: give hwclock the SoC RTC as /dev/rtc0 (#2643)
openipc-ai commentedon Oct 20, 2026
Исправлено в #2643 и OpenIPC/linux#125 / Fixed by #2643 and OpenIPC/linux#125.
Почему
hwclockне работал# CONFIG_RTC_CLASS is not set), поэтому/dev/rtc0не было вообще."hisilicon,hi_rtc", а штатный драйверrtc-hibvtищет"hisilicon,hi35xx-rtc"и к нему не привязывался.hi3516cv300_rtc.koиз SDK — это символьное устройство со своими ioctlHI_RTC_*, а не RTC-драйвер Linux. Поэтому симлинк/dev/rtc0→/dev/hi_rtcдавалRTC_RD_TIME: Operation not permitted.Сам RTC (SPI-мост на 0x12090000) исправен: счётчик идёт.
Что изменено
rtc-hibvtсчётчик, сбросившийся при пропадании питания, теперь считается «не установленным», и время 1970 при загрузке не выставляется. Ошибки записи в RTC возвращаются как ошибки. На cv300 драйвер не трогаетRTC_CLK_CFG, как и драйвер из SDK.rtc-hibvtвhi3516cv300.generic.config.Проверено на hi3516cv300 (imx291, без батарейки):
hctosys: unable to read the hardware clock, а не 1970. Время затем восстанавливаютfake-hwclockи NTP.Ограничения
Why it failed (English):
/dev/rtc0."hisilicon,hi_rtc", whichrtc-hibvtnever binds.hi3516cv300_rtc.koexposes only privateHI_RTC_*ioctls, which is why pointing/dev/rtc0at it gave EPERM.What changed:
Tested on a battery-less hi3516cv300:
/dev/rtc0registers andhwclock -rworks.Not covered: