linux scull 的设计
编写驱动的第一步是定义驱动将要提供给用户程序的能力(机制).因为我们的"设备"是计算 机内存的一部分, 我们可自由做我们想做的事情. 它可以是一个顺序的或者随机存取的设 备, 一个或多个设备, 等等.
为使 scull 作为一个模板来编写真实设备的真实驱动, 我们将展示给你如何在计算机内存 上实现几个设备抽象, 每个有不同的个性.
scull 源码实现下面的设备. 模块实现的每种设备都被引用做一种类型. scull0 到 scull3
4 个设备, 每个由一个全局永久的内存区组成. 全局意味着如果设备被多次打开, 设备中含有的数据由所有打开它的文件描述符共享. 永久意味着如果设备关闭又重 新打开, 数据不会丢失. 这个设备用起来有意思, 因为它可以用惯常的命令来存取 和测试, 例如 cp, cat, 以及 I/O 重定向.
scullpipe0 到 scullpipe3
4 个 FIFO (先入先出) 设备, 行为象管道. 一个进程读的内容来自另一个进程所写 的. 如果多个进程读同一个设备, 它们竞争数据. scullpipe 的内部将展示阻塞读 写和非阻塞读写如何实现, 而不必采取中断. 尽管真实的驱动使用硬件中断来同步 它们的设备, 阻塞和非阻塞操作的主题是重要的并且与中断处理是分开的.(在第 10 章涉及).
scullsingle scullpriv sculluid scullwuid
这些设备与 scull0 相似, 但是在什么时候允许打开上有一些限制. 第一个
( snullsingle) 只允许一次一个进程使用驱动, 而 scullpriv 对每个虚拟终端(或
者 X 终端会话)是私有的, 因为每个控制台/终端上的进程有不同的内存区. sculluid 和 scullwuid 可以多次打开, 但是一次只能是一个用户; 前者返回一个" 设备忙"错误, 如果另一个用户锁着设备, 而后者实现阻塞打开. 这些
scull 的变 体可能看来混淆了策略和机制, 但是它们值得看看, 因为一些实际设备需要这类管 理.
每个
scull 设备演示了驱动的不同特色, 并且呈现了不同的难度. 本章涉及 scull0 到 scull3 的内部; 更高级的设备在第 6 章涉及. scullpipe
在"一个阻塞 I/O 例子"一节中 描述, 其他的在"设备文件上的存取控制"中描述.
linux scull 的设计的更多相关文章
- [转载] Linux Futex的设计与实现
Linux Futex的设计与实现 引子 在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正 ...
- linux scull 的内存使用
在介绍读写操作前, 我们最好看看如何以及为什么 scull 进行内存分配. "如何"是需要全 面理解代码, "为什么"演示了驱动编写者需要做的选择, 尽管 sc ...
- linux scull 函数open 方法
open 方法提供给驱动来做任何的初始化来准备后续的操作. 在大部分驱动中, open 应当 进行下面的工作: 检查设备特定的错误(例如设备没准备好, 或者类似的硬件错误 如果它第一次打开, 初始化设 ...
- Linux UBI子系统设计初探
问题领域 flash存储设备存在如下特点: 存在坏块 使用寿命较短 存储介质不稳定 读写速度慢 不支持随机访问(nand) 只能通过擦除将0改成1 最小读写单位为page or sub-page 便宜 ...
- Linux Futex的设计与实现(转)
引子在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序" ...
- 【转】Linux Futex的设计与实现
引子在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序" ...
- linux scull 代码write 方法
write, 象 read, 可以传送少于要求的数据, 根据返回值的下列规则: 如果值等于 count, 要求的字节数已被传送. 如果正值, 但是小于 count, 只有部分数据被传送. 程序最可能重 ...
- linux scull 代码read 方法
read 的返回值由调用的应用程序解释: 如果这个值等于传递给 read 系统调用的 count 参数, 请求的字节数已经被传送. 这是最好的情况. 如果是正数, 但是小于 count, 只有部分数据 ...
- Linux文件系统的设计
总论: linux的文件系统设计非常优秀,总的来讲有两大部分,第一部分就是树形的组织结构,第二部分就是vfs,树形的组织结构组织了文件系统的表象,用户非常方便的使用,而vfs是文件系统的实现机理,它处 ...
随机推荐
- IDEA 运行maven项目配置
- 19-2 from和modelform的用法和介绍
一 form 1. form的作用 1. 生成HTML代码 2. 帮我们做数据有效性的校验 3. 保留上次输入内容,显示错误提示 2. form组件校验数据有效性 1. 内置的校验规则 1. re ...
- 使用vscode书写markdown文件
插件推荐 markdown-preview-enhanced 打开 vscode 编辑器,在插件页搜索 markdown-preview-enhanced,接着点击 Install 按钮. 该插件的中 ...
- php配置文件php.ini中文详解
转自:http://www.cnblogs.com/hbl/archive/2008/02/15/1069367.html [PHP] ; PHP还是一个不断发展的工具,其功能还在不断地删减 ; 而p ...
- SGU 107 987654321 problem【找规律】
题目链接: http://acm.sgu.ru/problem.php?contest=0&problem=107 题意: 平方后几位为987654321的n位数有多少个 分析: 虽然说是水题 ...
- Python基础:08列表解析与生成器表达式
一:列表解析 列表解析(List comprehensions)来自函数式编程语言Haskell .它可以用来动态地创建列表.它在 Python 2.0 中被加入. 列表解析的语法: [exp ...
- window执行python文件
@echo offD:cd D:\pythonstart python2 del.pyexit
- 21Hash算法以及暴雪Hash
一:哈希表简介 哈希表是一种查找效率极高的数据结构,理想情况下哈希表插入和查找操作的时间复杂度均为O(1),任何一个数据项可以在一个与哈希表长度无关的时间内计算出一个哈希值(key),然后在常量时间内 ...
- H3C 命令行编辑功能
- laravel 5.6接入微信第三方授权登陆的主要步骤
https://yq.aliyun.com/articles/590435 摘要: 这方面,php已很成熟了, 综合下面这个链接,基本上调试一下就可以搞定了. 这方面,php已很成熟了, 综合下面这个 ...