4.4.3 实时时钟的驱动程序

GoldFish虚拟处理器的实时时钟(RTC)部分的驱动程序,相关文件如下所示:

drivers/rtc/rtc-goldfish.c

GoldFish的实时时钟驱动程序在sys文件系统的driver路径为:

    # ls /sys/bus/platform/drivers/goldfish_rtc
    goldfish_rtc
    uevent
    unbind
    bind

这是一个标准注册的rtc设备,由于是系统中唯一的RTC设备,其在用户空间的设备节点为/dev/rtc0。RTC驱动的主要内容是读取时间,如下所示:

    static int goldfish_rtc_read_time(struct device *dev, struct rtc_time *tm)
    {
        int64_t time;
        struct goldfish_rtc    *qrtc = platform_get_drvdata(to_platform_device(dev));
        time = readl(qrtc->base + TIMER_TIME_LOW);
        time |= (int64_t)readl(qrtc->base + TIMER_TIME_HIGH) << 32;
        do_div(time, NSEC_PER_SEC);
        rtc_time_to_tm(time, tm);
        return 0;
    }

GoldFish的实时时钟驱动由仿真器的虚拟环境触发中断,并填充相关的寄存器,在驱动程序中取得信息。