シリアルポートに直接書き込む必要があります (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 の有効化/無効化など) を試しましたが、うまくいきませんでした。