我是初学者,我想了解设备驱动程序堆栈背后的概念?我知道设备驱动程序堆栈有三层,分别称为低级驱动程序、总线管理器和高级驱动程序。我的问题是,低级驱动程序和总线管理器是否存在单独的代码?如果它们存在,我在哪里可以找到 Linux 文件系统中硬件控制器的低级驱动程序?谢谢。
2 回答
Linux 内核具有三个设备驱动层,它们包含了内核的大部分设备驱动系统。总线驱动程序、协议驱动程序和设备驱动程序。让我们以您想要为其编写驱动程序的 SPI 设备为例(例如某种传感器)。通常,您将使用设备的数据表编写驱动程序,以查看其工作原理以及哪些寄存器保存哪些信息。这是在设备驱动程序中完成的。
设备驱动程序将命令发送到协议驱动程序,该协议驱动程序基本上定义了 SPI 命令的外观(您必须如何填充数据结构以读取/写入设备的寄存器)。
通常,您的 SOC 和传感器之间的 SPI 连接是通过 SOC 内部的一些特殊硬件完成的,以发送接收 SPI 命令。这是公交车司机。所以你在软件中有这样的东西:device_driver <-> protocol_driver <-> bus_driver
在硬件中它看起来像这样:SOC_SPI_module <-> sensor
这个想法是,从设备驱动程序中封装 SOC SPI 模块,因此当您编写设备驱动程序时,您不必关心用于访问设备的 SOC。
希望我能帮到你。
在 Linux 中,设备驱动程序通常是 C 语言中的面向对象编程。在此,我们将“module_init”作为构造函数,将“module_exit”作为析构函数进行更广泛的理解。
根据我的观点,“初始化和退出”过程与设备控制器硬件交互,因此可以称为“下层驱动程序”。控制通过“驱动程序的文件操作和工作进程”作为“总线管理器或进程管理器”传递给用户通过“ioctl进程”作为“高级驱动程序”进行控制。
如果用户必须与设备交互,则“ioctl 进程”<-->“文件操作”<-->“module_init & module_exit &部分文件操作”。.