如果说让我做上层软件的工作,我做起来可以得心应手,但是让我做平台方面的工作(系统问题解决、驱动编写、软件移植等工作),确实不熟悉。所以很多问题都是摸着石头过河,没有经验。许多问题在有经验的朋友那里是小菜一碟,而放在我面前总是如遇大山。不免被嘲笑为“弱鸡”~

最近我在做基于 Realtek 芯片RTL8196E的家庭网关的研发工作。Realtek提供了一个Linux的SDK开发环境。由于硬件上没有RTC,所以其中Linux的系统(下面简称为RTLinux)时钟是不正确的。需要时间同步。这个我从busybox中集成了ntpd便可。但是,我发现就算是同步好了时间,在执行 date 命令输出的时间时区都不对。

我在网上找了许多Linux系统设置时区的办法。从部分是:将 /usr/share/zoneinfo/Asia/Shanghai 符号链接为 /etc/localtime 便可。我在自己的PC机Linux(下面简称为PCLinux)上尝试,果然奏效。而同样的方法运用到 RTLinux 却没有一点效果。

这是博主想抱怨两句:网上找到的资料大多是告诉你怎么怎么去做就能达到什么目标,而没有说明为什么要这么做,它内在的原理是什么。如果不知道为什么,那么一旦发生一点变化,就无法变通了。

经博主研究,解决上面问题的办法有两种:

设置 /etc/TZ 文件,在该文件中指明时区

设置 TZ 环境变量

若读者不想深究其原因,那后面的内容便不必再看了。

博主先是发现了 /etc/TZ 这个文件看似时区的意思,其内容为: PST8PDT7,不知道是什么意思。尝试改改它。

到busybox里去找找 "/etc/TZ",看是谁,是怎么实用这个文件的。没有找到相关的引用。

到Linux内核中去找。也没有~

到boards中去找。结果找到:

可以看出是在 romfs/lib/libc.so.0 库文件里的。

而这个库文件则是由toolchain的工具集中复制得来。

于是再到toolchain下去找,结果有很多:

这时区的问题原来是由uclibc来决定的。

去看看uclibc/libc/misc/time/time.c中是怎么解决 /etc/TZ 文件的。

read_TZ_file()函数从 __UCLIBC_TZ_FILE_PATH__宏所(值为"/etc/TZ")指文件中读取数据。

在 _time_tzset(int use_old_rules) 中设置时区。

大致过程:

e = getenv("TZ");

if ((!e && !(e = read_TZ_file(buf))) || !*e) {

//!ERROR

}

可见,e先是从环境变量中去读,如果没有再从 /etc/TZ 中去读‍‍,‍‍这就是我们想要的原理。

接下来就是一大推解析相关的处理。这个我就不花时间去研究这个过程了,主要去看一下有没有相关的说明文档。

OK,我全明白了。 如果是在中国,那么就应该将变量设置成:"CST-8",试试看:

成功!

现在有两种方案:

直接到时区信息写到 /etc/TZ 文件

在系统启动时,设置环境变量 TZ

这两者都可以做。我们先默认在 /etc/TZ 文件中写入 "CST-8"

问题解决!

