Embedded Linux: setting the time without NTP
Clash Royale CLAN TAG#URR8PPP
Working on a embedded Linux device built using yocto that is pulling a date via uart from another device with a satellite connection. By the time we have access to this date, we are well into a fully initialized multi-threaded application as well as various daemons running etc.
From what I have read, using stime() or settimeofday() can result in breaking anything relying on timers. I'm guessing that something like std::this_thread::sleep_for() would be included in this?
Is there a safe way to set the system time at this point or how do most embedded Linux devices that do not have internet access navigate this problem?
Edit: We do have an RTC but the implementation of hwclock we are using does not allow us to directly write to it, at least through the hwclock api. Here is the --help:
BusyBox v1.24.1 (2018-11-14 12:40:41 PST) multi-call binary.
Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-t|--systz] [-l|--localtime] [-u|--utc] [-f|--rtc FILE]
And the link to the hwclock source.
date embedded
|
show 5 more comments
Working on a embedded Linux device built using yocto that is pulling a date via uart from another device with a satellite connection. By the time we have access to this date, we are well into a fully initialized multi-threaded application as well as various daemons running etc.
From what I have read, using stime() or settimeofday() can result in breaking anything relying on timers. I'm guessing that something like std::this_thread::sleep_for() would be included in this?
Is there a safe way to set the system time at this point or how do most embedded Linux devices that do not have internet access navigate this problem?
Edit: We do have an RTC but the implementation of hwclock we are using does not allow us to directly write to it, at least through the hwclock api. Here is the --help:
BusyBox v1.24.1 (2018-11-14 12:40:41 PST) multi-call binary.
Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-t|--systz] [-l|--localtime] [-u|--utc] [-f|--rtc FILE]
And the link to the hwclock source.
date embedded
There is the RTC point of view, the system pov, and could even be the application pov....what do is necessary to do, what is needed and what exactly breaks? Could it pay out initializing the applications after getting the time if getting it on time is critical? What time resolution does the app need? And is there an RTC?
– Rui F Ribeiro
Feb 26 at 16:39
1
Can you slow down everything else (i.e. full application waits to start until time is valid)?
– drewbenn
Feb 26 at 16:42
1
I used to have some apps running in an iOT, and they were quite happy even if the time via NTP got later in the game. Granted that after I bought an RTC for that, things were smoother, but it all depends on what you want to do and whether time is critical for the apllicational part.
– Rui F Ribeiro
Feb 26 at 16:45
1
There can be always the possibility of feeding an NTP daemon. As an example: unixwiz.net/techtips/raspberry-pi3-gps-time.html
– Rui F Ribeiro
Feb 26 at 16:59
There is an rtc but our hwclock implementation doesn't have the ability to write directly to it -- only to and from the system time from what I can tell. See my comment below on the usage options for our hwclock.
– jpsalm
Feb 26 at 17:14
|
show 5 more comments
Working on a embedded Linux device built using yocto that is pulling a date via uart from another device with a satellite connection. By the time we have access to this date, we are well into a fully initialized multi-threaded application as well as various daemons running etc.
From what I have read, using stime() or settimeofday() can result in breaking anything relying on timers. I'm guessing that something like std::this_thread::sleep_for() would be included in this?
Is there a safe way to set the system time at this point or how do most embedded Linux devices that do not have internet access navigate this problem?
Edit: We do have an RTC but the implementation of hwclock we are using does not allow us to directly write to it, at least through the hwclock api. Here is the --help:
BusyBox v1.24.1 (2018-11-14 12:40:41 PST) multi-call binary.
Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-t|--systz] [-l|--localtime] [-u|--utc] [-f|--rtc FILE]
And the link to the hwclock source.
date embedded
Working on a embedded Linux device built using yocto that is pulling a date via uart from another device with a satellite connection. By the time we have access to this date, we are well into a fully initialized multi-threaded application as well as various daemons running etc.
From what I have read, using stime() or settimeofday() can result in breaking anything relying on timers. I'm guessing that something like std::this_thread::sleep_for() would be included in this?
Is there a safe way to set the system time at this point or how do most embedded Linux devices that do not have internet access navigate this problem?
Edit: We do have an RTC but the implementation of hwclock we are using does not allow us to directly write to it, at least through the hwclock api. Here is the --help:
BusyBox v1.24.1 (2018-11-14 12:40:41 PST) multi-call binary.
Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-t|--systz] [-l|--localtime] [-u|--utc] [-f|--rtc FILE]
And the link to the hwclock source.
date embedded
date embedded
edited Feb 26 at 17:53
jpsalm
asked Feb 26 at 16:15
jpsalmjpsalm
63
63
There is the RTC point of view, the system pov, and could even be the application pov....what do is necessary to do, what is needed and what exactly breaks? Could it pay out initializing the applications after getting the time if getting it on time is critical? What time resolution does the app need? And is there an RTC?
– Rui F Ribeiro
Feb 26 at 16:39
1
Can you slow down everything else (i.e. full application waits to start until time is valid)?
– drewbenn
Feb 26 at 16:42
1
I used to have some apps running in an iOT, and they were quite happy even if the time via NTP got later in the game. Granted that after I bought an RTC for that, things were smoother, but it all depends on what you want to do and whether time is critical for the apllicational part.
– Rui F Ribeiro
Feb 26 at 16:45
1
There can be always the possibility of feeding an NTP daemon. As an example: unixwiz.net/techtips/raspberry-pi3-gps-time.html
– Rui F Ribeiro
Feb 26 at 16:59
There is an rtc but our hwclock implementation doesn't have the ability to write directly to it -- only to and from the system time from what I can tell. See my comment below on the usage options for our hwclock.
– jpsalm
Feb 26 at 17:14
|
show 5 more comments
There is the RTC point of view, the system pov, and could even be the application pov....what do is necessary to do, what is needed and what exactly breaks? Could it pay out initializing the applications after getting the time if getting it on time is critical? What time resolution does the app need? And is there an RTC?
– Rui F Ribeiro
Feb 26 at 16:39
1
Can you slow down everything else (i.e. full application waits to start until time is valid)?
– drewbenn
Feb 26 at 16:42
1
I used to have some apps running in an iOT, and they were quite happy even if the time via NTP got later in the game. Granted that after I bought an RTC for that, things were smoother, but it all depends on what you want to do and whether time is critical for the apllicational part.
– Rui F Ribeiro
Feb 26 at 16:45
1
There can be always the possibility of feeding an NTP daemon. As an example: unixwiz.net/techtips/raspberry-pi3-gps-time.html
– Rui F Ribeiro
Feb 26 at 16:59
There is an rtc but our hwclock implementation doesn't have the ability to write directly to it -- only to and from the system time from what I can tell. See my comment below on the usage options for our hwclock.
– jpsalm
Feb 26 at 17:14
There is the RTC point of view, the system pov, and could even be the application pov....what do is necessary to do, what is needed and what exactly breaks? Could it pay out initializing the applications after getting the time if getting it on time is critical? What time resolution does the app need? And is there an RTC?
– Rui F Ribeiro
Feb 26 at 16:39
There is the RTC point of view, the system pov, and could even be the application pov....what do is necessary to do, what is needed and what exactly breaks? Could it pay out initializing the applications after getting the time if getting it on time is critical? What time resolution does the app need? And is there an RTC?
– Rui F Ribeiro
Feb 26 at 16:39
1
1
Can you slow down everything else (i.e. full application waits to start until time is valid)?
– drewbenn
Feb 26 at 16:42
Can you slow down everything else (i.e. full application waits to start until time is valid)?
– drewbenn
Feb 26 at 16:42
1
1
I used to have some apps running in an iOT, and they were quite happy even if the time via NTP got later in the game. Granted that after I bought an RTC for that, things were smoother, but it all depends on what you want to do and whether time is critical for the apllicational part.
– Rui F Ribeiro
Feb 26 at 16:45
I used to have some apps running in an iOT, and they were quite happy even if the time via NTP got later in the game. Granted that after I bought an RTC for that, things were smoother, but it all depends on what you want to do and whether time is critical for the apllicational part.
– Rui F Ribeiro
Feb 26 at 16:45
1
1
There can be always the possibility of feeding an NTP daemon. As an example: unixwiz.net/techtips/raspberry-pi3-gps-time.html
– Rui F Ribeiro
Feb 26 at 16:59
There can be always the possibility of feeding an NTP daemon. As an example: unixwiz.net/techtips/raspberry-pi3-gps-time.html
– Rui F Ribeiro
Feb 26 at 16:59
There is an rtc but our hwclock implementation doesn't have the ability to write directly to it -- only to and from the system time from what I can tell. See my comment below on the usage options for our hwclock.
– jpsalm
Feb 26 at 17:14
There is an rtc but our hwclock implementation doesn't have the ability to write directly to it -- only to and from the system time from what I can tell. See my comment below on the usage options for our hwclock.
– jpsalm
Feb 26 at 17:14
|
show 5 more comments
2 Answers
2
active
oldest
votes
You can use hwclock
which should be built into every embedded linux distro.
$hwclock
is - as the command name suggest - a hardware clock, independent of the OS being used. These days it uses a low-power oscillator built into the motherboard, that tracks the passage of time even when the machine is powered down (uses mb battery that will last a long time)
If hwclock
is not available, there are other alternatives which I will gladly go over, but hwclock
should be your goto command if available.
1
hwclock works in normal devices that have RTC - it writes and reads from it. There are iOT devices without an RTC.
– Rui F Ribeiro
Feb 26 at 16:35
I assume you are referring to the Raspberry Pi case, where a fairly advanced embedded device lacks a hardware clock capable of RTC. Raspberry Pi is a example of an outlier, because it tries to offer an enormous range of capabilities at as low of a price as possible, hence they chose to save money by forgoing a built-in battery powering one tiny IC capable of RTC.
– BarBar1234
Feb 26 at 16:44
1
The rpi suffers from it, but it is not alone, unfortunately.
– Rui F Ribeiro
Feb 26 at 16:46
Unfortunately the we are using the BusyBox 1.24.1 hwclock which as far as I can tell can only write to and from the system time. Writing directly to hwclock would be ideal but doesn't seem to be available to me:BusyBox v1.24.1 (2018-11-14 12:40:41 PST) multi-call binary. Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-t|--systz] [-l|--localtime] [-u|--utc] [-f|--rtc FILE]
– jpsalm
Feb 26 at 17:07
Here is the hwclock implementation. I believe the -f option just allows us to point hwclock to a specific rtc.
– jpsalm
Feb 26 at 17:24
add a comment |
My solution was to write directly to the rtc using ioctrl. Here's an implementation for anyone who comes across this:
#include <linux/rtc.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
int main(void)
int fd;
fd = open("/dev/rtc0",0);
if (fd < 0)
printf("Can't open rtc!");
struct rtc_time time;
time.tm_sec = 12;
time.tm_min = 12;
time.tm_hour = 7;
time.tm_mday = 12;
time.tm_mon = 7;
time.tm_year = 118;
if (ioctl(fd, RTC_SET_TIME, &time) < 0 )
printf("Set rtc failed!");
return 0;
Isn't this exactly what the"-w"
option to yourhwclock
does?
– Murray Jensen
Feb 27 at 4:10
The -w option for BusyBox hwclock takes no arguments and simply writes the system clock into the rtc. I needed the ability to load an arbitrary time into hwclock and then load that into the system on the next boot.
– jpsalm
Feb 27 at 5:38
Usually, the"-r"
option is run at boot time, and the"-w"
option is run at shutdown (via init scripts). If your system is set up this way, you could just set the system time and reboot (bit of a sledge-hammer approach, I know - but would do the job)
– Murray Jensen
Feb 27 at 9:21
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f503157%2fembedded-linux-setting-the-time-without-ntp%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use hwclock
which should be built into every embedded linux distro.
$hwclock
is - as the command name suggest - a hardware clock, independent of the OS being used. These days it uses a low-power oscillator built into the motherboard, that tracks the passage of time even when the machine is powered down (uses mb battery that will last a long time)
If hwclock
is not available, there are other alternatives which I will gladly go over, but hwclock
should be your goto command if available.
1
hwclock works in normal devices that have RTC - it writes and reads from it. There are iOT devices without an RTC.
– Rui F Ribeiro
Feb 26 at 16:35
I assume you are referring to the Raspberry Pi case, where a fairly advanced embedded device lacks a hardware clock capable of RTC. Raspberry Pi is a example of an outlier, because it tries to offer an enormous range of capabilities at as low of a price as possible, hence they chose to save money by forgoing a built-in battery powering one tiny IC capable of RTC.
– BarBar1234
Feb 26 at 16:44
1
The rpi suffers from it, but it is not alone, unfortunately.
– Rui F Ribeiro
Feb 26 at 16:46
Unfortunately the we are using the BusyBox 1.24.1 hwclock which as far as I can tell can only write to and from the system time. Writing directly to hwclock would be ideal but doesn't seem to be available to me:BusyBox v1.24.1 (2018-11-14 12:40:41 PST) multi-call binary. Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-t|--systz] [-l|--localtime] [-u|--utc] [-f|--rtc FILE]
– jpsalm
Feb 26 at 17:07
Here is the hwclock implementation. I believe the -f option just allows us to point hwclock to a specific rtc.
– jpsalm
Feb 26 at 17:24
add a comment |
You can use hwclock
which should be built into every embedded linux distro.
$hwclock
is - as the command name suggest - a hardware clock, independent of the OS being used. These days it uses a low-power oscillator built into the motherboard, that tracks the passage of time even when the machine is powered down (uses mb battery that will last a long time)
If hwclock
is not available, there are other alternatives which I will gladly go over, but hwclock
should be your goto command if available.
1
hwclock works in normal devices that have RTC - it writes and reads from it. There are iOT devices without an RTC.
– Rui F Ribeiro
Feb 26 at 16:35
I assume you are referring to the Raspberry Pi case, where a fairly advanced embedded device lacks a hardware clock capable of RTC. Raspberry Pi is a example of an outlier, because it tries to offer an enormous range of capabilities at as low of a price as possible, hence they chose to save money by forgoing a built-in battery powering one tiny IC capable of RTC.
– BarBar1234
Feb 26 at 16:44
1
The rpi suffers from it, but it is not alone, unfortunately.
– Rui F Ribeiro
Feb 26 at 16:46
Unfortunately the we are using the BusyBox 1.24.1 hwclock which as far as I can tell can only write to and from the system time. Writing directly to hwclock would be ideal but doesn't seem to be available to me:BusyBox v1.24.1 (2018-11-14 12:40:41 PST) multi-call binary. Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-t|--systz] [-l|--localtime] [-u|--utc] [-f|--rtc FILE]
– jpsalm
Feb 26 at 17:07
Here is the hwclock implementation. I believe the -f option just allows us to point hwclock to a specific rtc.
– jpsalm
Feb 26 at 17:24
add a comment |
You can use hwclock
which should be built into every embedded linux distro.
$hwclock
is - as the command name suggest - a hardware clock, independent of the OS being used. These days it uses a low-power oscillator built into the motherboard, that tracks the passage of time even when the machine is powered down (uses mb battery that will last a long time)
If hwclock
is not available, there are other alternatives which I will gladly go over, but hwclock
should be your goto command if available.
You can use hwclock
which should be built into every embedded linux distro.
$hwclock
is - as the command name suggest - a hardware clock, independent of the OS being used. These days it uses a low-power oscillator built into the motherboard, that tracks the passage of time even when the machine is powered down (uses mb battery that will last a long time)
If hwclock
is not available, there are other alternatives which I will gladly go over, but hwclock
should be your goto command if available.
edited Feb 26 at 16:39
answered Feb 26 at 16:34
BarBar1234BarBar1234
1495
1495
1
hwclock works in normal devices that have RTC - it writes and reads from it. There are iOT devices without an RTC.
– Rui F Ribeiro
Feb 26 at 16:35
I assume you are referring to the Raspberry Pi case, where a fairly advanced embedded device lacks a hardware clock capable of RTC. Raspberry Pi is a example of an outlier, because it tries to offer an enormous range of capabilities at as low of a price as possible, hence they chose to save money by forgoing a built-in battery powering one tiny IC capable of RTC.
– BarBar1234
Feb 26 at 16:44
1
The rpi suffers from it, but it is not alone, unfortunately.
– Rui F Ribeiro
Feb 26 at 16:46
Unfortunately the we are using the BusyBox 1.24.1 hwclock which as far as I can tell can only write to and from the system time. Writing directly to hwclock would be ideal but doesn't seem to be available to me:BusyBox v1.24.1 (2018-11-14 12:40:41 PST) multi-call binary. Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-t|--systz] [-l|--localtime] [-u|--utc] [-f|--rtc FILE]
– jpsalm
Feb 26 at 17:07
Here is the hwclock implementation. I believe the -f option just allows us to point hwclock to a specific rtc.
– jpsalm
Feb 26 at 17:24
add a comment |
1
hwclock works in normal devices that have RTC - it writes and reads from it. There are iOT devices without an RTC.
– Rui F Ribeiro
Feb 26 at 16:35
I assume you are referring to the Raspberry Pi case, where a fairly advanced embedded device lacks a hardware clock capable of RTC. Raspberry Pi is a example of an outlier, because it tries to offer an enormous range of capabilities at as low of a price as possible, hence they chose to save money by forgoing a built-in battery powering one tiny IC capable of RTC.
– BarBar1234
Feb 26 at 16:44
1
The rpi suffers from it, but it is not alone, unfortunately.
– Rui F Ribeiro
Feb 26 at 16:46
Unfortunately the we are using the BusyBox 1.24.1 hwclock which as far as I can tell can only write to and from the system time. Writing directly to hwclock would be ideal but doesn't seem to be available to me:BusyBox v1.24.1 (2018-11-14 12:40:41 PST) multi-call binary. Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-t|--systz] [-l|--localtime] [-u|--utc] [-f|--rtc FILE]
– jpsalm
Feb 26 at 17:07
Here is the hwclock implementation. I believe the -f option just allows us to point hwclock to a specific rtc.
– jpsalm
Feb 26 at 17:24
1
1
hwclock works in normal devices that have RTC - it writes and reads from it. There are iOT devices without an RTC.
– Rui F Ribeiro
Feb 26 at 16:35
hwclock works in normal devices that have RTC - it writes and reads from it. There are iOT devices without an RTC.
– Rui F Ribeiro
Feb 26 at 16:35
I assume you are referring to the Raspberry Pi case, where a fairly advanced embedded device lacks a hardware clock capable of RTC. Raspberry Pi is a example of an outlier, because it tries to offer an enormous range of capabilities at as low of a price as possible, hence they chose to save money by forgoing a built-in battery powering one tiny IC capable of RTC.
– BarBar1234
Feb 26 at 16:44
I assume you are referring to the Raspberry Pi case, where a fairly advanced embedded device lacks a hardware clock capable of RTC. Raspberry Pi is a example of an outlier, because it tries to offer an enormous range of capabilities at as low of a price as possible, hence they chose to save money by forgoing a built-in battery powering one tiny IC capable of RTC.
– BarBar1234
Feb 26 at 16:44
1
1
The rpi suffers from it, but it is not alone, unfortunately.
– Rui F Ribeiro
Feb 26 at 16:46
The rpi suffers from it, but it is not alone, unfortunately.
– Rui F Ribeiro
Feb 26 at 16:46
Unfortunately the we are using the BusyBox 1.24.1 hwclock which as far as I can tell can only write to and from the system time. Writing directly to hwclock would be ideal but doesn't seem to be available to me:
BusyBox v1.24.1 (2018-11-14 12:40:41 PST) multi-call binary. Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-t|--systz] [-l|--localtime] [-u|--utc] [-f|--rtc FILE]
– jpsalm
Feb 26 at 17:07
Unfortunately the we are using the BusyBox 1.24.1 hwclock which as far as I can tell can only write to and from the system time. Writing directly to hwclock would be ideal but doesn't seem to be available to me:
BusyBox v1.24.1 (2018-11-14 12:40:41 PST) multi-call binary. Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-t|--systz] [-l|--localtime] [-u|--utc] [-f|--rtc FILE]
– jpsalm
Feb 26 at 17:07
Here is the hwclock implementation. I believe the -f option just allows us to point hwclock to a specific rtc.
– jpsalm
Feb 26 at 17:24
Here is the hwclock implementation. I believe the -f option just allows us to point hwclock to a specific rtc.
– jpsalm
Feb 26 at 17:24
add a comment |
My solution was to write directly to the rtc using ioctrl. Here's an implementation for anyone who comes across this:
#include <linux/rtc.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
int main(void)
int fd;
fd = open("/dev/rtc0",0);
if (fd < 0)
printf("Can't open rtc!");
struct rtc_time time;
time.tm_sec = 12;
time.tm_min = 12;
time.tm_hour = 7;
time.tm_mday = 12;
time.tm_mon = 7;
time.tm_year = 118;
if (ioctl(fd, RTC_SET_TIME, &time) < 0 )
printf("Set rtc failed!");
return 0;
Isn't this exactly what the"-w"
option to yourhwclock
does?
– Murray Jensen
Feb 27 at 4:10
The -w option for BusyBox hwclock takes no arguments and simply writes the system clock into the rtc. I needed the ability to load an arbitrary time into hwclock and then load that into the system on the next boot.
– jpsalm
Feb 27 at 5:38
Usually, the"-r"
option is run at boot time, and the"-w"
option is run at shutdown (via init scripts). If your system is set up this way, you could just set the system time and reboot (bit of a sledge-hammer approach, I know - but would do the job)
– Murray Jensen
Feb 27 at 9:21
add a comment |
My solution was to write directly to the rtc using ioctrl. Here's an implementation for anyone who comes across this:
#include <linux/rtc.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
int main(void)
int fd;
fd = open("/dev/rtc0",0);
if (fd < 0)
printf("Can't open rtc!");
struct rtc_time time;
time.tm_sec = 12;
time.tm_min = 12;
time.tm_hour = 7;
time.tm_mday = 12;
time.tm_mon = 7;
time.tm_year = 118;
if (ioctl(fd, RTC_SET_TIME, &time) < 0 )
printf("Set rtc failed!");
return 0;
Isn't this exactly what the"-w"
option to yourhwclock
does?
– Murray Jensen
Feb 27 at 4:10
The -w option for BusyBox hwclock takes no arguments and simply writes the system clock into the rtc. I needed the ability to load an arbitrary time into hwclock and then load that into the system on the next boot.
– jpsalm
Feb 27 at 5:38
Usually, the"-r"
option is run at boot time, and the"-w"
option is run at shutdown (via init scripts). If your system is set up this way, you could just set the system time and reboot (bit of a sledge-hammer approach, I know - but would do the job)
– Murray Jensen
Feb 27 at 9:21
add a comment |
My solution was to write directly to the rtc using ioctrl. Here's an implementation for anyone who comes across this:
#include <linux/rtc.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
int main(void)
int fd;
fd = open("/dev/rtc0",0);
if (fd < 0)
printf("Can't open rtc!");
struct rtc_time time;
time.tm_sec = 12;
time.tm_min = 12;
time.tm_hour = 7;
time.tm_mday = 12;
time.tm_mon = 7;
time.tm_year = 118;
if (ioctl(fd, RTC_SET_TIME, &time) < 0 )
printf("Set rtc failed!");
return 0;
My solution was to write directly to the rtc using ioctrl. Here's an implementation for anyone who comes across this:
#include <linux/rtc.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
int main(void)
int fd;
fd = open("/dev/rtc0",0);
if (fd < 0)
printf("Can't open rtc!");
struct rtc_time time;
time.tm_sec = 12;
time.tm_min = 12;
time.tm_hour = 7;
time.tm_mday = 12;
time.tm_mon = 7;
time.tm_year = 118;
if (ioctl(fd, RTC_SET_TIME, &time) < 0 )
printf("Set rtc failed!");
return 0;
edited Feb 26 at 23:22
answered Feb 26 at 23:15
jpsalmjpsalm
63
63
Isn't this exactly what the"-w"
option to yourhwclock
does?
– Murray Jensen
Feb 27 at 4:10
The -w option for BusyBox hwclock takes no arguments and simply writes the system clock into the rtc. I needed the ability to load an arbitrary time into hwclock and then load that into the system on the next boot.
– jpsalm
Feb 27 at 5:38
Usually, the"-r"
option is run at boot time, and the"-w"
option is run at shutdown (via init scripts). If your system is set up this way, you could just set the system time and reboot (bit of a sledge-hammer approach, I know - but would do the job)
– Murray Jensen
Feb 27 at 9:21
add a comment |
Isn't this exactly what the"-w"
option to yourhwclock
does?
– Murray Jensen
Feb 27 at 4:10
The -w option for BusyBox hwclock takes no arguments and simply writes the system clock into the rtc. I needed the ability to load an arbitrary time into hwclock and then load that into the system on the next boot.
– jpsalm
Feb 27 at 5:38
Usually, the"-r"
option is run at boot time, and the"-w"
option is run at shutdown (via init scripts). If your system is set up this way, you could just set the system time and reboot (bit of a sledge-hammer approach, I know - but would do the job)
– Murray Jensen
Feb 27 at 9:21
Isn't this exactly what the
"-w"
option to your hwclock
does?– Murray Jensen
Feb 27 at 4:10
Isn't this exactly what the
"-w"
option to your hwclock
does?– Murray Jensen
Feb 27 at 4:10
The -w option for BusyBox hwclock takes no arguments and simply writes the system clock into the rtc. I needed the ability to load an arbitrary time into hwclock and then load that into the system on the next boot.
– jpsalm
Feb 27 at 5:38
The -w option for BusyBox hwclock takes no arguments and simply writes the system clock into the rtc. I needed the ability to load an arbitrary time into hwclock and then load that into the system on the next boot.
– jpsalm
Feb 27 at 5:38
Usually, the
"-r"
option is run at boot time, and the "-w"
option is run at shutdown (via init scripts). If your system is set up this way, you could just set the system time and reboot (bit of a sledge-hammer approach, I know - but would do the job)– Murray Jensen
Feb 27 at 9:21
Usually, the
"-r"
option is run at boot time, and the "-w"
option is run at shutdown (via init scripts). If your system is set up this way, you could just set the system time and reboot (bit of a sledge-hammer approach, I know - but would do the job)– Murray Jensen
Feb 27 at 9:21
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f503157%2fembedded-linux-setting-the-time-without-ntp%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
There is the RTC point of view, the system pov, and could even be the application pov....what do is necessary to do, what is needed and what exactly breaks? Could it pay out initializing the applications after getting the time if getting it on time is critical? What time resolution does the app need? And is there an RTC?
– Rui F Ribeiro
Feb 26 at 16:39
1
Can you slow down everything else (i.e. full application waits to start until time is valid)?
– drewbenn
Feb 26 at 16:42
1
I used to have some apps running in an iOT, and they were quite happy even if the time via NTP got later in the game. Granted that after I bought an RTC for that, things were smoother, but it all depends on what you want to do and whether time is critical for the apllicational part.
– Rui F Ribeiro
Feb 26 at 16:45
1
There can be always the possibility of feeding an NTP daemon. As an example: unixwiz.net/techtips/raspberry-pi3-gps-time.html
– Rui F Ribeiro
Feb 26 at 16:59
There is an rtc but our hwclock implementation doesn't have the ability to write directly to it -- only to and from the system time from what I can tell. See my comment below on the usage options for our hwclock.
– jpsalm
Feb 26 at 17:14