After you have connected DS3231 to your Raspberry Pi, edit the /boot/config.txt file and add the following lines:
dtparam=i2c_arm=on
dtoverlay=i2c-rtc,ds3231
Save the file and exit. Next, install the i2c tools:
# aptitude install -y i2c-tools
Reboot your Rapsberry Pi. Run the following command and note the address of the RTC. In my case that is 0x68:
# i2cdetect -y 1

Run the following commands:
# modprobe i2c-dev
# modprobe i2c-bmc2808
# modprobe i2c-ds1307
Run the following:
# echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new-device
Query the hardware clock:
# hwclock -r
You will probably get the wrong time, but then add the -s switch
# hwclock -s
# hwclock -r
You will notice that the time is accurate.
Add the RTC kernel module to /etc/modules:
rtc-ds1307
Add the following to /etc/rc.local just above the exit 0 line.
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
If the /etc/rc.local file does not exist, first create the service:
# vim /etc/systemd/system/rc-local.service
Now add your code:
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
Create the /etc/rc.local file, including the required line:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
exit 0
Enable the rc-local service:
# systemctl enable rc-local
Remember to set the executable bit on the rc.local
# chmod +x /etc/rc.local
Reboot your server and confirm that the hwclock -r shows the correct time.