上一页 1 ··· 144 145 146 147 148 149 150 151 152 ··· 280 下一页
摘要: 很多内部内核函数返回一个指针值给调用者. 许多这些函数也可能失败. 大部分情况, 失 败由返回一个 NULL 指针值来指示. 这个技术是能用的, 但是它不能通知问题的确切特性. 一些接口确实需要返回一个实际的错误码以便于调用者能够基于实际上什么出错来作出正 确的判断. 许多内核接口通过在指针值中对错 阅读全文
posted @ 2019-07-07 13:47 樊伟胜 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高 级的平台以另一种方式(大端)工作. 任何可能的时候, 你的代码应当这样来编写, 它不在 乎它操作的数据的字节序. 但是, 有时候一个驱动需要使用单个字节建立一个整型数或者 相反, 或者它必须与一个要求一个特定顺 阅读全文
posted @ 2019-07-07 13:38 樊伟胜 阅读(902) 评论(0) 推荐(0) 编辑
摘要: 编写可移植代码而值得考虑的最后一个问题是如何存取不对齐的数据 -- 例如, 如何读取 一个存储于一个不是 4 字节倍数的地址的 4 字节值. i386 用户常常存取不对齐数据项, 但是不是所有的体系允许这个. 很多现代的体系产生一个异常, 每次程序试图不对齐数据 传送时; 数据传输由异常处理来处理, 阅读全文
posted @ 2019-07-07 13:38 樊伟胜 阅读(1467) 评论(0) 推荐(0) 编辑
摘要: 当使用内存时, 记住一个内存页是 PAGE_SIZE 字节, 不是 4KB. 假定页大小是 4KB 并且 硬编码这个值是一个 PC 程序员常见的错误, 相反, 被支持的平台显示页大小从 4 KB 到 64 KB, 并且有时它们在相同平台上的不同的实现上不同. 相关的宏定义是 PAGE_SIZE 和 阅读全文
posted @ 2019-07-07 13:37 樊伟胜 阅读(6298) 评论(0) 推荐(0) 编辑
摘要: 内核中一些通常使用的数据类型有它们自己的 typedef 语句, 因此阻止了任何移植性问 题. 例如, 一个进程标识符 ( pid ) 常常是 pid_t 而不是 int. 使用 pid_t 屏蔽了任 何在实际数据类型上的不同. 我们使用接口特定的表达式来指一个类型, 由一个库定义的, 以便于提供一 阅读全文
posted @ 2019-07-07 13:36 樊伟胜 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 有时内核代码需要一个特定大小的数据项, 也许要匹配预定义的二进制结构,[39] 来和用户 空间通讯, 或者来用插入"填充"字段来对齐结构中的数据( 但是关于对齐问题的信息参考 "数据对齐" 一节 ). 内核提供了下列数据类型来使用, 无论你什么时候需要知道你的数据的大小. 所有的数据 声明在 <as 阅读全文
posted @ 2019-07-07 13:35 樊伟胜 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 尽管大部分程序员习惯自由使用标准类型, 如 int 和 long, 编写设备驱动需要一些小心 来避免类型冲突和模糊的 bug. 这个问题是你不能使用标准类型, 当你需要"一个 2-字节 填充者"或者"一个东西来代表 一个 4-字节 字串", 因为正常的 C 数据类型在所有体系上不是相同大小. 为展示 阅读全文
posted @ 2019-07-07 13:34 樊伟胜 阅读(496) 评论(0) 推荐(0) 编辑
摘要: 在我们进入更高级主题之前, 我们需要停下来快速关注一下可移植性问题. 现代版本的 Linux 内核是 高度可移植的, 它正运行在很多不同体系上. 由于 Linux 内核的多平台特性, 打算做认真使用的驱动 应当也是可移植的. 但是内核代码的一个核心问题是不但能够存取已知长度的数据项(例如, 文件系统 阅读全文
posted @ 2019-07-07 13:03 樊伟胜 阅读(507) 评论(0) 推荐(0) 编辑
摘要: 我们已经几次提及 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) 编辑
上一页 1 ··· 144 145 146 147 148 149 150 151 152 ··· 280 下一页