2018-05-27 01:42:39 GouplovXim1314 阅读数 1481
  • 韦东山升级版嵌入式视频之快速入门

    韦东山老师为啥要录升级版嵌入式视频? 200x年左右,嵌入式Linux在全世界、在中国刚刚兴起。 我记得我2005年进入中兴时,全部门的人正在努力学习Linux。 在2008年,我写了一本书《嵌入式Linux应用开发完全手册》。 它的大概内容是:裸机、U-boot、Linux内核、Linux设备驱动。 那时还没有这样讲解整个系统的书, 芯片厂家Linux开发包也还不完善,从bootloader到内核,再到设备驱动都不完善。 有全系统开发能力的人也很少。 于是这书也就恰逢其时,变成了畅销书。 我也根据这个思路录制了视频:裸机、U-boot、Linux内核、Linux设备驱动。 收获些许名声,带领很多人进入Linux世界。 11年过去了,嵌入式Linux世界发生了翻天覆地的变化 ① 基本系统能用 芯片厂家都会提供完整的U-boot、Linux内核、芯片上硬件资源的驱动。 方案厂家会做一些定制,比如加上某个WIFI模块,会添加这个WIFI模块的驱动。 你可以使用厂家的原始方案,或是使用/借鉴方案商的方案,做出一个“能用”的产品。 ② 基础驱动弱化;高级驱动专业化 基础的驱动,比如GPIO、UART、SPI、I2C、LCD、MMC等,有了太多的书籍、视频、示例代码,修修改改总是可以用的。 很多所谓的驱动工程师,实际上就是“调参工程师”。 我们群里有名的火哥,提出了一个概念:这些驱动就起一个“hardware enable”的作用。 高级的驱动,比如USB、PCIE、HDMI、MIPI、GPU、WIFI、蓝牙、摄像头、声卡。 体系非常复杂,很少有人能讲清楚,很多时候只是一笔带过。 配置一下应用层工具就了事,能用就成。 这些高级驱动,工作中需要专门的人来负责,非常专业。 他们是某一块的专家,比如摄像头专家、音频专家。 ③ 项目为王 你到一个公司,目的是把产品做出来,会涉及APP到内核到驱动全流程。 中小公司玩不起华为中兴的配置,需要的是全面手。 大公司里,只负责很小很小一块的镙丝钉,位置也不太稳固啊。 所以,如果你不是立志成为某方面的专家,那就做一个全栈工程师吧。 ④ 调试很重要 都说代码是3分写7分调,各种调试调优技术,可以为你的升职加薪加一把火。 基于上述4点,我录制的全新视频将有这些特点: 1. 快速入门, 2. 实战项目, 3. 驱动大全, 4. 专题, 5. 授人以渔, 6. 要做任务 另外,我们会使用多款芯片同时录制,先讲通用的原理,再单独讲各个板子的操作。 这些芯片涵盖主流芯片公司的主流芯片,让你学习工作无缝对接。 1.快速入门 入门讲究的是快速,入门之后再慢慢深入, 特别是对于急着找工作的学生,对于业余时间挑灯夜读的工作了的人,一定要快! 再从裸机、U-boot、内核、驱动这样的路线学习就不适合了,时间就拉得太长了。 搞不好学了后面忘了前面。 并且实际工作中并不需要你去弄懂U-boot,会用就行:U-boot比驱动还复杂。 讲哪些内容? 怎么讲呢? 混着讲 比如先讲LED APP,知道APP怎么调用驱动,再讲LED硬件原理和裸机,最后讲驱动的编写。 这样可以快速掌握嵌入式Linux的整套开发流程, 不必像以前那样光学习裸机就花上1、2个月。 而里面的裸机课程,也会让你在掌握硬件操作的同时,把单片机也学会了。 讲基础技能 中断、休眠-唤醒、异步通知、阻塞、内存映射等等机制,会配合驱动和APP来讲解。 这些技能是嵌入式Linux开发的基础。 而这些驱动,只会涉及LED、按制、LCD等几个驱动。 掌握了这些输入、输出的驱动和对应的APP后,你已经具备基本的开发能力了。 讲配置 我们从厂家、从方案公司基本上都可以拿到一套完整的开发环境,怎么去配置它? 需要懂shell和python等配置脚本。 效果效率优先 以前我都是现场写代码、现场写文档,字写得慢,降低了学习效率。 这次,效果与效率统一考虑,不再追求所有东西都现场写。 容易的地方可先写好代码文档,难的地方现场写。 2.实战项目 会讲解这样的涉及linux网关/服务器相关项目(不限于,请多提建议):                      定位为:快速掌握项目开发经验,丰满简历。 涉及的每一部分都会讲,比如如果涉及蓝牙,在这里只会讲怎么使用,让你能写出程序;如果要深入,可以看后面的蓝牙专题。 3. 驱动大全 包括基础驱动、高级驱动。 这些驱动都是独立成章,深入讲解。 虽然基础驱动弱化了,但是作为Linux系统开发人员,这是必备技能,并且从驱动去理解内核是一个好方法。 在讲解这些驱动时,会把驱动的运行环境,比如内核调度,进程线程等概念也讲出来,这样就可以搭建一个知识体系。 没有这些知识体系的话,对驱动的理解就太肤浅了,等于在Linux框架下写裸机,一叶障目,不见泰山。 定位为:工具、字典,用到再学习。 4. 专题 想深入学习的任何内容,都可独立为专题。 比如U-boot专题、内核内存管理专题、systemtap调试专题。

    4898 人正在学习 去看看 韦东山

