上一页 1 ··· 151 152 153 154 155 156 157 158 159 ··· 280 下一页
摘要: 最后, 我们看一个实现了阻塞 I/O 的真实驱动方法的例子. 这个例子来自 scullpipe 驱 动; 它是 scull 的一个特殊形式, 实现了一个象管道的设备. 在驱动中, 一个阻塞在读调用上的进程被唤醒, 当数据到达时; 常常地硬件发出一个中断 来指示这样一个事件, 并且驱动唤醒等待的进程作 阅读全文
posted @ 2019-07-06 10:36 樊伟胜 阅读(738) 评论(0) 推荐(0) 编辑
摘要: 在我们看全功能的 read 和 write 方法的实现之前, 我们触及的最后一点是决定何时使 进程睡眠. 有时实现正确的 unix 语义要求一个操作不阻塞, 即便它不能完全地进行下去. 有时还有调用进程通知你他不想阻塞, 不管它的 I/O 是否继续. 明确的非阻塞 I/O 由 filp->f_fla 阅读全文
posted @ 2019-07-06 10:31 樊伟胜 阅读(2668) 评论(0) 推荐(0) 编辑
摘要: 当一个进程睡眠, 它这样做以期望某些条件在以后会成真. 如我们之前注意到的, 任何睡 眠的进程必须在它再次醒来时检查来确保它在等待的条件真正为真. Linux 内核中睡眠的 最简单方式是一个宏定义, 称为 wait_event(有几个变体); 它结合了处理睡眠的细节和 进程在等待的条件的检查. wa 阅读全文
posted @ 2019-07-06 10:30 樊伟胜 阅读(581) 评论(0) 推荐(0) 编辑
摘要: 对于一个进程"睡眠"意味着什么? 当一个进程被置为睡眠, 它被标识为处于一个特殊的状 态并且从调度器的运行队列中去除. 直到发生某些事情改变了那个状态, 这个进程将不被 在任何 CPU 上调度, 并且, 因此, 将不会运行. 一个睡着的进程已被搁置到系统的一边, 等待以后发生事件. 对于一个 Lin 阅读全文
posted @ 2019-07-06 10:29 樊伟胜 阅读(2713) 评论(0) 推荐(0) 编辑
摘要: 有时控制设备最好是通过写控制序列到设备自身来实现. 例如, 这个技术用在控制台驱动 中, 这里所谓的 escape 序列被用来移动光标, 改变缺省的颜色, 或者进行其他的配置任 务. 这样实现设备控制的好处是用户可仅仅通过写数据控制设备, 不必使用(或者有时候 写)只为配置设备而建立的程序. 当设备 阅读全文
posted @ 2019-07-06 10:28 樊伟胜 阅读(252) 评论(0) 推荐(0) 编辑
摘要: ioctl 的 scull 实现只传递设备的配置参数, 并且象下面这样容易: switch(cmd) { case SCULL_IOCRESET: scull_quantum = SCULL_QUANTUM; scull_qset = SCULL_QSET; break; case SCULL_IO 阅读全文
posted @ 2019-07-06 10:26 樊伟胜 阅读(634) 评论(0) 推荐(0) 编辑
摘要: 在看 scull 驱动的 ioctl 代码之前, 我们需要涉及的另一点是如何使用这个额外的参数. 如果它是一个整数, 就容易: 它可以直接使用. 如果它是一个指针, 但是, 必须小心些. 当用一个指针引用用户空间, 我们必须确保用户地址是有效的. 试图存取一个没验证过的 用户提供的指针可能导致不正确 阅读全文
posted @ 2019-07-06 10:25 樊伟胜 阅读(1814) 评论(0) 推荐(0) 编辑
摘要: 尽管 ioctl 系统调用最常用来作用于设备, 内核能识别几个命令. 注意这些命令, 当用 到你的设备时, 在你自己的文件操作被调用之前被解码. 因此, 如果你选择相同的号给一 个你的 ioctl 命令, 你不会看到任何的给那个命令的请求, 并且应用程序获得某些不期望 的东西, 因为在 ioctl 阅读全文
posted @ 2019-07-06 10:24 樊伟胜 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 在为 ioctl 编写代码之前, 你需要选择对应命令的数字. 许多程序员的第一个本能的反 应是选择一组小数从0或1 开始, 并且从此开始向上. 但是, 有充分的理由不这样做. ioctl 命令数字应当在这个系统是唯一的, 为了阻止向错误的设备发出正确的命令而引起 的错误. 这样的不匹配不会不可能发生 阅读全文
posted @ 2019-07-06 10:12 樊伟胜 阅读(1466) 评论(0) 推荐(0) 编辑
摘要: 大部分驱动需要 -- 除了读写设备的能力 -- 通过设备驱动进行各种硬件控制的能力. 大 部分设备可进行超出简单的数据传输之外的操作; 用户空间必须常常能够请求, 例如, 设 备锁上它的门, 弹出它的介质, 报告错误信息, 改变波特率, 或者自我销毁. 这些操作常 常通过 ioctl 方法来支持, 阅读全文
posted @ 2019-07-06 10:11 樊伟胜 阅读(1542) 评论(0) 推荐(0) 编辑
上一页 1 ··· 151 152 153 154 155 156 157 158 159 ··· 280 下一页