首页 > 解决方案 > 在没有实际硬件的情况下在 linux 上编写中断处理程序需要做什么?

问题描述

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

标签: clinuxdriverdevice

解决方案


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

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

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

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

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

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

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


推荐阅读