hwclock: support /dev/rtc0 etc
No binary (build failed)
—
(log yok)
| @@ -1286,15 +1286,18 @@ | |
| " -d STRING URL decode STRING" | |
| #define hwclock_trivial_usage \ | |
| - | "[-r|--show] [-s|--hctosys] [-w|--systohc] [-l|--localtime] [-u|--utc]" |
| + | "[-r|--show] [-s|--hctosys] [-w|--systohc]" \ |
| + | " [-l|--localtime] [-u|--utc]" \ |
| + | " [-f FILE]" |
| #define hwclock_full_usage \ | |
| - | "Query and set the hardware clock (RTC)" \ |
| + | "Query and set a hardware clock (RTC)" \ |
| "\n\nOptions:\n" \ | |
| " -r Read hardware clock and print result\n" \ | |
| " -s Set the system time from the hardware clock\n" \ | |
| " -w Set the hardware clock to the current system time\n" \ | |
| " -u The hardware clock is kept in coordinated universal time\n" \ | |
| - | " -l The hardware clock is kept in local time" |
| + | " -l The hardware clock is kept in local time\n" \ |
| + | " -f FILE Use the specified clock (e.g. /dev/rtc2)" |
| #define id_trivial_usage \ | |
| "[OPTIONS]... [USERNAME]" | |
| @@ -35,16 +35,22 @@ struct linux_rtc_time { | |
| # endif | |
| #endif | |
| + | static const char *rtcname; |
| + | |
| static int xopen_rtc(int flags) | |
| { | |
| int rtc; | |
| - | rtc = open("/dev/rtc", flags); |
| - | if (rtc < 0) { |
| - | rtc = open("/dev/misc/rtc", flags); |
| - | if (rtc < 0) |
| - | bb_perror_msg_and_die("cannot access RTC"); |
| + | |
| + | if (!rtcname) { |
| + | rtc = open("/dev/rtc", flags); |
| + | if (rtc >= 0) |
| + | return rtc; |
| + | rtc = open("/dev/rtc0", flags); |
| + | if (rtc >= 0) |
| + | return rtc; |
| + | rtcname = "/dev/misc/rtc"; |
| } | |
| - | return rtc; |
| + | return xopen(rtcname, flags); |
| } | |
| static time_t read_rtc(int utc) | |
| @@ -175,6 +181,7 @@ static int check_utc(void) | |
| #define HWCLOCK_OPT_SHOW 0x04 | |
| #define HWCLOCK_OPT_HCTOSYS 0x08 | |
| #define HWCLOCK_OPT_SYSTOHC 0x10 | |
| + | #define HWCLOCK_OPT_RTCFILE 0x20 |
| int hwclock_main(int argc, char **argv ); | |
| int hwclock_main(int argc, char **argv ) | |
| @@ -189,12 +196,13 @@ int hwclock_main(int argc, char **argv ) | |
| { "show", 0, 0, 'r' }, | |
| { "hctosys", 0, 0, 's' }, | |
| { "systohc", 0, 0, 'w' }, | |
| + | { "file", 1, 0, 'f' }, |
| { 0, 0, 0, 0 } | |
| }; | |
| applet_long_options = hwclock_long_options; | |
| #endif | |
| opt_complementary = "?:r--ws:w--rs:s--wr:l--u:u--l"; | |
| - | opt = getopt32(argc, argv, "lursw"); |
| + | opt = getopt32(argc, argv, "lurswf:", &rtcname); |
| /* If -u or -l wasn't given check if we are using utc */ | |
| if (opt & (HWCLOCK_OPT_UTC | HWCLOCK_OPT_LOCALTIME)) | |