Linux字符设备驱动程序如何检测使用它的程序何时异常退出?
发布时间:2020-12-14 02:09:37 所属栏目:Linux 来源:网络整理
导读:我有一个 Linux角色设备驱动程序,它创建一个/ dev / mything条目,然后是一个打开设备并使用它的C / Qt程序.如果该程序正确退出,使用exit(),设备将关闭,驱动程序将自行重置.但是如果程序异常退出,通过segfault或SIGINT或其他东西,设备没有正确关闭. 我目前的
我有一个
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 }; 解决方法
没有必要进行这项测试;问题不在于程序终止异常(从驾驶员的角度来看,这与设备上的正常关闭完全相同),而是在设备的状态保持方面存在问题.换句话说,如果在程序崩溃的确切位置插入close(dev_fd)或甚至exit(0),则会遇到同样的问题.
您应该弄清楚您的驱动程序行为的哪个部分导致它保持繁忙状态并修复它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 不能为虚拟电脑 Kali-Linux-2019.2 打开一个新任务
- linux alsa音频中采样率fs、比特率BCLK 、主时钟MCLK关系
- linux – firmware:无法加载iwlwifi-8000C-25 / 26.ucode(
- linux – 为什么softirq用于高线程和高频率用途?
- linux – 无法使用useradd添加用户
- linux – 丢弃传入的UDP数据包而不读取
- LINUX入门:如何用 bash-support 插件将 Vim 编辑器打造成编
- LVM问题:在分配M时无法调整大小到N个范围
- linux – Lighttpd没有干净地重启(地址已经在使用中)
- linux – 少用于ubuntu的css(并自动编译)?