【问题标题】:What needs to be done to write interrupt handler on linux without actual hardware?在没有实际硬件的情况下在 linux 上编写中断处理程序需要做什么?
【发布时间】:2020-10-20 02:55:42
【问题描述】:

是否有任何硬件模拟器可以在 Linux 上产生硬件中断。我正在寻找可以处理硬件中断、读取或写入硬件内存、延迟工作、上半部分和下半部分处理等的设备驱动程序。基本上,希望学习端到端的完整设备驱动程序。但是障碍是——如何模拟硬件。我真的需要一些可以产生中断的硬件吗?我浏览了 LDD3 书,但他们在那里使用skull - 一块模拟为硬件的内核空间内存,但这不能产生中断,或者它可以吗?请给点光。

【问题讨论】:

  • 您可以编写自己的操作系统并使用 qemu 模拟器。
  • 您可以通过连接来自 any 真实中断的回调来模拟中断。通常是定时器中断。事实上,有些设备没有中断,但驱动程序通过执行我刚才提到的操作来模拟它们。或者,您可以从头开始编写驱动程序并将其加载到您在虚拟机中启动的 [您的] 定制构建的 linux 内核 [代替现有/标准驱动程序](例如 virtualboxvmware 等) .这样,您就可以进行实验而不会真正伤害任何东西。
  • 非常确定主机上的 VHOST 驱动程序会在客户机的 VIRTIO 驱动程序中生成模拟中断。
  • 如果设备不生成任何异步事件,为什么还需要中断处理程序?

标签: c linux driver device


【解决方案1】:

LDD3 的头骨驱动程序不会产生中断,因为没有实际的硬件来产生它们。

设备驱动程序中断是一种机制,它允许 CPU 开始处理其他任务,因为正在执行的操作将由异步中断处理。

例如,如果没有 dma 正在使用,则软盘驱动器中断的 CPU 是读取磁盘传输的每个字节。如果正在使用 DMA,磁盘将直接传输以 ram 传输字节,直到实际传输一个完整的块(或一组)。然后会出现一些硬件中断。

串行接口以编程方式中断您的计算机。当单个字符到达时,当特定字符到达时(比如\r 字符)。

LDDP 向您展示了 linux 设备驱动程序是如何工作的.....但是由于本书无法假设您有任何具体的设备,因此它无法选择合适的硬件作为可用的(奇怪,因为通常每台 pc 都有并行端口或串行端口)我认为LDDP3有一些使用并行端口的驱动程序,但是您必须在开始中断硬件之前继续阅读本书。

必须将异步中断编程到设备中(设备必须知道它必须在传输结束时生成中断),因此必须激活它们。为了正确捕获中断,必须第一个中断发生之前安装中断处理程序,否则您将进入永远不会出现中断的状态,因为它到达并丢失了。最后,必须确认中断。一旦您存储了来自设备的数据,就必须重新激活它们,这样可能会再次发生另一个中断。您需要了解必须保护您的进程不访问与中断处理程序共享的数据结构以及如何执行此操作。所有这些都在书中进行了解释....但您必须阅读它,并且不要停留在骷髅驱动程序中,这是本书中开发的第一个驱动程序。

顺便说一下,用户模式的kill(2)sigaction(2)系统调用是非常接近硬件中断世界的方法,因为它们是异步的,你可以在进入临界区之前阻止它们发生,您可以通过kill(2)从另一个程序外部处理您的流程来模拟它们。您不会看到差异,但不会导致整个系统崩溃,而只会杀死一个挂起的进程。

【讨论】:

    猜你喜欢
    • 2015-11-14
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    相关资源
    最近更新 更多