我正在尝试在内核开发研究中使用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)传递为data
。port_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)