2

我需要直接写入串行端口(我正在尝试在 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 启用/禁用等),但没有运气。

4

0 回答 0