Linux设备驱动程序学习(一)——Linux设备驱动程序的介绍

  这一部分主要是用来介绍Linux设备驱动程序的一些基本概念,包括:Linux设备驱动程序的作用、内核功能的划分以及设备和模块的分类。

Linux设备驱动程序的作用

   设备驱动程序就像一个个的“黑盒子”,使某个特定硬件响应一个定义良好的内部编程接口,这些操作完全隐藏了设备的工作细节。用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。将这些调用映射到作用于实际硬件的设备特有操作上,则是设备驱动程序的任务。
   简洁的来说设备驱动程序的作用在于提供机制(需要提供什么功能),而不在于提供策略(这些功能怎么使用)。
拓展:
   编写驱动程序应该注意这个基本概念:编写内核代码来存取硬件, 但是不能强加特别的策略给用户, 因为不同的用户有不同的需求. 驱动程序应当做到使硬件可用, 将所有关于如何使用硬件的事情留给应用程序。

   驱动程序设计要考虑的三个方面:

  • 提供给用户尽可能多的选项
  • 编写驱动程序要占用的时间
  • 尽量保持程序简单避免产生过多的错误

内核功能的划分

内核功能可以主要划分为以下五个部分:

  • 进程管理
    内核负责创建和销毁进程, 并处理它们与外部世界的联系(输入和输出), 更通常地, 内核的进程管理活动实现了多个进程在一个单个或者几个 CPU 之上的抽象.

  • 内存管理
    计算机的内存是主要的资源, 处理它所用的策略对系统性能是至关重要的. 内核为所有进程的每一个都在有限的可用资源上建立了一个虚拟地址空间.

  • 文件系统
    Unix 在很大程度上基于文件系统的概念; 几乎 Unix 中的任何东西都可看作一个文件. 内核在非结构化的硬件之上建立了一个结构化的文件系统, 结果是文件的抽象非常多地在整个系统中应用.

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

  • 网络功能
    网络必须由操作系统来管理, 因为大部分网络操作不是特定于某一个进程, 另外, 所有的路由和地址解析问题都在内核中实现。

    设备和模块分类

    以 Linux 的方式看待设备可区分为 3 种基本设备类型. 每个模块常常实现 3 种类型中的 1 种, 因此可分类成字符模块, 块模块, 或者一个网络模块。
    三种类型的设备:

  • 字符设备
    字符设备是个能像字节流(类似文件)一样被访问的设备,由字符设备驱动来实现这种特性。字符设备驱动通常至少实现open,close,read,write系统调用。

  • 块设备
    一个块设备驱动程序主要通过传输固定大小的数据来访问设备。块设备和字符设备的区别仅仅在于内核管理数据的方式,也就是内核及驱动程序之间的软件接口,而这些不同对用户来讲是透明的。在内核中,和字符取得相比,块设备具有完全不同的接口。

  • 网络接口设备
    任何网络事物都经过一个网络接口形成,即一个能够和其它主机交换数据的设备。它可以是个硬件设备,但也可能是个纯软件设备。访问网络接口的方法仍然是给它们分配一个唯一的名字(比如eth0),但这个名字在文件系统中不存在对应的节点。内核和网络设备驱动程序间的通信,完全不同于内核和字符以及块驱动程序之间的通信,内核调用一套和数据包传输相关的函数而不是read、write等。

    安全问题

   任何从内核中得到的内存,都必须在提供给用户进程或者设备之前清零或者以其它方式初始化,否则就可能发生信息泄露(如数据和密码泄露等)。
   一个经过恶意修改过的内核可能会允许任何人装载内核,所有,下载内核的地址应该选择正规网站。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值