<!-- 2018-01-03 -->


Linux时间变慢解决方法

情景:
系统为CentOS-5.4,硬件时间正确(查看硬件时间的方法见下面),系统时间每隔24小时会慢20分钟左右
Linux将时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟两种。系统时间是指当前Linux Kernel中的
时钟,而硬件时钟则是主板上由电池供电的那个主板硬件时钟,这个时钟可以在BIOS的Standard BIOS Feture”项中进行设置。 
在Linux中,用于时钟查看和设置的命令主要有date、hwclock和clock(clock是hwclock的符号链接)。
解决:让系统时间每隔十分钟去同步一下硬件时间

$ vi /etc/crontab
*/10 * * * * root hwclock --hctosys         #我加入了这么一行,表示每隔10分钟执行一次hwclock --hctosys  

1、查看Linux系统时间:
date

2、修改Linux系统时间:
date -s 06/10/96
date -s 13:12:00
date -s "06/10/1996 13:12:00" #这里的格式是 "MM/DD/YYYY hh:mm:ss"
date 061013121996.00 #这里的格式是 MMDDhhmmYYYY.ss (月日时分年.秒)

3、查看Linux硬件时间:
hwclock
or
hwclock –show

4、修改Linux硬件时间:
hwclock --set --date="06/18/14 14:55" (月/日/年时:分:秒)或者# clock --set --date="06/18/14 14:55" (月/日/年时:分:秒)
5、让系统时间与硬件时钟同步:
hwclock –hctosys

6、让硬件时钟与系统时间同步:
hwclock –systohc(-w)

2012-08-14 16:10:42 cuiran 阅读数 1378
  • 韦东山升级版嵌入式视频之快速入门

    韦东山老师为啥要录升级版嵌入式视频? 200x年左右,嵌入式Linux在全世界、在中国刚刚兴起。 我记得我2005年进入中兴时,全部门的人正在努力学习Linux。 在2008年,我写了一本书《嵌入式Linux应用开发完全手册》。 它的大概内容是:裸机、U-boot、Linux内核、Linux设备驱动。 那时还没有这样讲解整个系统的书, 芯片厂家Linux开发包也还不完善,从bootloader到内核,再到设备驱动都不完善。 有全系统开发能力的人也很少。 于是这书也就恰逢其时,变成了畅销书。 我也根据这个思路录制了视频:裸机、U-boot、Linux内核、Linux设备驱动。 收获些许名声,带领很多人进入Linux世界。 11年过去了,嵌入式Linux世界发生了翻天覆地的变化 ① 基本系统能用 芯片厂家都会提供完整的U-boot、Linux内核、芯片上硬件资源的驱动。 方案厂家会做一些定制,比如加上某个WIFI模块,会添加这个WIFI模块的驱动。 你可以使用厂家的原始方案,或是使用/借鉴方案商的方案,做出一个“能用”的产品。 ② 基础驱动弱化;高级驱动专业化 基础的驱动,比如GPIO、UART、SPI、I2C、LCD、MMC等,有了太多的书籍、视频、示例代码,修修改改总是可以用的。 很多所谓的驱动工程师,实际上就是“调参工程师”。 我们群里有名的火哥,提出了一个概念:这些驱动就起一个“hardware enable”的作用。 高级的驱动,比如USB、PCIE、HDMI、MIPI、GPU、WIFI、蓝牙、摄像头、声卡。 体系非常复杂,很少有人能讲清楚,很多时候只是一笔带过。 配置一下应用层工具就了事,能用就成。 这些高级驱动,工作中需要专门的人来负责,非常专业。 他们是某一块的专家,比如摄像头专家、音频专家。 ③ 项目为王 你到一个公司,目的是把产品做出来,会涉及APP到内核到驱动全流程。 中小公司玩不起华为中兴的配置,需要的是全面手。 大公司里,只负责很小很小一块的镙丝钉,位置也不太稳固啊。 所以,如果你不是立志成为某方面的专家,那就做一个全栈工程师吧。 ④ 调试很重要 都说代码是3分写7分调,各种调试调优技术,可以为你的升职加薪加一把火。 基于上述4点,我录制的全新视频将有这些特点: 1. 快速入门, 2. 实战项目, 3. 驱动大全, 4. 专题, 5. 授人以渔, 6. 要做任务 另外,我们会使用多款芯片同时录制,先讲通用的原理,再单独讲各个板子的操作。 这些芯片涵盖主流芯片公司的主流芯片,让你学习工作无缝对接。 1.快速入门 入门讲究的是快速,入门之后再慢慢深入, 特别是对于急着找工作的学生,对于业余时间挑灯夜读的工作了的人,一定要快! 再从裸机、U-boot、内核、驱动这样的路线学习就不适合了,时间就拉得太长了。 搞不好学了后面忘了前面。 并且实际工作中并不需要你去弄懂U-boot,会用就行:U-boot比驱动还复杂。 讲哪些内容? 怎么讲呢? 混着讲 比如先讲LED APP,知道APP怎么调用驱动,再讲LED硬件原理和裸机,最后讲驱动的编写。 这样可以快速掌握嵌入式Linux的整套开发流程, 不必像以前那样光学习裸机就花上1、2个月。 而里面的裸机课程,也会让你在掌握硬件操作的同时,把单片机也学会了。 讲基础技能 中断、休眠-唤醒、异步通知、阻塞、内存映射等等机制,会配合驱动和APP来讲解。 这些技能是嵌入式Linux开发的基础。 而这些驱动,只会涉及LED、按制、LCD等几个驱动。 掌握了这些输入、输出的驱动和对应的APP后,你已经具备基本的开发能力了。 讲配置 我们从厂家、从方案公司基本上都可以拿到一套完整的开发环境,怎么去配置它? 需要懂shell和python等配置脚本。 效果效率优先 以前我都是现场写代码、现场写文档,字写得慢,降低了学习效率。 这次,效果与效率统一考虑,不再追求所有东西都现场写。 容易的地方可先写好代码文档,难的地方现场写。 2.实战项目 会讲解这样的涉及linux网关/服务器相关项目(不限于,请多提建议):                      定位为:快速掌握项目开发经验,丰满简历。 涉及的每一部分都会讲,比如如果涉及蓝牙,在这里只会讲怎么使用,让你能写出程序;如果要深入,可以看后面的蓝牙专题。 3. 驱动大全 包括基础驱动、高级驱动。 这些驱动都是独立成章,深入讲解。 虽然基础驱动弱化了,但是作为Linux系统开发人员,这是必备技能,并且从驱动去理解内核是一个好方法。 在讲解这些驱动时,会把驱动的运行环境,比如内核调度,进程线程等概念也讲出来,这样就可以搭建一个知识体系。 没有这些知识体系的话,对驱动的理解就太肤浅了,等于在Linux框架下写裸机,一叶障目,不见泰山。 定位为:工具、字典,用到再学习。 4. 专题 想深入学习的任何内容,都可独立为专题。 比如U-boot专题、内核内存管理专题、systemtap调试专题。

    4898 人正在学习 去看看 韦东山

