对linux-0.11的一段读CMOS代码的解释

27 views
Skip to first unread message

Chunis Deng

unread,
Apr 21, 2012, 10:03:42 AM4/21/12
to xv6...@googlegroups.com
前段时间发现有人在CU上问如下一段linux-0.11代码 (位于文件init/main.c):

#define CMOS_READ(addr) ({ \
    outb_p(0x80|addr,0x70); \
    inb_p(0x71); \
})
问题:CMOS RAM共有0x00 -- 0x7F共128个字节,0x80|addr是什么意思?我觉得应该是0x7F&addr,限制范围在[0x00,0x7F]中

赵炯的书也没给出解释。不过我正好前段时间在看xv6的代码时看到了这个问题的解答:
    在操作端口0x70的时候,输入值的最高位(即0x80 = 0b10000000)控制了CPU的NMI的启用与否;
    这是一个设置或者不设置的问题,没办法保持其原来的值不变
    用0x80|addr表示关闭NMI

大家可以看看CU该帖子:http://bbs.chinaunix.net/thread-3700969-1-4.html
或者更详尽的CMOS相关知识:http://wiki.osdev.org/CMOS
Reply all
Reply to author
Forward
0 new messages