博主使用的是天嵌的開發(fā)板型號IMX6Q_coreC。
1.發(fā)現(xiàn)使用開發(fā)板是時間總是被設(shè)置為2028年6月18日3時41分,一開始以為是底層驅(qū)動的問題, 故去底層加打印信息調(diào)試。
2.發(fā)現(xiàn)在系統(tǒng)內(nèi)hwclock -w也正常寫入, 從寄存器讀取時間也正確,就是斷電后又被設(shè)置成這個時間。
3.還有一個現(xiàn)象就是如果設(shè)置的時間大于這個時間,斷電后可以讀取到正常的時間,小于這個時間就會被置為2028年6月18日3時41分。
一、于是先設(shè)置一個時間再斷電重啟去抓這個RTC芯片的信息:
??? 就先隨便設(shè)置一個日期:20180419
????????
??? 看到打印信息讀寫寄存器都正?!,F(xiàn)在斷電重啟再抓這個芯片的信息:
????
??? 可以看出一開始讀取并設(shè)置的時間是正確的, 可是后面又被設(shè)置成了2028年的日期?是跑到系統(tǒng)里面才做的操作?跟底層無關(guān)?
??? 于是去系統(tǒng)里面搜索關(guān)鍵字2028:
?????
二、發(fā)現(xiàn)/etc/timestamp的文件內(nèi)容時間正好是2028年6月18日3時41分????
??? 再追,包含/etc/timestamp這個文件了有兩個腳本分別是/etc/init.d目錄下的bootmisc.sh和save-rtc.sh。
??? bootmisc.sh中有如下內(nèi)容:
?????#
????# This is as good a place as any for a sanity check
????#
????# Set the system clock from hardware clock
????# If the timestamp is more recent than the current time,
????# use the timestamp instead.
????test -x /etc/init.d/hwclock.sh && /etc/init.d/hwclock.sh start
????if test -e /etc/timestamp
????then
?? ?????SYSTEMDATE=`date -u +%4Y%2m%2d%2H%2M%2S`
?? ?????read TIMESTAMP < /etc/timestamp
?? ?????if [ ${TIMESTAMP} -gt $SYSTEMDATE ]; then
?? ??? ?# format the timestamp as date expects it (2m2d2H2M4Y.2S)
?? ??? ?????TS_YR=${TIMESTAMP%??????????}
?? ??? ?????TS_SEC=${TIMESTAMP#????????????}
?? ??? ?????TS_FIRST12=${TIMESTAMP%??}
?? ??? ?????TS_MIDDLE8=${TS_FIRST12#????}
?? ??? ?????date -u ${TS_MIDDLE8}${TS_YR}.${TS_SEC}
?? ??? ?????test -x /etc/init.d/hwclock.sh && /etc/init.d/hwclock.sh stop
?? ?????fi
????fi
三、解決方法:
??????? 找的了原因,解決的方法就簡單了
??????? 1. 刪除文件/etc/timestamp?;蛘咝薷?etc/timestamp內(nèi)的時間,使其小于或等于當前系統(tǒng)時間。
??????? 2. 正常關(guān)閉或重啟系統(tǒng)而不是直接斷電。
??????? 3. 修改bootmisc.sh腳本里面的判斷條件
????????????????