首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写自定义的PCIe热插拔Linux2.6.x驱动程序

编写自定义的PCIe热插拔Linux2.6.x驱动程序
EN

Stack Overflow用户
提问于 2009-06-25 09:36:58
回答 2查看 2.1K关注 0票数 1

我正在为自定义设备编写一个PCIe驱动程序/模块。由于该设备是可热插拔的,它可以在任何时候消失。

这里我是如何设置pci_driver结构的:

代码语言:javascript
复制
struct pci_driver my_pci_driver = {
  .name = "my_pci_driver",
  .id_table = ids,
  .probe = "my_pci_driver_probe",
  .remove = "my_pci_driver_remove"
};

但我不知道如何正确处理remove事件。当调用.remove函数时,有几个进程使用驱动程序打开句柄并执行多个ioctl。

那么,什么是正确的方式来处理删除一个设备?如何安全地等待当前运行的ioctl完成,然后正确地从我的驱动程序中删除设备?

EN

回答 2

Stack Overflow用户

发布于 2009-06-25 15:24:56

这是一个非常广泛的问题。您需要以支持设备删除的方式来设计代码。您可以从任何usb驱动程序/usr/src/linux/驱动器/usb/.它是可以自然移动的。

评论答复:

不,不是,USB子系统不负责驱动程序中的同步。有很多方法来同步参考计数,您可以使用互锁操作或使用自旋锁或.

在Windows上有一个很好的描述同步原语的文档,术语有点不同,但概念是相同的,所以我推荐。

票数 0
EN

Stack Overflow用户

发布于 2009-11-09 09:04:57

因为硬件被移除并不意味着您的驱动程序被移除。所以你需要知道你的硬件是否在那里。

然后,您应该结束所有正在运行的事务。这意味着无论您在文件操作中做什么操作,它应该在某个点结束并返回一个错误代码,您可以返回到用户代码。对于USB设备,有一个功能为您这样做。

用户空间代码能够在设备被删除后进行读写/ioctl操作。这些系统调用知道硬件已经不在了,所以它们应该返回一个错误代码。

任何正常的应用程序都会退出或关闭相应的文件描述符。因此,应在开放/释放的方法中进行重新计算。无论您已经分配了什么资源,在您的设备被移除之后,它们仍然可以存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1042911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档