通常一个Linux运行的硬件平台包括一个处理器以及各种外围芯片。处理器与外围芯片之间通过接口连接。总线是传输通道。接口是连接规范。常用的接口包括I2C、SPI、并行接口、PCI、MDIO、I2S、串口等。处理器为各种接口提供了控制器,当然每种处理器提供的控制器的数量是不一样的。外围芯片通过标准接口协议与处理器通信。同一个总线上也可能挂载多个外围芯片,处理器对这些芯片进行分时控制。
为了提升代码的灵活性与扩展性,Linux的内核驱动代码的架构也遵循了功能分离原则,将处理器的接口控制器驱动与外围芯片驱动进行了分离。这样更换处理器只需要更换处理器对应的驱动,外围芯片不动;更换外围芯片,只需要更换外围芯片对应的驱动,处理器的接口控制器驱动不动,这给驱动开发人员带来了很多便利。另外,Linux驱动层可以划分为很多子系统,这些子系统有的是针对接口的,例如I2C驱动、USB驱动;也有的是针对功能的,例如RTC驱动、Framebuffer驱动。表6-1是Linux驱动层的子系统列表。
表6-1 Linux驱动层的子系统
(续)
(www.xing528.com)
处理器访问硬件设备主要通过以下几种方式:
(1)内存方式。外设的内存空间被映射到处理器的地址空间,处理器通过访问映射地址来访问硬件。
(2)I/O接口。处理器与I/O设备之间通过一定的接口连接,这个接口就是I/O接口。I/O接口中包括一组寄存器(Register)以及控制电路。这些寄存器可用来获取设备的状态信息,并设置参数。
(3)管脚(Pin)。管脚可以用来对芯片进行复位,并接收来自设备的中断信号。另外有些芯片还可以通过管脚进行简单的模式配置。
在x86体系中,I/O地址空间与内存地址空间是分开的,寄存器位于I/O空间时,称为I/O端口。在ARM等体系中,I/O通常是和内存统一编址的,也称为I/O内存,是系统中访问速度最快的内存。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。