Ykt*_*ula 8 hardware assembly abstraction device-driver
我在*nix上看到的所有内容都是关于硬件的一组抽象,但我很好奇硬件是如何工作的.
我已经在汇编中进行了编程,但这仍然只是一组抽象.
处理器如何理解汇编操作码(如字节码)?
设备驱动程序如何工作(在较低级别(抽象)进行解释)?
哇......大问题!在最底层,处理器可以通过特殊指令(例如 x86 硬件上的 I/O 端口的 IN 和 OUT 和/或某种形式的内存映射 I/O 区域)与硬件进行通信。
不同的硬件对于如何通过这些通道进行通信有非常不同的协议/规则,如果不遵循这些规则,通常可能会严重失败。例如,输出设备每秒只能处理有限数量的传输,因此驱动程序需要在尝试传输任何内容之前检查硬件是否准备好发送更多数据。您通常还需要确保没有并发尝试访问同一设备,这是操作系统不允许用户模式程序随时直接访问硬件的众多充分理由之一。
为什么不看看 Linux 源代码来满足你的好奇心呢?
请注意,其中大部分是用 C 语言编写的,而不是汇编语言。没有严格要求使用汇编语言编写设备驱动程序,只要您有可用于与硬件通信的指令(这在 C 中是正确的,但在某些高级语言中可能并非如此)。