直接从CMOS读取系统时间

本文介绍了Linux 0.01内核中的代码段,用于从CMOS读取系统时间,并将读取到的时间转换为结构体tm。在`time_init`函数中,通过CMOS_READ宏获取秒、分钟、小时、日期和月份,并使用BCD_TO_BIN宏将BCD码转换为十进制。最后,将时间转换为kernel时间戳。
摘要由CSDN通过智能技术生成
following code come from Linux Kernel 0.01

#define CMOS_READ(addr) ({ /
outb_p(0x80|addr,0x70); /
inb_p(0x71); /
})

#define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10)

static void time_init(void)
{
    struct tm time;

    do {
        time.tm_sec = CMOS_READ(0);
        time.tm_min = CMOS_READ(2);
        time.tm_hour = CMOS_READ(4);
        time.tm_mday = CMOS_READ(7);
        time.tm_mon = CMOS_READ(8)-1;
        time.tm_year = CMOS_READ(9);
    } while (time.tm_sec != CMOS_READ(0));
    BCD_TO_BIN(time.tm_sec);
    BCD_TO_BIN(time.tm_min);
    BCD_TO_BIN(time.tm_hour);
    BCD_TO_BIN(time.tm_mday);
    BCD_TO_BIN(time.tm_mon);
    BCD_TO_BIN(time.tm_year);
    startup_time = kernel_mktime(&time);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值