2012-05-05 13 views
0

私はLinuxカーネルモジュールを開発しており、シリアルポート(文字)からデータを読み込む必要があります。 シリアルポートからの入力として文字(例: 'D'、 'T'、 ' - ')を設定したいと思います。私は長い間 "inb(0x3f8)"と "termios"で試してみましたが、うまくいかなかったのです。私はあなたがカーネルスレッドで実行した場合、それを使用することが可能であると考えカーネルモード(Linux)でシリアルポートからデータ(文字)を読み取る方法は?

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

コードをユーザー空間で実行して既存のシリアルドライバを使用することはできませんか?非常に賢い人々の中には、いくつかのシリアルポートチップセット用のシリアルドライバを書いている人がいます。自分の仕事を複製しようとしないと、あなたは多くの時間を節約できます。 – larsks

+0

私は、ユーザーとカーネルのどちらかのスペースを試しましたが、私は既存のシリアルドライバを使用しています。さらに私は "/ dev/ttyS0"というファイルに書き込むことができますが、froMを読み込もうとするとプログラムがブロックされたり、セグメントエラーが発生したりします。私はそれがポーリング、割り込みとスレッドで動作するはずだと思いますが、私はどのようにわからないのですか? :-( –

答えて

1

:しかし、私はVBoxの構成上のVirtualBox にゲストとしてインストールされたシステムとしてのUbuntu 10.10持って、私は設定 「OUTB」と正しくデータ作業を書きますfilp_open、またはファイル操作ポインタを得るための他の関数を呼び出すことができます。そして、file_operationsポインタを介して「通常の」呼び出しを使用することができます。

このだけ作品あなたは「通常」のコンテキストで実行している場合 - 「ユーザー」プロセスまたはの可能性カーネルスレッドあなたには、いくつかの「異例にいる場合、それは間違いなく正常に動作しません"コンテキスト。

通常のタスクでは、これらの呼び出しはブロックされる可能性があり、すべてが「うまくいく」でしょう。おもう。私はソケットでそれを試して、それは動作します。

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

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

+0

おかげさまで、これらのソリューションは、新しい開発者がカーネルの開発に非常に難しいようです。 –

+0

ありがとう、これらのソリューションは、新しい開発者がカーネルの開発に非常に難しいようです。私はゲストとホストの間で共有された "D:\ Oracle"(シリアルポートリダイレクションのファイルを含む)フォルダを作成し、私は –

+0

" 「fopen」と「fgets」 –

関連する問題