linux系统时间经常变慢,修改的方法有两种:

1、手工修改linux时间:

以root用户登录

设置系统日期为2008年3月15日:

#date -s 03/15/08

设置系统时间为18时20分30秒:

#date -s 18:20:30

2、系统自动同步linux时间:

vi /etc/rc.d/rc.local中,最下面添加

ntpdate time.nist.gov

或者rdate -s time.nist.gov(有时连接不上)

说明:第二中方法也可直接在命令行输入,如:
#ntpdate time.nist.gov

2015-10-19 21:49:52 LeesLeeFeng 阅读数 700
  • 韦东山升级版嵌入式视频之快速入门

    韦东山老师为啥要录升级版嵌入式视频? 200x年左右,嵌入式Linux在全世界、在中国刚刚兴起。 我记得我2005年进入中兴时,全部门的人正在努力学习Linux。 在2008年,我写了一本书《嵌入式Linux应用开发完全手册》。 它的大概内容是:裸机、U-boot、Linux内核、Linux设备驱动。 那时还没有这样讲解整个系统的书, 芯片厂家Linux开发包也还不完善,从bootloader到内核,再到设备驱动都不完善。 有全系统开发能力的人也很少。 于是这书也就恰逢其时,变成了畅销书。 我也根据这个思路录制了视频:裸机、U-boot、Linux内核、Linux设备驱动。 收获些许名声,带领很多人进入Linux世界。 11年过去了,嵌入式Linux世界发生了翻天覆地的变化 ① 基本系统能用 芯片厂家都会提供完整的U-boot、Linux内核、芯片上硬件资源的驱动。 方案厂家会做一些定制,比如加上某个WIFI模块,会添加这个WIFI模块的驱动。 你可以使用厂家的原始方案,或是使用/借鉴方案商的方案,做出一个“能用”的产品。 ② 基础驱动弱化;高级驱动专业化 基础的驱动,比如GPIO、UART、SPI、I2C、LCD、MMC等,有了太多的书籍、视频、示例代码,修修改改总是可以用的。 很多所谓的驱动工程师,实际上就是“调参工程师”。 我们群里有名的火哥,提出了一个概念:这些驱动就起一个“hardware enable”的作用。 高级的驱动,比如USB、PCIE、HDMI、MIPI、GPU、WIFI、蓝牙、摄像头、声卡。 体系非常复杂,很少有人能讲清楚,很多时候只是一笔带过。 配置一下应用层工具就了事,能用就成。 这些高级驱动,工作中需要专门的人来负责,非常专业。 他们是某一块的专家,比如摄像头专家、音频专家。 ③ 项目为王 你到一个公司,目的是把产品做出来,会涉及APP到内核到驱动全流程。 中小公司玩不起华为中兴的配置,需要的是全面手。 大公司里,只负责很小很小一块的镙丝钉,位置也不太稳固啊。 所以,如果你不是立志成为某方面的专家,那就做一个全栈工程师吧。 ④ 调试很重要 都说代码是3分写7分调,各种调试调优技术,可以为你的升职加薪加一把火。 基于上述4点,我录制的全新视频将有这些特点: 1. 快速入门, 2. 实战项目, 3. 驱动大全, 4. 专题, 5. 授人以渔, 6. 要做任务 另外,我们会使用多款芯片同时录制,先讲通用的原理,再单独讲各个板子的操作。 这些芯片涵盖主流芯片公司的主流芯片,让你学习工作无缝对接。 1.快速入门 入门讲究的是快速,入门之后再慢慢深入, 特别是对于急着找工作的学生,对于业余时间挑灯夜读的工作了的人,一定要快! 再从裸机、U-boot、内核、驱动这样的路线学习就不适合了,时间就拉得太长了。 搞不好学了后面忘了前面。 并且实际工作中并不需要你去弄懂U-boot,会用就行:U-boot比驱动还复杂。 讲哪些内容? 怎么讲呢? 混着讲 比如先讲LED APP,知道APP怎么调用驱动,再讲LED硬件原理和裸机,最后讲驱动的编写。 这样可以快速掌握嵌入式Linux的整套开发流程, 不必像以前那样光学习裸机就花上1、2个月。 而里面的裸机课程,也会让你在掌握硬件操作的同时,把单片机也学会了。 讲基础技能 中断、休眠-唤醒、异步通知、阻塞、内存映射等等机制,会配合驱动和APP来讲解。 这些技能是嵌入式Linux开发的基础。 而这些驱动,只会涉及LED、按制、LCD等几个驱动。 掌握了这些输入、输出的驱动和对应的APP后,你已经具备基本的开发能力了。 讲配置 我们从厂家、从方案公司基本上都可以拿到一套完整的开发环境,怎么去配置它? 需要懂shell和python等配置脚本。 效果效率优先 以前我都是现场写代码、现场写文档,字写得慢,降低了学习效率。 这次,效果与效率统一考虑,不再追求所有东西都现场写。 容易的地方可先写好代码文档,难的地方现场写。 2.实战项目 会讲解这样的涉及linux网关/服务器相关项目(不限于,请多提建议):                      定位为:快速掌握项目开发经验,丰满简历。 涉及的每一部分都会讲,比如如果涉及蓝牙,在这里只会讲怎么使用,让你能写出程序;如果要深入,可以看后面的蓝牙专题。 3. 驱动大全 包括基础驱动、高级驱动。 这些驱动都是独立成章,深入讲解。 虽然基础驱动弱化了,但是作为Linux系统开发人员,这是必备技能,并且从驱动去理解内核是一个好方法。 在讲解这些驱动时,会把驱动的运行环境,比如内核调度,进程线程等概念也讲出来,这样就可以搭建一个知识体系。 没有这些知识体系的话,对驱动的理解就太肤浅了,等于在Linux框架下写裸机,一叶障目,不见泰山。 定位为:工具、字典,用到再学习。 4. 专题 想深入学习的任何内容,都可独立为专题。 比如U-boot专题、内核内存管理专题、systemtap调试专题。

    4898 人正在学习 去看看 韦东山

