ユーザスペースから読み書きできるカーネルスペースデバイスドライバを作成しています。開いた、読まれた、解放の操作はすべて完全に機能します。私が抱えている問題は、デバイスドライバにアクセスして何かを書く必要があるユーザスペースコードです。Linuxデバイスドライバに書き込むと無限ループが発生する
ユーザスペースプログラムは、1).txtファイルに書き出します(コンソールにaを出力して完了したことをユーザーに知らせます)。2)デバイスドライバに出力します。ユーザーにも完了したことを知らせるテキスト)。以下は
フルにユーザ空間のコードです:
int main() {
FILE *fp;
fp = fopen("./test.txt","w");
fputs("Test\n", fp);
fclose(fp);
printf("Printed to txt\n"); //Prints normally.
fp = fopen("/dev/testchar", "w");
fputs("Test\n", fp);
fclose(fp);
printf("Printed to dev\n"); //Never gets to this point
return 0;
}
私がコンパイルしたコードを実行すると、プログラムが
Printed to txt
、ちょうどCtrl + Cキーが呼び出されるまでハングを吐き出します。それは第二のfputs()
を越えることはありません。
kern.log
を監視している間は、デバイスドライバに書き込むための無限の呼び出しがあります。ここで
は、私は、デバイスドライバから該当するコードを抽出しています
static char msg[256] = {0};
static struct file_operations fops =
{
.write = dev_write
};
static ssize_t dev_write(struct file *file, const char *buf, size_t len, loff_t *ppos)
{
sprintf(msg, "Input:%s, Chars:%lu\n", buf, len);
printk(KERN_NOTICE "%s\n", msg);
return 0;
}
uname -r: 4.10.0-38-generic
gcc -v: gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)
私の質問は:への書き込み時にプログラムが無限ループに立ち往生している理由デバイス、どうすれば修正できますか?
ありがとうございます。どんな助けでも大歓迎です。
これはわかりません。 クローズ操作を処理する必要はありませんか? 'file_operations Fops'のhttps://linux.die.net/lkmpg/x892.html' .release' '.write'を見てください –