0

Linux カーネル モジュールを開発しており、シリアル ポート (文字) からデータを読み取る必要があります。シリアル ポートからのエントリとして文字 (例: 'D' 、'T' および '-') を設定し、これらのエントリを読み取りたいです。「inb(0x3f8)」と「termios」で長時間試してみましたが、うまくいきませんでした。ただし、データの書き込みは「outb」で正しく機能します。設定したVBox構成のVirtualBoxにゲストとしてインストールされたシステムとしてUbuntu 10.10があります。

   activated serial port
   port number :   COM1    IRQ 4  PORT I/O : 0x3f8
   Port/path   D:\Oracle\serial.txt
4

1 に答える 1

1

カーネル スレッドで実行する場合、filp​​_open またはその他の関数を使用してファイル操作ポインターを取得し、file_operations ポインターを介して「通常の」呼び出しを使用できると思います。

これは、「ユーザー」プロセスまたはおそらくカーネルスレッドの「通常の」コンテキストで実行している場合にのみ機能します。「異常な」コンテキストにいる場合は、正しく機能しません。

通常のタスクでは、これらの呼び出しがブロックされる可能性があり、すべてが「正常に機能」します。おもう。ソケットで試してみましたが、動作します。

カーネル スレッドは、ほとんど (またはまったく) ファイル ノードを含まない名前空間を取得する可能性があるため、マウントされたファイル システムに問題がある可能性があります。これは、ユーザー空間でデバイスを開いて何らかの方法で渡す方が簡単であることを意味する場合があります。

また、カーネルのスタック サイズの制限にも注意してください。

于 2012-05-07T01:32:43.240 に答える