Linux系统时间设置


上午一个网友在Q群问Linux怎么设置时间,因为断电重启后就恢复成默认的了,稍微看了下我的测试机,慢了几分钟,没有在意。晚上就碰到时间的问题了。
Laravel的模板会根据模板文件的修改时间自动更新,而我写的发现一直更新不了,删除在storage/framework/views文件中的缓存,才能更新。
查看时间才发现,开发机(另一个VPS)上的时间比实际慢了大概12小时5分钟,难怪更新不了,我是在本地编辑并自动同步到VPS的。


date -R 查看时间、时区

开发机上的时区,真是-4:
[root@walking ~]# date -R
Mon, 19 Oct 2015 08:53:01 -0400


更改时区:

vi /etc/sysconfig/zone
ZONE="Asia/Shanghai"

rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

把系统时间写入到硬件时间
hwclock --systohc

再次查看,时区已经改过来了:
[root@walking ~]# date -R
Mon, 19 Oct 2015 21:45:30 +0800




自动同步时间

自动同步时间用ntpdate

安装ntpdate(RedHat & CentOS):
yum install ntpdate ntp

Ubuntu系统的:
sudo apt-get install -y ntpdate ntp 

手动同步时间:
ntpdate -u pool.ntp.org
hwclock --systohc
(重新写入)

自动同步:
echo "30 3 * * * root /usr/sbin/ntpdate -u pool.ntp.org && /sbin/clock --systohc" >> /etc/crontab
意思是每天3点半执行一次时间同步,echo "directive" >> /path/file是指把内容追加到文件末尾


