1. 程式人生 > >【linux】ARM開發板上設定RTC時間,斷電重啟後,設定失效的原因分析

【linux】ARM開發板上設定RTC時間,斷電重啟後,設定失效的原因分析

問題描述

linux中使用date設定時間後用hwclock -w同步到RTC,斷電重啟後,有時會失效

原因分析

儲存時間戳

1、使用命令關機(halt)會呼叫rc0.d中的指令碼;
2、使用命令重啟(reboot)會呼叫rc6.d中的指令碼;
3、其中都有指令碼S25save-rtc.sh,S25save-rtc.sh是對 ../init.d/save-rtc.sh的軟連線;
4、save-rtc.sh指令碼內容:

date -u +%4Y%2m%2d%2H%2M%2S > /etc/timestamp

使用時間戳

1、啟動核心後啟動第一個程式init,init呼叫指令碼/etc/inittab

2、inittab中啟動的第一個指令碼是:/etc/init.d/rcS

  7 # Boot-time system configuration/initialization script.
  8 # This is run first except when booting in emergency (-b) mode.
  9 si::sysinit:/etc/init.d/rcS

3、init.d/rcS中有exec /etc/init.d/rc S;
4、rc中迴圈呼叫rcS.d中的指令碼;
5、rcS.d中有指令碼S55bootmisc.sh,軟連線到 ../init.d/bootmisc.sh
6、 bootmisc.sh指令碼關於timestamp的內容如下:

test -x /etc/init.d/hwclock.sh && /etc/init.d/hwclock.sh start
if test -e /etc/timestamp   #如果/etc/timestamp檔案存在
then
SYSTEMDATE=`date -u +%4Y%2m%2d%2H%2M%2S`    #獲取系統時間
read TIMESTAMP < /etc/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

總結

ARM開發板上設定RTC時間,如果執行reboot或者halt將會儲存時間戳,重啟後時間正常;
如果是斷電重啟,/etc/timestamp中儲存的時間戳是上次執行reboot或halt儲存的,如果執行reboot或halt儲存的時間戳比你想設定的RTC時間大,就會在執行啟動指令碼時,將/etc/timestamp中儲存的時間戳設定到RTC中,導致出錯。
比如,有人故意設定一個很未來的時間,而且ARM板在使用過程中,都是直接斷電,將會導致RTC設定一直是失敗的。
—end

相關推薦

linuxARM開發設定RTC時間斷電設定失效原因分析

問題描述 linux中使用date設定時間後用hwclock -w同步到RTC,斷電重啟後,有時會失效 原因分析 儲存時間戳 1、使用命令關機(halt)會呼叫rc0.d中的指令碼; 2、使用命令重啟(reboot)會呼叫rc6.d中的指令碼;

嵌入式LinuxARM開發通過NFS掛載Linux主機實現檔案共享

一般在Linux主機上arm-linux-gcc編譯程式,然後將該生成的可執行檔案傳送給ARM開發板,ARM開發板再執行該檔案。 (主機Linux系統)--->(ARM開發板Linux系統)  傳送檔案的過程可以採用NFS,FTP等多種方法 採用NFS實現遠端掛載,ARM

linux-arm筆記2:如何在ubuntu安裝ftp並且用ftp向arm開發傳檔案

[email protected]:~$ ftp 192.168.1.109    //arm開發板ip Connected to 192.168.1.109. 220 FriendlyARM FTP server (Version 6.4/OpenBSD/Linux-ftpd-0.17) read

arm開發找不到/dev/i2c-*設備

linu arm The iic oar fig com 在一起 直接 最近在調試arm與外設iic通訊是,想來個投機取巧,先不寫單獨的驅動,直接通過iic bus設備是否可以連接到外設,然後發現在板子上找不到“/dev/i2c-n”的設備,標準的系統應該都是有的。 回去看

Linux在Windows7主機安裝CentOS雙系統

因個人辦公電腦裝的盜版Win7總是藍屏,影響工作,加之看到 WPS Linux版也已釋出,嘗試安裝 CentOS 作為辦公系統。大學期間學過 Linux 語法,也自己玩過 Ubuntu,倒都也熟悉。 之所以選擇CentOS 是因為 Cen

Linux 單臺伺服器併發TCP連線數(轉)

單臺伺服器上併發TCP連線數    問題:一臺伺服器到底能夠支援多少TCP併發連線呢?1. 檔案描述符限制:    對於伺服器來說,每一個TCP連線都要佔用一個檔案描述符,一旦檔案描述符使用完,新的連線到來返回給我們的錯誤是"Socket/File:

