本文共 1678 字,大约阅读时间需要 5 分钟。
hwclock用于操纵rtc中的时间
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
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
./configuremake -n > log//通过分析文件log,可以看到他切进了hwclock目录,并make all
cd hwclock;make all -n > log//分析log可以看出,编译了目录下的所有.c文件成.o,也编译了lib/strutils.c文件成.o,然后用libtool 链接了所有的.o文件成hwclock
//一般情况下,主文件的名字很有特点,就是和程序很类似.或者是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/