或打开/etc/conrtab写入:
30 3 * * * root /usr/sbin/ntpdate -u pool.ntp.org && /sbin/clock --systohc

vi /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

30 3 * * * root /usr/sbin/ntpdate -u pool.ntp.org && /sbin/clock --systohc




参考:

查看/修改Linux时区和时间_豆豆网

centos vps修改时间及时区不同步 终极解决方案

国外VPS修改系统时间为北京时间







2013-06-08 22:01:21 liuxueyi521 阅读数 1495
  • 韦东山升级版嵌入式视频之快速入门

    韦东山老师为啥要录升级版嵌入式视频? 200x年左右,嵌入式Linux在全世界、在中国刚刚兴起。 我记得我2005年进入中兴时,全部门的人正在努力学习Linux。 在2008年,我写了一本书《嵌入式Linux应用开发完全手册》。 它的大概内容是:裸机、U-boot、Linux内核、Linux设备驱动。 那时还没有这样讲解整个系统的书, 芯片厂家Linux开发包也还不完善,从bootloader到内核,再到设备驱动都不完善。 有全系统开发能力的人也很少。 于是这书也就恰逢其时,变成了畅销书。 我也根据这个思路录制了视频:裸机、U-boot、Linux内核、Linux设备驱动。 收获些许名声,带领很多人进入Linux世界。 11年过去了,嵌入式Linux世界发生了翻天覆地的变化 ① 基本系统能用 芯片厂家都会提供完整的U-boot、Linux内核、芯片上硬件资源的驱动。 方案厂家会做一些定制,比如加上某个WIFI模块,会添加这个WIFI模块的驱动。 你可以使用厂家的原始方案,或是使用/借鉴方案商的方案,做出一个“能用”的产品。 ② 基础驱动弱化;高级驱动专业化 基础的驱动,比如GPIO、UART、SPI、I2C、LCD、MMC等,有了太多的书籍、视频、示例代码,修修改改总是可以用的。 很多所谓的驱动工程师,实际上就是“调参工程师”。 我们群里有名的火哥,提出了一个概念:这些驱动就起一个“hardware enable”的作用。 高级的驱动,比如USB、PCIE、HDMI、MIPI、GPU、WIFI、蓝牙、摄像头、声卡。 体系非常复杂,很少有人能讲清楚,很多时候只是一笔带过。 配置一下应用层工具就了事,能用就成。 这些高级驱动,工作中需要专门的人来负责,非常专业。 他们是某一块的专家,比如摄像头专家、音频专家。 ③ 项目为王 你到一个公司,目的是把产品做出来,会涉及APP到内核到驱动全流程。 中小公司玩不起华为中兴的配置,需要的是全面手。 大公司里,只负责很小很小一块的镙丝钉,位置也不太稳固啊。 所以,如果你不是立志成为某方面的专家,那就做一个全栈工程师吧。 ④ 调试很重要 都说代码是3分写7分调,各种调试调优技术,可以为你的升职加薪加一把火。 基于上述4点,我录制的全新视频将有这些特点: 1. 快速入门, 2. 实战项目, 3. 驱动大全, 4. 专题, 5. 授人以渔, 6. 要做任务 另外,我们会使用多款芯片同时录制,先讲通用的原理,再单独讲各个板子的操作。 这些芯片涵盖主流芯片公司的主流芯片,让你学习工作无缝对接。 1.快速入门 入门讲究的是快速,入门之后再慢慢深入, 特别是对于急着找工作的学生,对于业余时间挑灯夜读的工作了的人,一定要快! 再从裸机、U-boot、内核、驱动这样的路线学习就不适合了,时间就拉得太长了。 搞不好学了后面忘了前面。 并且实际工作中并不需要你去弄懂U-boot,会用就行:U-boot比驱动还复杂。 讲哪些内容? 怎么讲呢? 混着讲 比如先讲LED APP,知道APP怎么调用驱动,再讲LED硬件原理和裸机,最后讲驱动的编写。 这样可以快速掌握嵌入式Linux的整套开发流程, 不必像以前那样光学习裸机就花上1、2个月。 而里面的裸机课程,也会让你在掌握硬件操作的同时,把单片机也学会了。 讲基础技能 中断、休眠-唤醒、异步通知、阻塞、内存映射等等机制,会配合驱动和APP来讲解。 这些技能是嵌入式Linux开发的基础。 而这些驱动,只会涉及LED、按制、LCD等几个驱动。 掌握了这些输入、输出的驱动和对应的APP后,你已经具备基本的开发能力了。 讲配置 我们从厂家、从方案公司基本上都可以拿到一套完整的开发环境,怎么去配置它? 需要懂shell和python等配置脚本。 效果效率优先 以前我都是现场写代码、现场写文档,字写得慢,降低了学习效率。 这次,效果与效率统一考虑,不再追求所有东西都现场写。 容易的地方可先写好代码文档,难的地方现场写。 2.实战项目 会讲解这样的涉及linux网关/服务器相关项目(不限于,请多提建议):                      定位为:快速掌握项目开发经验,丰满简历。 涉及的每一部分都会讲,比如如果涉及蓝牙,在这里只会讲怎么使用,让你能写出程序;如果要深入,可以看后面的蓝牙专题。 3. 驱动大全 包括基础驱动、高级驱动。 这些驱动都是独立成章,深入讲解。 虽然基础驱动弱化了,但是作为Linux系统开发人员,这是必备技能,并且从驱动去理解内核是一个好方法。 在讲解这些驱动时,会把驱动的运行环境,比如内核调度,进程线程等概念也讲出来,这样就可以搭建一个知识体系。 没有这些知识体系的话,对驱动的理解就太肤浅了,等于在Linux框架下写裸机,一叶障目,不见泰山。 定位为:工具、字典,用到再学习。 4. 专题 想深入学习的任何内容,都可独立为专题。 比如U-boot专题、内核内存管理专题、systemtap调试专题。

    4898 人正在学习 去看看 韦东山