筆記關於開發、主機windows和虛擬機器ubuntu之間的ping

提前做好準備: 1.我們先將各個IP確定好: 主機windows IP為: 192.168.1.20 開發板執行uboot或linux IP為: 192.168.1.10 虛擬機器ubuntu IP為: 192.168.1.141 2. 將主機windows

ARM開發搭建sshd環境(嘔血歷程)

安裝按照這個部落格:https://blog.csdn.net/u013711616/article/details/53044918 zlib-1.2.8.tar.gz  openssl-0.9.8d.tar.gz  openssh-5.6p1.tar.gz 資料已打包,見

ARM開發交叉編譯usb轉串列埠驅動

問題 這兩天為了做gps和arm的通訊,不得不搗鼓這個東東。開發板是創維特jx2410,usb轉串列埠線的晶片是pl2303。還好是這個晶片,讓我沒費多少力氣,就達成了目的。因為linux對它已經支援了,我們只要編譯、載入它的驅動就ok了。 驅動原始

linux-2.6.32在mini2440開發移植(10)之觸控式螢幕工作原理以及驅動程式詳細分析

第二部分輸入核心的作用如下: (1) 呼叫input_register_device() used to 新增裝置,呼叫input_unregister_device() 除去裝置。(下面會結合觸控式螢幕驅動講述) (2) 在/PROC 下產生相應的裝置資訊,下面這個例子即是: /proc/bus/input

arm開發arecord 錄音出現噪聲的解決方法

自己遇到的問題是在開發板上進行錄音,指令是:arecord -t raw -f S16_LE  sh.pcm. 錄取到的聲音有雜音,自己通過alsamixer 命令來進行設定聲音獲取的引數,自己通過F4命令進入captrue來設定。 然後,F3命令,把有關Line的資料全

Androidandroid開發之splash閃屏頁的四種實現方式啟動頁的實現教程。

作者:程式設計師小冰,GitHub主頁:https://github.com/QQ986945193 首先給大家看一下今天實現的效果圖(其他三種都差不太多底下詳細介紹): 這個啟動頁實現的方法是四種,兩種是利用handler,其它兩種是利用了動畫的方式。 具體給大家貼一下

Ubuntu 12.04 每次/etc/resolv.conf裡面設定的nameserver就被清空

# cat /etc/resolv.conf  # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)#     DO NOT EDIT THIS FILE BY HAND

IDEA中設定自動build-改動程式碼不用工程重新整理頁面即可

1.CTRL + SHIFT + A --> 查詢Registry --> 找到並勾選compiler.automake.allow.when.app.running 2. FILE - SETTING - Build - Compiler - bulid pr

設定網路對映電腦自動

1.     利用批處理檔案來自動對映 ①      首先製作自動對映網路驅動器批處理檔案; ②      利用Net Use命令,其基本格式如下: NET USE [devicename | *] [\\computername\sharename[\volume] [p

伺服器MySql連不?!

今天發現數據庫某表崩潰了(解決方法:https://blog.csdn.net/qq_29729735/article/details/76683433),正想遠端連線一下伺服器,結果發現連線不上:

jenkinsTomcat指令碼設定jvm引數之後遇到了一個坑。

如下是我的重啟指令碼 #/bin/sh source /etc/profile sh /opt/kms_jsoncach.sh pid=`ps -ef | grep "APPmanager" | grep -v 'grep\|tail\|more\|le

開發修改時間方法

之前使用開發板時發現每次開機後,系統的時間都恢復到初始狀態1970年。 一、 先說一下時鐘的概念,時鐘包括硬體時鐘和系統時鐘,系統時鐘就是linux系統顯示的時間,用命令date可以顯示當前系統時間;硬體時鐘就是硬體自身的 時間了。它們兩者沒有關係的,但是可以通過命令設定系統時鐘和硬體設定,讓它們同步。在l

迅為推薦適合新手學習的arm開發-iTOP-4412開發

 免費部分視訊試看地址:(PS:迅為提供高清版下載地址)【視訊教程】iTOP-4412開發板之學習方法--致初學者  http://v.youku.com/v_show/id_XNzQ5MDA4NzM2.html【視訊教程】三星Exynos 4412處理器開發要點   htt

Android 系統開發 編譯 Android檔案系統 u-boot 核心 並燒寫到 OK-6410A 開發

本篇文章中用到的工具原始碼下載 : -- 光碟所含內容 : Android 引導 u-boot 原始碼, Android 核心 原始碼, Android 系統原始碼, 交叉編譯工具鏈;各項操作說明 : -- 編譯環境 : 編譯原始碼 (u-boot, 核心, Android