摘要: 我们已经几次提及 shortprint 驱动; 现在是时候真正看看. 这个模块为并口实现一个非 常简单, 面向输出的驱动; 它是足够的, 但是, 来使能文件打印. 如果你选择来测试这个 驱动, 但是, 记住你必须传递给打印机一个文件以它理解的格式; 不是所有的打印机在给 一个任意数据的流时很好响应. 阅读全文
posted @ 2019-07-06 12:21 樊伟胜 阅读(458) 评论(0) 推荐(0) 编辑
摘要: 在系统中安装共享处理者不影响 /proc/stat, 它甚至不知道处理者. 但是, /proc/interrupts 稍稍变化. 所有同一个中断号的安装的处理者出现在 /proc/interrupts 的同一行. 下列输出( 从一 个 x86_64 系统)显示了共享中断处理是如何显示的: CPU0 阅读全文
posted @ 2019-07-06 12:20 樊伟胜 阅读(402) 评论(0) 推荐(0) 编辑
摘要: 如同前面建议的, 当内核收到一个中断, 所有的注册的处理者被调用. 一个共享的处理者 必须能够在它需要的处理的中断和其他设备产生的中断之间区分. 使用 shared=1 选项来加载 short 安装了下列处理者来代替缺省的: irqreturn_t short_sh_interrupt(int ir 阅读全文
posted @ 2019-07-06 12:19 樊伟胜 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 共享中断通过 request_irq 来安装就像不共享的一样, 但是有 2 个不同: SA_SHIRQ 位必须在 flags 参数中指定, 当请求中断时. dev_id 参数必须是独特的. 任何模块地址空间的指针都行, 但是 dev_id 明确地 不能设置为 NULL. 内核保持着一个与中断相关联的 阅读全文
posted @ 2019-07-06 12:14 樊伟胜 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 记住 tasklet 是一个特殊的函数, 可能被调度来运行, 在软中断上下文, 在一个系统决 定的安全时间中. 它们可能被调度运行多次, 但是 tasklet 调度不累积; ; tasklet 只 运行一次, 即便它在被投放前被重复请求. 没有 tasklet 会和它自己并行运行, 因为它 只运行一 阅读全文
posted @ 2019-07-06 12:13 樊伟胜 阅读(2582) 评论(0) 推荐(0) 编辑
摘要: 如果你需要禁止所有中断如何? 在 2.6 内核, 可能关闭在当前处理器上所有中断处理, 使用任一个下面 2 个函数(定义在 <asm/system.h>): 如果你需要禁止所有中断如何? 在 2.6 内核, 可能关闭在当前处理器上所有中断处理, 使用任一个下面 2 个函数(定义在 <asm/syst 阅读全文
posted @ 2019-07-06 12:11 樊伟胜 阅读(2096) 评论(0) 推荐(0) 编辑
摘要: 有时(但是很少!)一个驱动需要禁止一个特定中断线的中断递交. 内核提供了 3 个函数为 此目的, 所有都声明在 <asm/irq.h>. 这些函数是内核 API 的一部分, 因此我们描述它 们, 但是它们的使用在大部分驱动中不鼓励. 在其他的中, 你不能禁止共享的中断线, 并 且, 在现代的系统中, 阅读全文
posted @ 2019-07-06 12:10 樊伟胜 阅读(894) 评论(0) 推荐(0) 编辑
摘要: 老版本的 Linux 内核尽了很大努力来区分"快速"和"慢速"中断. 快速中断是那些能够很 快处理的, 而处理慢速中断要特别地长一些. 慢速中断可能十分苛求处理器, 并且它值得 在处理的时候重新使能中断. 否则, 需要快速注意的任务可能被延时太长. 在现代内核中, 快速和慢速中断的大部分不同已经消失 阅读全文
posted @ 2019-07-06 11:59 樊伟胜 阅读(614) 评论(0) 推荐(0) 编辑
摘要: 探测也可以在驱动自身实现没有太大麻烦. 它是一个少有的驱动必须实现它自己的探测, 但是看它是如何工作的能够给出对这个过程的内部认识. 为此目的, short 模块进行 do- it-yourself 的 IRQ 线探测, 如果它使用 probe=2 加载. 这个机制与前面描述的相同: 使能所有未使用 阅读全文
posted @ 2019-07-06 11:58 樊伟胜 阅读(127) 评论(0) 推荐(0) 编辑
摘要: Linux 内核提供了一个低级设施来探测中断号. 它只为非共享中断, 但是大部分能够在共 享中断状态工作的硬件提供了更好的方法来尽量发现配置的中断号.这个设施包括 2 个函 数, 在<linux/interrupt.h> 中声明( 也描述了探测机制 ). unsigned long probe_ir 阅读全文
posted @ 2019-07-06 11:57 樊伟胜 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 驱动在初始化时最有挑战性的问题中的一个是如何决定设备要使用哪个 IRQ 线. 驱动需 要信息来正确安装处理. 尽管程序员可用请求用户在加载时指定中断号, 这是个坏做法, 因为大部分时间用户不知道这个号, 要么因为他不配置跳线要么因为设备是无跳线的. 大 驱动在初始化时最有挑战性的问题中的一个是如何决 阅读全文
posted @ 2019-07-06 11:56 樊伟胜 阅读(413) 评论(0) 推荐(0) 编辑
摘要: 无论何时一个硬件中断到达处理器, 一个内部的计数器递增, 提供了一个方法来检查设备 是否如希望地工作. 报告的中断显示在 /proc/interrupts. 下面的快照取自一个双处理 器 Pentium 系统: root@montalcino:/bike/corbet/write/ldd3/src/ 阅读全文
posted @ 2019-07-06 11:55 樊伟胜 阅读(625) 评论(0) 推荐(0) 编辑
摘要: 如果你想实际地"看到"产生的中断, 向硬件设备写不足够; 一个软件处理必须在系统中配 置. 如果 Linux 内核还没有被告知来期待你的中断, 它简单地确认并忽略它. 中断线是一个宝贵且常常有限的资源, 特别当它们只有 15 或者 16 个时. 内核保持了中 断线的一个注册, 类似于 I/O 端口的 阅读全文
posted @ 2019-07-06 11:54 樊伟胜 阅读(419) 评论(0) 推荐(0) 编辑
摘要: 一个最著名的 I/O 内存区是在个人计算机上的 ISA 范围. 这是在 640 KB(0xA0000)和 1 MB(0x100000)之间的内存范围. 因此, 它正好出现于常规内存 RAM 中间. 这个位置可能 看起来有点奇怪; 它是一个在 1980 年代早期所作的决定的产物, 当时 640 KB 阅读全文
posted @ 2019-07-06 11:53 樊伟胜 阅读(457) 评论(0) 推荐(0) 编辑
摘要: short 例子模块, 在存取 I/O 端口前介绍的, 也能用来存取 I/O 内存. 为此, 你必须告 诉它使用 I/O 内存在加载时; 还有, 你需要改变基地址来使它指向你的 I/O 区. 例如, 这是我们如何使用 short 来点亮调试 LED, 在一个 MIPS 开发板上: mips.root 阅读全文
posted @ 2019-07-06 11:52 樊伟胜 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 在一些平台上, 你可能逃过作为一个指针使用 ioremap 的返回值的惩罚. 这样的使用不 是可移植的, 并且, 更加地, 内核开发者已经努力来消除任何这样的使用. 使用 I/O 内 存的正确方式是通过一系列为此而提供的函数(通过 <asm/io.h> 定义的). 从 I/O 内存读, 使用下列之一 阅读全文
posted @ 2019-07-06 11:51 樊伟胜 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 我们介绍的驱动称为 short (Simple Hardware Operations and Raw Tests). 所有它做 的是读和写几个 8-位 端口, 从你在加载时选择的开始. 缺省地, 它使用分配给 PC 并口 的端口范围. 每个设备节点(有一个独特的次编号)存取一个不同的端口. sho 阅读全文
posted @ 2019-07-06 11:50 樊伟胜 阅读(467) 评论(0) 推荐(0) 编辑
摘要: I/O 内存区必须在使用前分配. 分配内存区的接口是( 在 <linux/ioport.h> 定义): struct resource *request_mem_region(unsigned long start, unsigned long len, char *name); 这个函数分配一个 阅读全文
posted @ 2019-07-06 11:50 樊伟胜 阅读(482) 评论(0) 推荐(0) 编辑
摘要: 刚刚描述的这些函数主要打算被设备驱动使用, 但它们也可从用户空间使用, 至少在 PC- 类 的计算机. GNU C 库在 <sys/io.h> 中定义它们. 下列条件应当应用来对于 inb 及其 友在用户空间代码中使用: 程序必须使用 -O 选项编译来强制扩展内联函数. ioperm 和 iopl 阅读全文
posted @ 2019-07-06 11:49 樊伟胜 阅读(382) 评论(0) 推荐(0) 编辑
摘要: 因为我们期望大部分读者以所谓的"个人计算机"的形式使用一个 x86 平台, 我们觉得值 得解释一下 PC 并口如何设计的. 并口是在个人计算机上运行数字 I/O 例子代码的外设 接口选择. 尽管大部分读者可能有并口规范用, 为你的方便, 我们在这里总结一下它们. 并口, 在它的最小配置中 ( 我们浏 阅读全文
posted @ 2019-07-06 11:49 樊伟胜 阅读(572) 评论(0) 推荐(0) 编辑