上一页 1 ··· 155 156 157 158 159 160 161 162 163 ··· 280 下一页
摘要: write, 象 read, 可以传送少于要求的数据, 根据返回值的下列规则: 如果值等于 count, 要求的字节数已被传送. 如果正值, 但是小于 count, 只有部分数据被传送. 程序最可能重试写入剩下的数 据. 如果值为 0, 什么没有写. 这个结果不是一个错误, 没有理由返回一个错误码. 阅读全文
posted @ 2019-07-05 15:38 樊伟胜 阅读(324) 评论(0) 推荐(0) 编辑
摘要: read 的返回值由调用的应用程序解释: 如果这个值等于传递给 read 系统调用的 count 参数, 请求的字节数已经被传送. 这是最好的情况. 如果是正数, 但是小于 count, 只有部分数据被传送. 这可能由于几个原因, 依赖 于设备. 常常, 应用程序重新试着读取. 例如, 如果你使用 阅读全文
posted @ 2019-07-05 15:37 樊伟胜 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 读和写方法都进行类似的任务, 就是, 从和到应用程序代码拷贝数据. 因此, 它们的原型 相当相似, 可以同时介绍它们: ssize_t read(struct file *filp, char user *buff, size_t count, loff_t *offp); ssize_t writ 阅读全文
posted @ 2019-07-05 15:36 樊伟胜 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 在介绍读写操作前, 我们最好看看如何以及为什么 scull 进行内存分配. "如何"是需要全 面理解代码, "为什么"演示了驱动编写者需要做的选择, 尽管 scull 明确地不是典型设备. 本节只处理 scull 中的内存分配策略, 不展示给你编写真正驱动需要的硬件管理技能. 其他风味的设备由不同的 阅读全文
posted @ 2019-07-05 15:35 樊伟胜 阅读(254) 评论(0) 推荐(0) 编辑
摘要: open 方法提供给驱动来做任何的初始化来准备后续的操作. 在大部分驱动中, open 应当 进行下面的工作: 检查设备特定的错误(例如设备没准备好, 或者类似的硬件错误 如果它第一次打开, 初始化设备 如果需要, 更新 f_op 指针. 分配并填充要放进 filp->private_data 的任 阅读全文
posted @ 2019-07-05 15:34 樊伟胜 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 在内部, scull 使用一个 struct scull_dev 类型的结构表示每个设备. 这个结构定义为: struct scull_dev { struct scull_qset *data; /* Pointer to first quantum set */ int quantum; /* 阅读全文
posted @ 2019-07-05 15:33 樊伟胜 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 如我们提过的, 内核在内部使用类型 struct cdev 的结构来代表字符设备. 在内核调用你 的设备操作前, 你编写分配并注册一个或几个这些结构. [11] 11为此, 你的代码应当包含 <linux/cdev.h>, 这个结构和它的关联帮助函数定义在这里. 有 2 种方法来分配和初始化一个这些 阅读全文
posted @ 2019-07-05 15:32 樊伟胜 阅读(501) 评论(0) 推荐(0) 编辑
摘要: inode 结构由内核在内部用来表示文件. 因此, 它和代表打开文件描述符的文件结构是不 同的. 可能有代表单个文件的多个打开描述符的许多文件结构, 但是它们都指向一个单个 inode 结构. inode 结构包含大量关于文件的信息. 作为一个通用的规则, 这个结构只有 2 个成员对于 编写驱动代码 阅读全文
posted @ 2019-07-05 15:31 樊伟胜 阅读(467) 评论(0) 推荐(0) 编辑
摘要: struct file, 定义于 <linux/fs.h>, 是设备驱动中第二个最重要的数据结构. 注意 file 与用户空间程序的 FILE 指针没有任何关系. 一个 FILE 定义在 C 库中, 从不出现在内核 代码中. 一个 struct file, 另一方面, 是一个内核结构, 从不出现在用 阅读全文
posted @ 2019-07-05 15:30 樊伟胜 阅读(794) 评论(0) 推荐(0) 编辑
摘要: 如同你想象的, 注册设备编号仅仅是驱动代码必须进行的诸多任务中的第一个. 我们将很 快看到其他重要的驱动组件, 但首先需要涉及一个别的. 大部分的基础性的驱动操作包括 3 个重要的内核数据结构, 称为 file_operations, file, 和 inode. 需要对这些结构的 基本了解才能够做 阅读全文
posted @ 2019-07-05 15:25 樊伟胜 阅读(954) 评论(0) 推荐(0) 编辑
上一页 1 ··· 155 156 157 158 159 160 161 162 163 ··· 280 下一页