嵌入式linux 时间同步,解决嵌入式Linux中的时区问题相关推荐

  1. 时间同步软件 linux,时间同步(Arch Linux)

    时间同步 在 Arch Linux 中启用时间同步只需运行以下命令: $ sudo timedatectl set-ntp true 这就足够了. 下面的内容可以不看.:) xclock 使用以下命令 ...

  2. linux时间同步命令shell,LINUX时间同步脚本或命令

    Linux系统和windows不同的地方,如果时间和网络时间差距太大的话.可能会导致程序,进程启动不了.下面是学习啦小编收集整理的LINUX时间同步脚本或命令,希望对大家有帮助~~ LINUX时间同步 ...

  3. Linux(deepin) 解决 Anaconda 环境中 matplotlib 中文乱码问题

    matplotlib 库设置中文显示时会出现小方框,为了解决这个问题查阅了很多资料,但是都是直接在系统环境中修改,而我用的是 Anaconda 自建的环境,无法解决问题,因此查了很久之后找到了解决方法 ...

  4. linux命令中service ntpd restart,Linux 时间同步 ntpd

    Linux 时间同步 ntpd 关于Linux下时间同步的解决方案,其实有几种.一是使用rdate命令,同步时间到远程主机.二是运用ntp软件包. 以下主要讲使用ntpd的方式来完成时间的同步. 当然 ...

  5. linux ntp 追赶,Linux 时间同步 ntpd

    Linux 时间同步 ntpd 关于Linux下时间同步的解决方案,其实有几种.一是使用rdate命令,同步时间到远程主机.二是运用ntp软件包. 以下主要讲使用ntpd的方式来完成时间的同步. 当然 ...

  6. linux 添加宋体字符集,Linux下安装中文宋体

    1,#cd /usr/share/fonts/default 2,mkdir -p ./truetype/simsun 3,取得simsun.ttc文件:如果网上下载不到则在windows (c:/w ...

  7. 嵌入式Linux 时间同步 gpsd+chrony

    嵌入式Linux 时间同步 gpsd+chrony 嵌入式Linux系统,外接GPS设备,系统通过NMEA数据和pps进行时间同步,同时将本系统作为时间同步服务器. 一.基本原理 ​ NMEA中获取U ...

  8. linux 打印函数宏,linux内核中的嵌入式汇编宏函数

    在看linux内核代码时,常会遇到诸如:static inline _syscall0(int,fork)这样的函数.经查阅资料,发现该函数是嵌入式汇编宏函数. linux内核提供了7个非常有用的宏定 ...

  9. 解析Linux内核源码中数据同步问题丨C++后端开发丨Linux服务器开发丨Linux内核开发丨驱动开发丨嵌入式开发丨内核操作系统

    剖析Linux内核源码数据同步 1.pdflush机制原理 2.超级块同步/inode同步 3.拥塞及强制回写技术 视频讲解如下,点击观看: 解析Linux内核源码中数据同步问题丨C++后端开发丨Li ...

最新文章

  1. 「AlphaGo 之父」David Silver最新演讲,传授强化学习的十大原则
  2. 获取当天是当年/当月的第几周
  3. Ueditor百度编辑器中的 setContent()方法的使用
  4. mysql工具的使用_产品操作MySQL入门篇-工具使用
  5. 基于JAVA+SSH+MYSQL的鲜花订购系统
  6. 初学JAVA随记——代码练习(二元一次方程)
  7. VSLAM技术框架详述
  8. python 利器_python利器之切片
  9. Palm应用开发之一开发环境搭建
  10. LINUX安装文件DEB的postrm运行报错,无法卸载怎么办
  11. 2013总结-2014计划
  12. 计算机表格快捷键,Excel表格快捷键与功能键大全
  13. vxlan技术是一种什么技术?
  14. Python断言与isinstance()判断数据类型
  15. autojs开发的多功能工具箱,源码量大慢慢消化,功能非常多
  16. 图片云存储服务商在阿里云和又拍云之间如何选择?
  17. 前端常见面试题及答案
  18. d3dcompiler_43.dll缺失怎么修复
  19. SPI的NSS硬件模式
  20. MybatisPlus条件构造器wrapper方法的使用

热门文章

  1. 从 class 文件 看 synchronize 锁膨胀过程(偏向锁 轻量级锁 自旋锁 重量级锁)
  2. 华强北耳机修改序列号|支持中英文|自定义修改|傻瓜式一键修改序列号~
  3. java使用AntPathMatcher进行uri匹配
  4. vue 获取验证码倒计时组件
  5. mongoose日期 时间 范围查询
  6. Android之Notification初识
  7. java socat_socat安装使用方法
  8. 文件循环读取_一个案例轻松认识Python文件处理提取文件中的数字
  9. layui 数据表格代码
  10. 网页里面的下拉框与数据库交互