私は自分の問題を最初から説明しようとしています。私は Linux ダイバー開発の初心者なので、私のプロジェクトでの考慮事項についての問題点を指摘してください。
現在、モデム用の Linux ドライバーを開発していますが、典型的なものではありません。モデムとしてではなく、ネットアダプタとして機能することを願っています。シリアルポートでパソコンと接続。問題の性質上、USB シリアル コンバータを使用する必要があります。答えのほとんどは、代わりにユーザー空間ドライバーを使用することを提案しています。ただし、eth0 のようなネットワーク インターフェイスを提供したいので、カーネルで作成する必要があります。ttyUSB0 ファイルを開く/読み取る/書き込む以外に、この問題を解決する方法は他にありません。
私は今、このようなコードを使用しています
struct file *f;
mm_segment_t oldfs;
struct tty_struct *tty;
struct termios term;
unsigned char buffer[255];
f=filp_open("/dev/ttyS0",O_RDWR | O_NDELAY,0);
oldfs=getfs();
set_fs(KERNEL_DS);
f->f_pos=0;
tty=(struct tty_struct*)f->private_data;
tty->termios->c_flag=B9600 | CRTSCTS | CS8 | CLOCAL | CREAD;
この時点で tty->termios が NULL になっているため、最後の手順を実行できません。私がすることは:
struct ktermio term;
//setting the termio
tty->termios = &term;
その結果、設定がシリアル ポートに適用されません。まったく間違ったボーレートに変更しても、フラグメントを受信します。正しいものもあれば、そうでないものもあります。何が問題で、どうすればよいですか。