From bc40af0dfd3fec1b7c2bb7ea2053d19e815385bd Mon Sep 17 00:00:00 2001 From: Daniel Banar Date: Tue, 16 Sep 2025 19:05:07 +0200 Subject: [PATCH] added simple fake-hwclock --- general/package/Config.in | 1 + .../package/fake-hwclock-openipc/Config.in | 5 +++ .../fake-hwclock-openipc.mk | 15 ++++++++ .../fake-hwclock-openipc/files/S39fakehwclock | 36 +++++++++++++++++++ .../fake-hwclock-openipc/files/fake-hwclock | 27 ++++++++++++++ 5 files changed, 84 insertions(+) create mode 100644 general/package/fake-hwclock-openipc/Config.in create mode 100644 general/package/fake-hwclock-openipc/fake-hwclock-openipc.mk create mode 100755 general/package/fake-hwclock-openipc/files/S39fakehwclock create mode 100644 general/package/fake-hwclock-openipc/files/fake-hwclock diff --git a/general/package/Config.in b/general/package/Config.in index 5b94002e..459dc870 100644 --- a/general/package/Config.in +++ b/general/package/Config.in @@ -13,6 +13,7 @@ source "$BR2_EXTERNAL_GENERAL_PATH/package/divinus/Config.in" source "$BR2_EXTERNAL_GENERAL_PATH/package/dropbear-openipc/Config.in" source "$BR2_EXTERNAL_GENERAL_PATH/package/exfat-openipc/Config.in" source "$BR2_EXTERNAL_GENERAL_PATH/package/f2fs-tools-openipc/Config.in" +source "$BR2_EXTERNAL_GENERAL_PATH/package/fake-hwclock-openipc/Config.in" source "$BR2_EXTERNAL_GENERAL_PATH/package/fdk-aac-openipc/Config.in" source "$BR2_EXTERNAL_GENERAL_PATH/package/ffmpeg-openipc/Config.in" source "$BR2_EXTERNAL_GENERAL_PATH/package/fullhan-osdrv-fh8852v100/Config.in" diff --git a/general/package/fake-hwclock-openipc/Config.in b/general/package/fake-hwclock-openipc/Config.in new file mode 100644 index 00000000..361d3029 --- /dev/null +++ b/general/package/fake-hwclock-openipc/Config.in @@ -0,0 +1,5 @@ +config BR2_PACKAGE_FAKE_HWCLOCK_OPENIPC + bool "fake-hwclock-openipc" + help + Restores system time from a file on boot, saves the current time, or periodically updates a timestamp file to maintain time on systems without a hardware RTC. + diff --git a/general/package/fake-hwclock-openipc/fake-hwclock-openipc.mk b/general/package/fake-hwclock-openipc/fake-hwclock-openipc.mk new file mode 100644 index 00000000..24748797 --- /dev/null +++ b/general/package/fake-hwclock-openipc/fake-hwclock-openipc.mk @@ -0,0 +1,15 @@ +################################################################################ +# +# fake-hwclock-openipc +# +################################################################################ + +define FAKE_HWCLOCK_OPENIPC_INSTALL_TARGET_CMDS + $(INSTALL) -m 755 -d $(TARGET_DIR)/etc/init.d + $(INSTALL) -m 755 -t $(TARGET_DIR)/etc/init.d $(FAKE_HWCLOCK_OPENIPC_PKGDIR)/files/S39fakehwclock + + $(INSTALL) -m 755 -d $(TARGET_DIR)/usr/bin + $(INSTALL) -m 755 -t $(TARGET_DIR)/usr/bin $(FAKE_HWCLOCK_OPENIPC_PKGDIR)/files/fake-hwclock +endef + +$(eval $(generic-package)) diff --git a/general/package/fake-hwclock-openipc/files/S39fakehwclock b/general/package/fake-hwclock-openipc/files/S39fakehwclock new file mode 100755 index 00000000..3fe9459f --- /dev/null +++ b/general/package/fake-hwclock-openipc/files/S39fakehwclock @@ -0,0 +1,36 @@ +#!/bin/sh + +DAEMON="fake-hwclock" +PIDFILE="/var/run/$DAEMON.pid" +DAEMON_ARGS="5 /etc/fake-hwclock.data" + +case "$1" in + start) + echo -n "Starting $DAEMON: " + fake-hwclock load /etc/fake-hwclock.data + # Save timestamp every 5 seconds + start-stop-daemon -b -m -S -q -p "$PIDFILE" -x "$DAEMON" -- $DAEMON_ARGS + if [ $? -eq 0 ]; then + echo "OK" + else + echo "FAIL" + fi + ;; + + stop) + echo -n "Stopping $DAEMON: " + start-stop-daemon -K -q -p "$PIDFILE" + if [ $? -eq 0 ]; then + rm -f "$PIDFILE" + fake-hwclock save /etc/fake-hwclock.data + echo "OK" + else + echo "FAIL" + fi + ;; + + *) + echo "Usage: $0 {start|stop}" + exit 1 + ;; +esac diff --git a/general/package/fake-hwclock-openipc/files/fake-hwclock b/general/package/fake-hwclock-openipc/files/fake-hwclock new file mode 100644 index 00000000..361c7ada --- /dev/null +++ b/general/package/fake-hwclock-openipc/files/fake-hwclock @@ -0,0 +1,27 @@ +#!/bin/sh + +if [[ $# -lt 2 ]]; then + exit 1 +fi + +MODE="$1" +TIMESTAMP_FILE="$2" + +mkdir -p "$(dirname "$TIMESTAMP_FILE")" + +if [[ "$MODE" == "load" ]]; then + if [[ -f "$TIMESTAMP_FILE" ]]; then + LAST_TS=$(cat "$TIMESTAMP_FILE") + if [[ -n "$LAST_TS" ]]; then + echo "fake-hwclock: Setting time to $(date -d @"$LAST_TS")" + fi + fi +elif [[ "$MODE" == "save" ]]; then + date +%s > "$TIMESTAMP_FILE" +elif [[ "$MODE" =~ ^[0-9]+$ ]]; then + INTERVAL="$MODE" + while true; do + date +%s > "$TIMESTAMP_FILE" + sleep "$INTERVAL" + done +fi