关于系统时钟慢的解决方法,芯片是r8610,内核是linux-3.0.4.下面是自己的解决过程,记录下来,希望对也做这一块的同学有所帮助,错误之处,在所难免,欢迎指出啊。

  2月前移植的linux-3.0.4又有问题啦,系统时钟比硬件时间慢,而且慢的很多。

  今天又听到消息啦,系统时钟慢。于是我那一台设备,接串口,验证。

  首先date设置系统时钟,然后hwclock -w同步。然后计时。经过验证,结论如下:

  大概每30分钟慢236s,也就是说每7.6s就会慢1s,12.7%。我靠,慢的也太厉害啦。

  首先,我怀疑添加的驱动有问题,把驱动,一些应用都关了。只跑系统。

  继续测试,涛声依旧啊。基本一样。

  linux系统时间和硬件时间是有一些偏差,由于内核定时器,锁机制的应用,是可能产生一些差距,但是这12.7%确实有点高啊。

  先google查找,看看有没有预见同样情况的,一查不要紧,这问题很多啊,看样linux系统的时间确实和硬件时间有一定差距不是个案啊。解决方法一般有下面两种:

  1 定时同步,也就是每隔一定时间,进行一次hwclock -s

  2 用buxybox提供的adjtimex来调时间

  第一种方案,首先肯定的是我这里是可以借鉴的,但是每分钟慢7或者8秒,这个同步周期是不得很短啊。尽管设备对时间要求不是非常严格,但是也不能每分钟有7秒的差距啊。再说每10秒同步一次也不合适啊。

  第二种方案,编译完busybox后,用这个命令调时间的话,-t和-f参数是有范围的。我设置参数达到极限值,确实有所改观,但是只能达到每30分钟慢72秒,这也不小啊。

  然后我看了看,别人用这两种方法来调试系统时间,一般是差距不很大的情况。我感觉应该是我的系统是有问题的,即使通过同步做的表面上看起来时间差不多,但是这个时间差距这么大会不会有其它潜在的风险呢?

  本着负责的态度来重新看待这个问题,不能只停留在解决的层面,要找到原有才是硬道理啊。

  首先,给芯片提供商打个电话,确定一下。芯片厂商一个FAE接我的电话,说这个芯片支持从网上下载的标准内核,任何都不用修改,我再三确定,对方很负责任的告诉你,没有任何问题,他们都这么用。我问他们有没有验证过,对方也是很负责任的告诉我在他们的板子上根本就没有这问题,肯定没有这问题。

  停了对方这么肯定的回答,我想到三个方面:

  1 问题肯定有

  2 可能是我的内核编译选项有不合理的地方

  3 我们的硬件和厂商的提供的板子有区别

  第一步,查看内核选项,只要和时间,定时器,RTC,hwclick,HZ有关的选项我都仔细的看了看。应该没有错误的地方。然后抱着不太相信自己,相信FAE的态度把一些选项修改,再测试。还是那样。问题没有解决。

  第二步,把厂商提供的板子的pdf版原理图拿来看看,和我们的板子很大部分都一样。尤其时钟部分肯定一样。

  没有进展,实在没有办法,只能看原理图+datasheet啦。我们采用的这颗cpu是r8610,和pc486完全兼容的。

  看系统tick这一块,这破datasheet说的也太含糊啦,关键细节地方都没有提及,估计由于和486兼容,让参考相关486芯片呢吧。

  r8610的系统时钟是有82c54提供的,82c54确实是pc也采用的定时芯片,一般情况用timer0方式3产生固定838ns周期方波来实现。默认采用14.31818m的外部时钟来提供,根据写到芯片计数器里的初值来计算有多少个838ns的时间间隔来产生irq0,而这个irq0产生的频率就是linux系统里的HZ。例如,在我的系统里HZ设置为250,那么1秒内irq0就要产生250次中断。这个值也就是我们查看/proc /interrupt所显示的第一行的内容。

  在linux-3.0.4内核目录下的include/linux目录下的timerx.h这个文件里有这么一个定义:

  #define PIT_TICK_RATE 1193182ul

  这个就是系统默认使用的定时芯片的采用的计数时钟,

  在linux-3.0.4内核目录下的arch/x86/include/asm/timex.h文件有这样的定义:

  #define CLOCK_TICK_RATEPIT_TICK_RATE

  在linux-3.0.4内核目录下的include/linux目录下的jiffies.h文件里有这么一个宏:

  #define LATCH ((CLOCK_TICK_RATE + HZ/2)/HZ,而这个值就是要写入定时器的初始值。我根据我的环境计算了一下,

  (1193182+250/2) /250 = 4773.228,这个值写入82c54,这个值也就是说82c54需要经过这么多个838ns的周期才产生一次irq0中断。两次中断之间的时间间隔是:4773.228×838(ns)= 3999965.064.这个值应该就是HZ的倒数。即3999965.064×250应该等于1.而实际计算结果是999991266,基本相等,说明在这个芯片上的linux系统定时器和硬件定时器产生联系的地方就是这里。

  上面的计算是理想状态,也就是说如果硬件按照上面的计算过程来运行的话,系统时间也是会有时间差距的,但是很小,以为我们实际计算结果是999991266,每秒还慢8734ns,但是那已经很小了。

  我首先考虑到的就是我的定时器时钟可能不是1193182。于是,继续研读r8610 datasheet,看其中关于clock source的选择,可惜,没有提到。于是继续google,打不开啦,被和谐啦,baidu,别用啦,更本找不到啊。等会。抽烟,喝杯茶。30分钟以后,google 查到下面,对我有十分巨大的提示啊:

  8254 工作时钟的来历最初在对个人电脑设计时,出于成本考虑,主板上采用了当时广泛应用于电视机且价格最便宜的一个 14.31818MHz 振荡器,该振荡器的频率远高于系统其他器件所需要的频率。所以设计师采用 3 分频后得到 4.77MHz 驱动中央处理器 8088 ;采用 4 分频后得到 3.58MHz 用于驱动彩色图形适配器;最后将系统各种频率的基频 1.1931816 MHz (各种频率的最大公约数,即 12 分频) 作为系统可编程定时器芯片的输入时钟。为了保持兼容性,可编程定时器 8254 就一直采用这个频率的时钟作为输入。

  也就是说,这就是14.31818和1193182的关系,是12分频啊。在r8610 datasheet上没有用到外部的14.31818,而是内部的12.5m啊。并且在一个并不起眼的地方发现有下面一句话:

  NOTE: the following clock is 14.318MHZ/12(external) or 12.5MHZ/12(internal)

  我的个妈呀,不容易啊,终于找到了啊,我要找的就是这一句啊。严重鄙视自己对datasheet的粗心阅读。

  也就是说在r8610这颗cpu里面,82c54采用的clk是12.5M/12 = 1041667.

  在修改以前,大概计算一下:1193182-1041667/1193182 = 0.126983 = 12.7%。我靠,太正了,啥也别说了,都是眼泪。

  赶紧的,注释,修改,测试。

  时间ok啦。

  以上就是我调试系统时间慢的过程,总结:

  1 如果时间慢的很多,可以从硬件入手看看时钟设置是否正确

  2 阅读datasheet一定要仔细,一字不落的阅读

  3 不要盲目相信FAE

  希望以上内容对大家有所帮

