I got DS3231 modules online for around USD$1.5 each. It's designed for Pi using to be easier my life.
According to
Adding a Real Time Clock to Raspberry Pi - Adafruit
I first recompile kernel and adding RTC DS3232 driver as module support since DS3232 is similar to DS3231 except adding SRAM ( it's stupid and waste half day to debug it).
modprobe rtc-ds3232 seems ok, however, attaching it to i2c brought lots of trouble.
and "unable to request IRQ" keeps showing with fifo error
echo ds3232 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
I found someone has similar problem and fix it by patch driver source but I rather like to go simpler way - to use DS1307 driver instead.
DS1307 is subset of DS3231 without temperature calibration. Everything went through smoothly after using rtc-ds1307.
Another issue I found is that RTC is corrupted every reboot!!! (another waste time here) register 0x06(year) is set to 0x66. Here is a hint that the reason is NTPD. I fix that by disabling ntpd
the quote of the link
I added to the /etc/ntpd.service file
ExecStartPre=-/usr/bin/hwclock -s
ExecStartPre=/usr/bin/ntpd -gq
and enabled the NTPD service
# systemctl enable ntpd
and the date updates and does not corrupt during boot.
However, I found that RTC can be enabled on Raspberry Pi by following this