"内核的设-siemens_starter的使用说明"
在Linux驱动开发中,尤其是在2.6内核及以后的版本中,中断共享成为了一种普遍的策略,即使是在传统上不支持共享中断的总线上,如ISA总线。共享中断允许多个设备共享同一中断线,从而优化系统资源的利用。以下是对共享中断处理的详细说明:
1. **安装共享中断处理者**:
要安装一个共享中断处理者,你需要使用`request_irq`函数。在调用`request_irq`时,你需要在`flags`参数中设置`SA_SHIRQ`标志位,这表明该中断处理者将支持共享。同时,`dev_id`参数必须是唯一的,可以是模块的地址空间指针,但不能设置为NULL。这个标识符用于区分不同的设备和处理者。
2. **注册规则**:
- 如果两个或多个驱动尝试在同一中断线上注册,并且都设置了共享中断(`SA_SHIRQ`),则在卸载时可能会出现问题,因为NULL `dev_id`可能导致内核崩溃。因此,现代内核会在注册时检查`dev_id`,如果为NULL会发出警告。
- `request_irq`成功调用意味着中断线是空闲的,或者已注册的处理者同样指定该中断为共享。
3. **中断处理**:
当硬件触发共享中断时,内核会依次调用所有注册在这个中断线上的处理者,并将`dev_id`传递给每个处理者。每个处理者需要能识别自己的中断,并在设备未被中断时快速退出并返回`IRQ_NONE`。
4. **设备探测**:
由于在请求中断线之前内核无法帮助进行设备探测,因此驱动开发者通常需要硬件提供其正在使用的中断信息。如果没有这样的信息,驱动的探测可能失败,即使硬件实际上可以正常工作。大多数设计为中断共享的硬件会向处理器报告它使用的中断,减少了探测的需求。
在更广泛的Linux设备驱动框架中,驱动程序扮演着连接硬件和操作系统内核的角色。设备驱动分为内核模块和可加载模块,以便于更新和管理。设备可以是字符设备、块设备等,而驱动的安全性和版本兼容性也是开发过程中需要考虑的关键因素。内核模块的编写涉及到并发处理、内核符号表、初始化和清理过程,以及模块参数的设置。字符驱动程序的实现包括分配和释放设备编号、文件操作的定义以及读写操作的实现。这些概念和技巧在开发Linux驱动时至关重要。