在Linux上有没有可以产生硬件中断的硬件模拟器?我希望编写设备驱动程序,可以处理硬件中断,读或写到硬件内存,延迟工作,顶部和底部处理,等等。基本上,希望学习完整的设备驱动程序端到端。但是障碍是什么--如何模拟硬件。我真的需要一些可以产生中断的硬件吗?我看过书中的LDD3,但他们正在使用skull -一块内核空间内存模拟作为硬件,但这不能产生中断,或者它可以?请给我点光。
发布于 2020-06-30 23:13:22
LDD3的skull驱动程序不会生成中断,因为没有实际的硬件来生成它们。
设备驱动程序中断是一种允许cpu开始处理其他任务的机制,因为正在执行的操作将由异步中断处理。
例如,软盘驱动器中断cpu,因为如果没有dma在使用,则磁盘传输的每个字节都被读入。如果正在使用DMA,磁盘将直接传输传输的字节,直到实际传输完整个块(或一组字节)。然后一些硬件中断就会进来。
串行接口在编程的基础上中断您的计算机。当单个字符到达时,当特定字符到达时(假设是\r字符)。
LDDP向您展示linux设备驱动程序的工作原理.....但由于这本书不能假设你有任何具体的设备,它无法选择合适的硬件作为可用的(奇怪的是,因为通常每台pc都有一个并行端口或串行端口)我认为LDDP3有一些使用并行端口的驱动程序,但在开始中断硬件之前,你必须继续阅读这本书。
必须将异步中断编程到设备中(设备必须知道它必须在传输结束时生成中断),因此必须激活它们。为了正确捕获中断,必须在第一个中断发生之前安装一个中断处理程序,否则您将处于一种永远不会出现中断的状态,因为它已经到达并丢失了。最后,必须确认中断。一旦你存储了来自设备的数据,它们必须被重新激活,所以另一个中断可能会再次发生。您需要了解您必须保护您的进程,使其不能访问与中断处理程序共享的数据结构,以及如何做到这一点。所有这一切都在书中解释过了……但是你必须阅读它,并且不要停留在这本书中开发的第一个驱动程序-- skull上。
顺便说一句,用户模式的kill(2)和sigaction(2)系统调用是一种非常接近硬件中断世界的方法,因为它们是异步的,您可以在进入临界区之前阻止它们发生,并且可以通过从另一个程序外部kill(2)进程来模拟它们。您看不出有什么不同,但您只需要杀死一个挂起的进程,而不是整个系统崩溃。
https://stackoverflow.com/questions/62646693
复制相似问题