问题描述

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

【linux】ARM开发板上设置RTC时间,断电重启后,设置失效的原因分析相关推荐

  1. 将linux内核烧进arm板,ARM开发板上uClinux内核移植

    <ARM开发板上uClinux内核移植>由会员分享,可在线阅读,更多相关<ARM开发板上uClinux内核移植(19页珍藏版)>请在人人文库网上搜索. 1.纷傲掌秀悸篷益哑檀扬 ...

  2. ARM开发板上iconv_open(utf-8, gb2312) 调用失败的解决方法(转)

    ARM开发板上iconv_open("utf-8", "gb2312") 调用失败的解决方法 应用程序代码如下: static int code_convert ...

  3. 通过vscode进行嵌入式linux arm开发板gdb调试

    下载和安装vscode, 下载 vscode for windows 地址:  Visual Studio Code - Code Editing. Redefined 安装 "remote ...

  4. 摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用

    摄像头在liunx上的QT显示和OK6410 ARM开发板上的使用 发布者:旺旺雪饼   时间:2013-01-05 16:56:09 环境: Ubuntu10.04 arm linux OS: 3. ...

  5. 如何在ARM开发板上从源码编译安装OpenCV和OpenCV contrib

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文主要介绍如何在ARM开发板上从源码编译安装OpenCV和OpenCV contrib. OpenC ...

  6. linux usb视频开发板,ARM开发板上USB 摄像头图像采集实现

    开发板上的arm是AT91RM9200,摄像头选用的是网眼的pc350,主控芯片是ov511+.系统内核是2.4,宿主机是fedora core 6,交叉编译器是2.95.3.就是这些家底了,:-). ...

  7. python交叉编译_交叉编译Python3.6.2,使用海思arm-hisiv200-linux-gcc,移植到arm开发板上...

    最近在学习Python,感觉使用Python可以快速的写出程序,比之前使用的C语言快多了,能省出很多时间.多学一点知识有更多的选择.本职工作是嵌入式开发,学习了Python后想移植到开发板上,尝试嵌入 ...

  8. 在ARM开发板上实现LCD+USB键盘

    一.LCD驱动 这个地方先留着 二.USB键盘驱动 在linux内核里边提供了usbkbd.c可以直接借助这个模块,编译生成驱动模块加载进内核,其实对于驱动程序,这里还不是重点,最后想要实现的是直接在 ...

  9. 4G上网模块ME3760移植到arm开发板上(6410)

    花了一天时间终于让6410开发板ping通www.baidu.com了,下面分享给大家.希望大家少走弯路~     我不知道是不是因为ME3760 V2这个4G模块太偏了,网上没有一个成熟详细的移植教 ...

最新文章

  1. Spring mvc PostgreSQL 插入timestamp和int8
  2. kcf跟踪算法实例整理
  3. Linux常用系统备份、恢复命令
  4. laplacian算子的运用
  5. 双目深度估计中的自监督学习概览
  6. 本地Android源代码库下载源码
  7. 操作系统进程间通信 --- IPC
  8. 为什么不可以使用哈曼顿距离_哈曼卡顿SOUNDSTICKS4全新一代无线水晶蓝牙音箱评测...
  9. Python编程基础01:搭建Python开发环境
  10. dcs 管理计算机的功能,计算机控制系统 第三章 集散控制系统(DCS).doc
  11. 检查Linux服务器受到DDOS攻击
  12. 蓝桥杯 ALGO-10 算法训练 集合运算
  13. WebDriver API
  14. 基本文件管理,针对Centos7的XFS文件系统备份恢复(需要更改)
  15. 论文:Scalable and accurate deep learning for electronic health records研读笔记
  16. Java实现部标JTT1078实时音视频传输指令——视频流负载包(RTP)传输
  17. vue-echarts渲染中国地图以及省份地图
  18. ecshop在linux运行慢,解决ECShop访问速度慢
  19. CTF-Tools 一款CTF古典密码加解密工具
  20. 手机号码归属地查询API

热门文章

  1. MXNet中x.grad源码追溯
  2. c语言usb串口输出,C语言实现模拟USB对8bit数据的NRZI编码输出
  3. Angular多个页面引入同一个组件报错The Component ‘MyComponentComponent‘ is declared by more than one NgModule怎么办?
  4. 【亲测可用】Xshell可视化配置一个登录服务器后自动进入指定目录的方法
  5. 【全网之最】全网最短代码——给名字、电话、账号、昵称加星号*添加隐私保护、身份证号加密、信息脱敏
  6. python中的数据包处理模块scapy调研笔记
  7. awk3.0 — awk变量
  8. Linux系统文本命令快速登录与退出
  9. IDEA新建一个多maven模块工程(有图)
  10. 【php增删改查实例】第十七节 - 用户登录(1)