博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hwclock源码分析
阅读量:4286 次
发布时间:2019-05-27

本文共 1678 字,大约阅读时间需要 5 分钟。

hwclock解析

hwclock用于操纵rtc中的时间


1/判断命名所属包

linux@ubuntu:~/project/tmp/300/drv/test_trc$ dpkg -S hwclockutil-linux: /etc/init.d/hwclock-saveutil-linux: /usr/share/man/man8/hwclock.8.gzutil-linux: /etc/init/hwclock.confutil-linux: /usr/share/doc/util-linux/README.Debian.hwclockutil-linux: /etc/init.d/hwclockutil-linux: /sbin/hwclockutil-linux: /etc/init/hwclock-save.conf

2/下载源码包

mkdir src;cd srcsudo apt-get source util-linux//会下载四个文件linux@ubuntu:~/project/tmp/src$ lltotal 6148drwxrwxr-x  3 linux linux    4096  4月 25 21:00 ./drwxrwxr-x 24 linux linux    4096  4月 25 20:55 ../drwxr-xr-x 31 root  root     4096  4月 25 21:00 util-linux-2.20.1/-rw-r--r--  1 root  root   101161  3月 30  2012 util-linux_2.20.1-1ubuntu3.diff.gz-rw-r--r--  1 root  root     2972  3月 30  2012 util-linux_2.20.1-1ubuntu3.dsc-rw-r--r--  1 root  root  6174190 12月 17  2011 util-linux_2.20.1.orig.tar.gz

3/打印运行make

./configuremake -n > log//通过分析文件log,可以看到他切进了hwclock目录,并make all

4/分析子目录的makefile

cd hwclock;make all -n > log//分析log可以看出,编译了目录下的所有.c文件成.o,也编译了lib/strutils.c文件成.o,然后用libtool 链接了所有的.o文件成hwclock

5/分析主文件

//一般情况下,主文件的名字很有特点,就是和程序很类似.或者是main.c之类的所以我们分析hwclock.c里面一开始就用了1. 用getopt_long对参数解析,并设置状态位2.根据不同的状态位执行不同的函数  2.1determine_clock_access_method函数确定了操作时钟的方法套件,可以用 probe_for_rtc_clock 或者 probe_for_cmos_clock  2.2systohw对应rtc这块用了probe_for_rtc_clock的套件,先获取时钟,然后再用ioctl  2.2systohw对应coms这块用了probe_for_cmos_clock 的套件,先获取时钟,然后在用coms_write  2.3注意一点,不管是coms还是etc,写入hw的时间都是BCD码.

##另:

  • 分析源码其实也可以从busybox分析.busybox好像主打rtc.而apt-get源上的兼容cmos和rtc

  • busybox的源码和从apt-get源下的源码是差不多的.只不过在打开etc设备的时候,busybox这块会一直检查是否EBUSY

  • 而在实际运行过程中,arm板上 hwclock -w 执行过程会长达十秒钟,因为卡在了打开设备失败.

  • 但是pc机上,运行hwclock却没有这种问题,大概是用的cmos,直接写了.


##参考文档

转载地址:http://hvigi.baihongyu.com/

你可能感兴趣的文章
OK6410A 开发板 (六) 4 OK6410A linux-5.11 镜像生成过程解析
查看>>
u-boot-2021.01引导linux-5.11(uImage)的过程详解
查看>>
OK6410A 开发板 (八) 1 linux-5.11 OK6410A ethernet dm9000 移植
查看>>
OK6410A 开发板 (八) 2 linux-5.11 OK6410A linux开发环境搭建
查看>>
OK6410A 开发板 (三) 27 u-boot-2021.01 boot 解析 U-boot 镜像运行部分 console
查看>>
市面上的单板计算机
查看>>
OK6410A 开发板 (八) 3 linux-5.11 OK6410A lcd wxcat43 移植
查看>>
OK6410A 开发板 (八) 4 linux-5.11 OK6410A 外围驱动
查看>>
OK6410A 开发板 (八) 18 linux-5.11 OK6410A start_kernel 功能角度 第二阶段之idle进程
查看>>
OK6410A 开发板 (八) 19 linux-5.11 OK6410A start_kernel 功能角度 第三阶段之init进程
查看>>
OK6410A 开发板 (八) 20 linux-5.11 OK6410A start_kernel 功能角度 第三阶段之kthreadd进程
查看>>
OK6410A 开发板 (八) 21 linux-5.11 OK6410A schedule 的 __switch_to 部分
查看>>
OK6410A 开发板 (八) 22 linux-5.11 OK6410A start_kernel 功能角度 第一阶段
查看>>
OK6410A 开发板 (八) 23 linux-5.11 OK6410A start_kernel 功能角度 第二阶段
查看>>
OK6410A 开发板 (八) 24 linux-5.11 OK6410A start_kernel 功能角度 第三阶段
查看>>
OK6410A 开发板 (八) 25 linux-5.11 OK6410A 进程角度 裸机和进程的区别
查看>>
getopt 解析
查看>>
文章标题
查看>>
linux前后台切换
查看>>
nmap
查看>>