bochs给出"写入端口0xb004,忽略len 1"错误

时间:2014-09-23 09:14:39

标签: c kernel bochs

我正在尝试在我的内核开发研究中使用ACPI。当执行port_byte_out(0xB004, 0x0000 | 0x2000)代码时,bochs给出'写入端口0xb004且忽略len 1'错误。 C函数如下:

void port_byte_out(unsigned short port, unsigned char data) {
    __asm__("out %%al, %%dx" : : "a" (data), "d" (port));
}

该错误意味着什么?

1 个答案:

答案 0 :(得分:1)

我认为您打算使用asm指令outb而不是outoutb向端口输出一个字节,其中out写入一个2字节的字。考虑将代码更改为:

__asm__("outb %%al, %%dx" : : "a" (data), "d" (port));

虽然您使用第二个参数void port_byte_out(unsigned short port, unsigned char data)定义了函数unsigned char data,但您的示例port_byte_out(0xB004, 0x0000 | 0x2000)尝试将2字节字(short int)传递为dataport_byte_out建议您希望该函数输出字节0x0000 | 0x2000会被截断,因为它大于unsigned char。大多数编译器应该对此发出警告。

也许你打算有另一个功能:

void port_word_out(unsigned short port, unsigned short data) {
    __asm__("out %%ax, %%dx" : : "a" (data), "d" (port));
}

然后你可以把它称为:

port_word_out(0xB004, 0x0000 | 0x2000)