Linux设备驱动程序学习----1.设备驱动程序简介
设备驱动程序简介
更多内容请参考Linux设备驱动程序学习----目录
1. 简介
Linux系统的优点是,系统内部实现细节对所有人都是公开的。Linux内核由大量复杂的代码组成,设备驱动程序可以作为进入Linux内核世界大门的切入口。
设备驱动程序在Linux内核中,是一个个独立的黑盒子,在调用内部接口时某个特定硬件做出响应,这些接口隐藏了设备的工作细节。用户的操作通过独立于特定驱动程序的一组标准化调用执行,将这些调用映射到作用于实际硬件的设备特有操作上,是设备驱动程序的任务。
模块化的特点使得Linux驱动程序的编写非常方便简单。
2. 设备驱动程序的作用
设备驱动程序的作用在于提供机制,而不是提供策略。
区分机制和策略是Unix设计背后隐含的最好思想之一。大部分编程问题都可以分成两部分:
机制:需要提供什么功能
策略:如何使用这些功能
我们应当尽可能做到让驱动程序不带策略。
编写驱动程序时,特别注意:编写访问硬件的内核代码时,不要给用户强加任何特定策略。因为不同的用户有不同的需求,驱动程序应该处理如何使硬件可用的问题,而将怎样使用硬件的问题留给应用程序。
驱动程序可以看作是应用程序和实际设备之间的一个软件层。
驱动程序设计要综合考虑下面三个问题的因素:提供给用户尽量多的选项、编写驱动程序要占用的时间、尽量保持程序简单。
3. 内核功能划分
根据内核完成任务的不同,内核功能分为如下几个部分:
进程管理
负责创建和销毁进程,并处理它们和外部世界之间的连接。如进程之间的通信,控制进程如何共享CPU的调度器等。
内存管理
内存是计算机的主要资源之一,用来管理内存的策略是决定系统性能的一个关键因素。内核在有限的可用资源上为每个进程创建一个虚拟地址空间。
文件系统
Unix中的每个对象几乎都可以当作文件来看待。内核可以在没有结构的硬件上构造结构化的文件系统。
设备控制
几乎每一个系统操作最终都会映射到物理设备上。几乎所有设备操作都由驱动程序来完成。内核必须为系统中的每个外设嵌入相应的驱动程序。
网络功能
大部分网络操作和具体进程无关,网络功能必须由操作系统管理。系统负责在应用程序和网络接口之间传递数据包,并根据网络活动控制程序的执行。所有的路由和地址解析都由内核处理。
可装载模块
Linux有个很好的特性,内核提供的特性可在运行时扩展,即系统启动并运行时,可以以模块的形式,向内核添加、移出功能。
4. 设备和模块分类
Linux系统将设备分为三种基本类型,字符设备模块、块设备模块、网络设备模块。
字符设备
字符设备是个能像字节流一样被访问的设备,类似文件。比如:字符终端(/dev/console)和串口(/dev/ttys0)
设备文件和普通文件的唯一差别是,对普通文件的访问可以前后移动访问位置,而大多数字符设备是一个个只能顺序访问的数据通道。除个别例外。
块设备
块设备是按照块进行读写的设备,一次只能传输一个或多个完整的块,一个块一般是512字节,或2的更高次幂字节的数据。
块设备上能够容纳文件系统。
网络设备
网络设备是一个能够和其他主机交换数据的设备,通常,接口是个硬件设备,也可能是个纯软件设备,比如回环接口(loopback)。
网络设备由内核中的网络子系统驱动,负责发送和接收数据包。
除了设备驱动程序外,内核中其他一些功能,不管是硬件还是软件功能,都模块化了。如常见的文件系统。。。
5. 安全问题
系统中的所有安全检查都是由内核代码进行的,如果内核有安全漏洞,则整个系统就有安全漏洞。
驱动程序编写者应当尽量避免在代码中实现安全策略。
驱动程序编写者应当避免由于自身原因引入安全方面的缺陷。
任何从用户进程得到的输入只有经过内核严格验证后才能使用。必须小心对待未初始化的内存,任何从内核中得到的内存,都必须在提供给用户进程或者设备之前清零或者以其他方式初始化,否则可能发生信息泄露。
Linux内核也可编译为不支持模块方式,从而可以关闭任何模块相关的安全漏洞。此时,所有需要的驱动程序必须直接编译到内核中。
6. 版本编号
对内核来讲,偶数编号的内核版本(如2.6.x)是用于正式发行的稳定版本,而奇数编号的版本(如2.7.x)则是开发过程中的一个快照。
更多内容请参考Linux设备驱动程序学习----目录
Linux设备驱动程序学习----1.设备驱动程序简介的更多相关文章
- Linux设备驱动程序学习 高级字符驱动程序操作[阻塞型I/O和非阻塞I/O]【转】
转自:http://blog.csdn.net/jacobywu/article/details/7475432 阻塞型I/O和非阻塞I/O 阻塞:休眠 非阻塞:异步通知 一 休眠 安全地进入休眠的两 ...
- Linux C编程学习之C语言简介---预处理、宏、文件包含……
C的简介 C语言的结构极其紧凑,C语言是一种模块化的编程语言,整个程序可以分割为几个相对独立的功能模块,模块之间的相互调用和数据传递是非常方便的 C语言的表达能力十分强大.C语言兼顾了高级语言和汇编语 ...
- Linux设备驱动程序学习----目录
目录 设备驱动程序简介 1.设备驱动程序简介 构造和运行模块 2.内核模块和应用程序的对比 3.模块编译和装载 4.模块的内核符号表 5.模块初始化和关闭 6.模块参数 7.用户空间编写驱动程序 ...
- Linux设备驱动程序学习之分配内存
内核为设备驱动提供了一个统一的内存管理接口,所以模块无需涉及分段和分页等问题. 我已经在第一个scull模块中使用了 kmalloc 和 kfree 来分配和释放内存空间. kmalloc 函数内幕 ...
- Linux设备驱动程序学习----2.内核模块与应用程序的对比
内核模块与应用程序的对比 更多内容请参考Linux设备驱动程序学习----目录 1. 内核模块与应用程序的对比 内核模块和应用程序之间的不同之处: 大多数中小规模的应用程序是从头到尾执行单个任务,而模 ...
- Linux设备驱动程序学习----3.模块的编译和装载
模块的编译和装载 更多内容请参考Linux设备驱动程序学习----目录 1. 设置测试系统 第1步,要先从kernel.org的镜像网站上获取一个主线内核,并安装到自己的系统中,因为学习驱动程序的编写 ...
- Linux内核入门到放弃-设备驱动程序-《深入Linux内核架构》笔记
I/O体系结构 总线系统 PCI(Peripheral Component Interconnect) ISA(Industrial Standard Architecture) SBus IEEE1 ...
- USB设备驱动程序学习笔记(一)
现象:把USB设备接到PC1. 右下角弹出"发现android phone"2. 跳出一个对话框,提示你安装驱动程序 问1. 既然还没有"驱动程序",为何能知道 ...
- Linux设备驱动程序 之 主次设备号
主设备号和次设备号 对字符设备的访问是通过文件系统内的设备名称进行的,这些名称被称为特殊文件.设备文件.或者简单称之为文件系统树的节点,它们通常位于/dev目录.字符设备驱动程序的设备文件可以通过ls ...
随机推荐
- tensorflow学习笔记-bili莫烦
bilibili莫烦tensorflow视频教程学习笔记 1.初次使用Tensorflow实现一元线性回归 # 屏蔽警告 import os os.environ[' import numpy as ...
- MAC subline批处理
代码块批量操作: command + A command + shift + L command + < command + > 按照":"进行换行操作: commd ...
- 编译gd库出错
不知道大家有没有遇到在 X64 RedHat5 或者 RedHat4 下.编译安装PHP环境的时候. 安装了libxml,zlib,jpeg,libpng,freetype,libart_lgpl, ...
- ASP.NET Core Web API中使用Swagger
本节导航 Swagger介绍 在ASP.NET CORE 中的使用swagger 在软件开发中,管理和测试API是一件重要而富有挑战性的工作.在我之前的文章<研发团队,请管好你的API文档& ...
- git常用总结
git 基本配置 安装git yum -y install git git全局配置 git config --global user.name "lsc" #配置git使用用户 g ...
- gulp使用详情 及 3.0到4.0的坑
项目的所有依赖都可以安装,每个都有详细的注释. const gulp = require('gulp'); const sass = require('gulp-sass'); const brows ...
- redis宕机如何解决?如果是项目上线的宕机呢?
我们先来了解一下 bridge网络模式 他会创建一个docker0桥,看完这个我们就会知道redis哨兵机制的端口了. 之后继续研究redis宕机的解决办法! 宕机: 服务器停止服务 如果只有一台r ...
- 蓝桥杯:合并石子(区间DP+平行四边形优化)
http://lx.lanqiao.cn/problem.page?gpid=T414 题意:…… 思路:很普通的区间DP,但是因为n<=1000,所以O(n^3)只能拿90分.上网查了下了解了 ...
- Windows 应用容器化
背景 在这个时间点,我们可能已经对 Linux 容器使用已经达到熟练掌握的程度,因为 Docker 与 Kubernetes 都是最早为 Linux 平台设计.当我们从容器这项技术中体会到种种收益,对 ...
- ZigBee按键中断
何为按键中断? 在了解按键中断之前,我们先来了解一下什么是中断?中断就是程序执行当前代码,当前任务的时候: 突然有自身函数或外部的影响,而使程序执行到别的任务再回来. 举个栗子: 当你在做饭的时候,电 ...