(1) 从0x70设置要读取的偏移字节 outb(add,0x70)
从0x71中将此字节中的数据读出来 ret = inb(0x71)
若要设置偏移字节中的数据可用
outb(add,0x70); //设置要写入数据的地址
outb(val,0x71); //将数据写入此地址
(2) cmos中的字节偏移代表的含义看博客
https://blog.csdn.net/yldfree/article/details/85336540
(3)读出来的数据为BCD码即四位来表示一个10进制数。
比如BCD码值为0x18 四位表示一个10进制,那么转换成10进制就是 8 + 1*10 = 18
(4) 代码如下
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/inetdevice.h>
#define BCD_CHANGE(bcd)((bcd)=((bcd &0xf)) + ((bcd) >> 4)*10 )
static int __init test_init(void)
{
char year,month,data,hour,minute,second;
//read second
outb(0,0x70);
second = inb(0x71);
//read minute
outb(2,0x70);
minute = inb(0x71);
//read hour
outb(4,0x70);
hour = inb(0x71);
//read data