Linux驱动学习:平台设备总线详解

需积分: 5 0 下载量 171 浏览量 更新于2024-08-03 收藏 69KB DOCX 举报
"Linux驱动学习,平台设备总线,定时器,轮询,平台设备总线介绍,设备端,驱动端" 在Linux驱动开发中,平台设备总线(Platform Bus)是一种重要的概念,尤其在嵌入式系统中,它为那些无法直接挂载到物理总线(如SPI, IIC, USB)上的设备提供了一个统一的挂载点。平台设备总线并非实际的物理总线,而是一种抽象的逻辑总线,目的是为了简化设备管理,增强设备的兼容性和可插拔性。 在平台设备总线中,驱动程序被划分为两部分:设备端和驱动端。设备端包含了硬件相关的具体信息,如I/O地址、中断号等,而驱动端则提供了通用的代码框架,比如字符设备的注册和管理。在/Linux/sys/bus/platform/目录下,可以看到已挂载的设备端位于`devices`子目录,而驱动端位于`drivers`子目录。 在设备加载过程中,首先加载平台设备总线的驱动端。总线会自动扫描并尝试匹配已挂载的设备端。如果找到匹配的设备端,驱动端的探测函数(probe函数)会被自动调用,完成设备的初始化和功能启用。若没有找到匹配的设备端,驱动端则不会被激活。 在Linux驱动学习中,除了平台设备总线,还有其他关键的概念,如定时器和轮询机制。 定时器是驱动程序中常见的一种机制,用于在特定时间后执行某个操作。在Linux内核中,定时器基于全局变量`jiffies`来计时,通过`msecs_to_jiffies()`函数将毫秒转换为jiffies单位。核心结构体`struct timer_list`定义了定时器,其中包含超时函数及其参数。初始化定时器使用`init_timer`,激活定时器用`add_timer`,修改或重新设置定时器则用`mod_timer`,这实际上等同于先删除再添加(`del_timeradd_timer`)。 轮询机制则是另一种处理等待事件的方式。`poll`函数用于在指定时间内监控一组文件描述符(`struct pollfd`)的变化。当描述符状态改变或超时,`poll`函数会返回相应结果。如果描述符有事件发生,返回值是变化的描述符数量;如果没有事件或超时,返回0;如果出错,返回-1。在底层实现中,`poll_wait`函数用于将等待队列关联到文件描述符,使得在轮询期间,应用层可以被阻塞,直到有事件发生或超时。 通过深入理解这些概念,开发者可以更有效地编写和管理Linux驱动程序,确保系统对各种设备的正确识别和高效操作。