2019-05-28 21:31:27 weixin_42167759 阅读数 528
  • 韦东山升级版嵌入式视频之快速入门

    韦东山老师为啥要录升级版嵌入式视频? 200x年左右,嵌入式Linux在全世界、在中国刚刚兴起。 我记得我2005年进入中兴时,全部门的人正在努力学习Linux。 在2008年,我写了一本书《嵌入式Linux应用开发完全手册》。 它的大概内容是:裸机、U-boot、Linux内核、Linux设备驱动。 那时还没有这样讲解整个系统的书, 芯片厂家Linux开发包也还不完善,从bootloader到内核,再到设备驱动都不完善。 有全系统开发能力的人也很少。 于是这书也就恰逢其时,变成了畅销书。 我也根据这个思路录制了视频:裸机、U-boot、Linux内核、Linux设备驱动。 收获些许名声,带领很多人进入Linux世界。 11年过去了,嵌入式Linux世界发生了翻天覆地的变化 ① 基本系统能用 芯片厂家都会提供完整的U-boot、Linux内核、芯片上硬件资源的驱动。 方案厂家会做一些定制,比如加上某个WIFI模块,会添加这个WIFI模块的驱动。 你可以使用厂家的原始方案,或是使用/借鉴方案商的方案,做出一个“能用”的产品。 ② 基础驱动弱化;高级驱动专业化 基础的驱动,比如GPIO、UART、SPI、I2C、LCD、MMC等,有了太多的书籍、视频、示例代码,修修改改总是可以用的。 很多所谓的驱动工程师,实际上就是“调参工程师”。 我们群里有名的火哥,提出了一个概念:这些驱动就起一个“hardware enable”的作用。 高级的驱动,比如USB、PCIE、HDMI、MIPI、GPU、WIFI、蓝牙、摄像头、声卡。 体系非常复杂,很少有人能讲清楚,很多时候只是一笔带过。 配置一下应用层工具就了事,能用就成。 这些高级驱动,工作中需要专门的人来负责,非常专业。 他们是某一块的专家,比如摄像头专家、音频专家。 ③ 项目为王 你到一个公司,目的是把产品做出来,会涉及APP到内核到驱动全流程。 中小公司玩不起华为中兴的配置,需要的是全面手。 大公司里,只负责很小很小一块的镙丝钉,位置也不太稳固啊。 所以,如果你不是立志成为某方面的专家,那就做一个全栈工程师吧。 ④ 调试很重要 都说代码是3分写7分调,各种调试调优技术,可以为你的升职加薪加一把火。 基于上述4点,我录制的全新视频将有这些特点: 1. 快速入门, 2. 实战项目, 3. 驱动大全, 4. 专题, 5. 授人以渔, 6. 要做任务 另外,我们会使用多款芯片同时录制,先讲通用的原理,再单独讲各个板子的操作。 这些芯片涵盖主流芯片公司的主流芯片,让你学习工作无缝对接。 1.快速入门 入门讲究的是快速,入门之后再慢慢深入, 特别是对于急着找工作的学生,对于业余时间挑灯夜读的工作了的人,一定要快! 再从裸机、U-boot、内核、驱动这样的路线学习就不适合了,时间就拉得太长了。 搞不好学了后面忘了前面。 并且实际工作中并不需要你去弄懂U-boot,会用就行:U-boot比驱动还复杂。 讲哪些内容? 怎么讲呢? 混着讲 比如先讲LED APP,知道APP怎么调用驱动,再讲LED硬件原理和裸机,最后讲驱动的编写。 这样可以快速掌握嵌入式Linux的整套开发流程, 不必像以前那样光学习裸机就花上1、2个月。 而里面的裸机课程,也会让你在掌握硬件操作的同时,把单片机也学会了。 讲基础技能 中断、休眠-唤醒、异步通知、阻塞、内存映射等等机制,会配合驱动和APP来讲解。 这些技能是嵌入式Linux开发的基础。 而这些驱动,只会涉及LED、按制、LCD等几个驱动。 掌握了这些输入、输出的驱动和对应的APP后,你已经具备基本的开发能力了。 讲配置 我们从厂家、从方案公司基本上都可以拿到一套完整的开发环境,怎么去配置它? 需要懂shell和python等配置脚本。 效果效率优先 以前我都是现场写代码、现场写文档,字写得慢,降低了学习效率。 这次,效果与效率统一考虑,不再追求所有东西都现场写。 容易的地方可先写好代码文档,难的地方现场写。 2.实战项目 会讲解这样的涉及linux网关/服务器相关项目(不限于,请多提建议):                      定位为:快速掌握项目开发经验,丰满简历。 涉及的每一部分都会讲,比如如果涉及蓝牙,在这里只会讲怎么使用,让你能写出程序;如果要深入,可以看后面的蓝牙专题。 3. 驱动大全 包括基础驱动、高级驱动。 这些驱动都是独立成章,深入讲解。 虽然基础驱动弱化了,但是作为Linux系统开发人员,这是必备技能,并且从驱动去理解内核是一个好方法。 在讲解这些驱动时,会把驱动的运行环境,比如内核调度,进程线程等概念也讲出来,这样就可以搭建一个知识体系。 没有这些知识体系的话,对驱动的理解就太肤浅了,等于在Linux框架下写裸机,一叶障目,不见泰山。 定位为:工具、字典,用到再学习。 4. 专题 想深入学习的任何内容,都可独立为专题。 比如U-boot专题、内核内存管理专题、systemtap调试专题。

    4898 人正在学习 去看看 韦东山

