1

こんにちは私は私のcharデバイスドライバからシリアルポートttyS0にデータを渡したいです。

私は読み書きをする簡単なcharドライバーモジュールを作成しました、そしてそれはそれをする私の最初のtymです..私はdebianゲストOSを使用しています...

例えば

echo "hello"> / dev / mydev

/ dev / mydevがデータ​​を受信すると、文字列を「hellotoo」のようなものに変更します。これは私のシリアルポート/ dev/ttyS0に渡されます。

文字列を変更するにはどうすればよいですか?.. mydev内でifステートメントを使用することは可能ですか?

例えば

if(string=="hello"){
alterstringTO: hello to;

pass "hello to" /dev/ttyS0;

like echoing in terminal..

echo "hello to" > /dev/ttyS0
}

それは可能ですか?...またはそれを行う他の方法はありますか?

ここにいくつかのコードがあります。

ssize_t dev_read(struct file *filp, char *buf, size_t clen, loff_t *f_pos){

short cnt =0;
while(clen && (msg[Pos]!=0))
{
    put_user(msg[Pos],buf++);
    cnt++;
    clen--;
    Pos++;
}
return cnt;

    }


   ssize_t dev_write(struct file *filp, const char *buf, size_t clen, loff_t *f_pos){

short dec = clen-1;
short cnt=0;
memset(msg,0,50);
Pos=0;
while(clen>0)
{
    msg[cnt++] = buf[dec--];
    clen--;
}
return cnt;
    }

前もって感謝します..

4

2 に答える 2

1

シリアルポートへの書き込みに関するコメント:

Linuxの基礎を思い出してください。すべてがLinuxのファイルです。プログラムからデバイスドライバーに書き込むには、書き込み用にファイルを開く必要があります。その後、必要なデータをfprintfできます。ユーザースペースからもそれを行うことができます(推奨される方法)

次のマニュアルページを参照してください。

  • man fopen
  • man fread / fwrite
  • 男fprintf
  • 男は閉じます
于 2012-08-24T06:37:32.517 に答える
1

質問と意図がはっきりしないように思われるので、ここで何を達成しようとしているのか正確にはわかりません。いくつかのガイダンスを提供しますが、質問を編集して読みやすくすることをお勧めします。

文字列を比較するためのスニペットが正しくありません。Cで文字列を比較する方法について詳しくは、こちらをご覧ください。

Cで文字列を変更することは、文字列の操作を開始するときに学習する基本的な操作です。これはあなたが始めるのに役立つはずです。

最後に、カーネルのプログラミングには特別な注意が必要であることに注意してください。小さなミスは、クラッシュやデータの損失につながる可能性があります。本当に必要な場合は、Linux Device Drivers 3rd Editionの本が無料で入手でき、さらに役立ちます。

于 2012-08-21T00:35:33.073 に答える