我需要直接写入串行端口(我正在尝试在 irq 处理程序中调试挂起,因此想要写入串行端口而不通过我假设使用中断的普通驱动程序)。
无论如何,我已经编写了这段小代码来尝试测试写入串行端口。我已经执行了
setserial /dev/ttyS0 uart none
从普通驱动程序释放端口。
编码:
#define PORT 0x3f8
static int test_module_init(void) {
if(request_region(0x3f8, 5, "test_module") == NULL) {
printk("<1> Failed to request_region\n");
} else {
printk("<1> Request region success!\n");
outb(0x00, PORT + 1); // Disable all interrupts
outb(0x80, PORT + 3); // Enable DLAB (set baud rate divisor)
outb(0x01, PORT + 0); // Set divisor to 1 (lo byte) 115200 baud
outb(0x00, PORT + 1); // (hi byte)
outb(0x03, PORT + 3); // 8 bits, no parity, one stop bit
outb(0x00, PORT + 2); // Disable fifo
outb('a', PORT);
outb('\n', PORT);
printk("<1> Sent a\n");
}
return 0;
}
它成功地请求了该区域,但我没有通过串行端口获得任何数据。有谁知道我做错了什么?我尝试了各种设置(fifo 启用/禁用等),但没有运气。