`
baobaoupup
  • 浏览: 470306 次
文章分类
社区版块
存档分类
最新评论

Linux 设备驱动 Edition 3.-----------1

 
阅读更多
在 Unix 系统中, 几个并发的进程专注于不同的任务. 每个进程请求系统资源, 象计算能力, 内存, 网

络连接, 或者一些别的资源. 内核是个大块的可执行文件, 负责处理所有这样的请求.


设备控制
几乎每个系统操作最终都映射到一个物理设备上. 除了处理器, 内存和非常少的别的实体之
外, 全部中的任何设备控制操作都由特定于要寻址的设备相关的代码来进行. 这些代码称为
设备驱动. 内核中必须嵌入系统中出现的每个外设的驱动,

Linux 的众多优良特性之一就是可以在运行时扩展由内核提供的特性的能力. 这意味着你可以在系
统正在运行着的时候增加内核的功能( 也可以去除 ).通过 insmod 程序, 以及通过 rmmod 程序去连接

3 类驱动:字符设备 块设备 网络接口例如, 你可以说 USB 模块, 串口模块, SCSI 模块, 等等. 每个
USB 设备由一个 USB 模块驱动, 与 USB 子系统一起工作, 但是设备自身在系统中表现为一个字符设
备( 比如一个 USB 串口 ), 一个块设备( 一个 USB 内存读卡器 ), 或者一个网络设备( 一个 USB 以太
网接口 ).


不同于大部分的小的和中型的应用程序从头至尾处理一个单个任务, 每个内核模块只注册自己以
便来服务将来的请求, 并且它的初始化函数立刻终止. 换句话说, 模块初始化函数的任务是为以后
调用模块的函数做准备; 好像是模块说, " 我在这里, 这是我能做的."模块的退出函数( 例子里是
hello_exit )就在模块被卸载时调用. 它好像告诉内核, "我不再在那里了, 不要要求我做任何事了."这
种编程的方法类似于事件驱动的编程, 但是虽然不是所有的应用程序都是事件驱动的, 每个内核模
块都是.

一个模块在内核空间运行, 而应用程序在用户空间运行. 这个概念是操作系
统理论的基础.我们常常提到运行模式作为内核空间和用户空间. 这些术语不仅包含存在于这两个模式中不同特
权级别, 还包含有这样的事实, 即每个模式有它自己的内存映射 -- 它自己的地址空间.


Linux 内核代码, 包括驱动代码, 必须是可重入的 -- 它必须能够同时在多个上下文中运行. 数
据结构必须小心设计以保持多个执行线程分开, 并且代码必须小心存取共享数据, 避免数据的破
坏.

尽管内核模块不象应用程序一样顺序执行, 内核做的大部分动作是代表一个特定进程的.


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics