C - Bochs 给出"write to port 0xb004 with len 1 ignored"误差



我正在尝试在内核开发研究中使用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));
}

这个错误意味着什么?

我想您的意思是使用asm指令outb而不是out。CCD_ 4向端口输出一个字节,作为CCD_。考虑将代码更改为:

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

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

也许你想拥有另一个功能:

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

那么你可以称之为:

port_word_out(0xB004, 0x0000 | 0x2000)

相关内容

  • 没有找到相关文章