エントリを作成する Linux キャラクター デバイス ドライバーと/dev/mything
、デバイスを開いて使用する C++/Qt プログラムがあります。そのプログラムが で正常に終了した場合exit()
、デバイスは閉じられ、ドライバーは適切にリセットされます。しかし、segfault などによってプログラムが異常終了した場合SIGINT
、デバイスは適切に閉じられません。
私の現在の回避策は、ドライバーが「オープン」状態で動かなくなった場合にドライバーをリロードすることです。
ドライバーの次の行は、デバイスを同時に使用する複数のプログラムを防止しようとします。
int mything_open( struct inode* inode, struct file* filp ) {
...
if ( port->rings[bufcount].virt_addr ) return -EBUSY;
...
}
次に、これはそれをクリーンアップします:
int mything_release( struct inode* inode, struct file* filp ) {
...
port->rings[bufcount].virt_addr = NULL;
...
}
呼ばれていると思いますexit()
が、そうではありません。この種の状況に対してドライバーをより堅牢にするにはどうすればよいですか?mything_release
SIGINT
編集:
ここに私が実装した操作があります。多分私は何かを逃していますか?
static struct file_operations fatpipe_fops = {
.owner = THIS_MODULE,
.open = mything_open,
.release = mything_release,
.read = mything_read,
.write = mything_write,
.ioctl = mything_ioctl
};