1、localtime是 把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间;

2、gmtime函数转换后的时间没有经过时区变换,是UTC时间 ;

3、localtime比uct时间(即世界标准时间)慢8个小时;

Linux —— 时间问题(GMT,UTC,DST,CST,CET表示什么)

4、对比代码如下:

#include <stdio.h>
#include <time.h>

int main(void)
{
	time_t stTime = {0};
	struct tm *stTm = NULL;

	stTime = time(NULL);
	
	//localtime()
	stTm = localtime(&stTime);
	printf("after localtime,time is:%4d-%02d-%02d %02d:%02d:%02d\n",
		stTm->tm_year+1900, stTm->tm_mon+1, stTm->tm_mday,
		stTm->tm_hour, stTm->tm_min, stTm->tm_sec);
	
	stTm = gmtime(&stTime);
	printf("after gmtime,time is:%4d-%02d-%02d %02d:%02d:%02d\n",
		stTm->tm_year+1900, stTm->tm_mon+1, stTm->tm_mday,
		stTm->tm_hour, stTm->tm_min, stTm->tm_sec);
	
	return 0;
}

 

5、结果显示:

[root@localhost 20190528]# ./local_gm_time 
after localtime,time is:2019-05-28 21:30:00
after gmtime,time is:2019-05-28 13:30:00 

Linux

阅读数 19

初识Linux

阅读数 231

没有更多推荐了,返回首页