CMOS存储的信息

CMOS信息

PC机的CMOS内存是由电池供电的64或128字节内存块,通常是系统实时钟芯片RTC(Real Time Chip)的一部分。有些机器还有更大的内存容量。该64字节的CMOS原先在IBM PC-XT机器上用于保存时钟和日期信息,存放的格式是BCD码。由于这些信息仅用去14字节,因此剩余的字节就可用来存放一些系统配置数据。

CMOS的地址空间在基本地址空间之外,因此其中不包括可执行代码。要访问它需要通过端口0x70、0x71进行。0x70是地址端口,0x71是数据端口。为了读取指定偏移位置的字节,必须首先使用OUT指令向地址端口0x70发送指定字节的偏移位置值,然后使用IN指令从数据端口0x71读取指定的字节信息。同样,对于写操作也需要首先向地址端口0x70发送指定字节的偏移值,然后把数据写到数据端口0x71中去。

main.c程序第70行语句把欲读取的字节地址与0x80进行或操作是没有必要的。因为那时的CMOS内存容量还没有超过128字节,因此与0x80进行或操作是没有任何作用的。之所以会有这样的操作是因为当时Linus手头缺乏有关CMOS方面的资料,CMOS中时钟和日期的偏移地址都是他逐步实验出来的,也许在他实验中将偏移地址与0x80进行或操作(并且还修改了其他地方)后正好取得了正确的结果,因此他的代码中也就有了这步不必要的操作。不过从1.0版本之后,该操作就被去除了(可参见1.0版内核程序drives/block/hd.c 42)。下表是CMOS内存信息的一张简表:

CMOS 64字节信息简表