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