设备管理与驱动

一. 设备分类:字符设备、块设备、特殊设备
1. 字符设备
- 是指每次与系统传输1个字符的设备
- 字符设备通常为传真、虚拟终端和串口调制解调器、键盘之类设备提供流通信服务
- 字符设备在实现时,大多不使用缓存器。系统直接从设备读取或者写入每一个字符
- 例如,键盘这种设备提供的就是一个数据流,当你敲入“abcdefg这个字符串时,键盘驱动程序会按照和输入完全相同的顺序返回这个由七个字符组成的数据流。它们是顺序的,先返回a,最后是g
2. 块设备
- 是指与系统间用块的方式移动数据的设备。如硬盘、CD-ROM和内存区域
- 块设备通常支持随机存取和寻址,并使用缓存器
- 操作系统为输入输出分配了缓存以存储一块数据。当程序向设备发送了读取或者写入数据的请求时,系统把数据中的每一个字符存储在适当的缓存中
- 当缓存被填满时,会采取适当的操作(把数据传走),而后系统清空缓存
- 它与字符设备不同之处就是其一般支持随机存储,而字符型是流形式,逐一存储
3. 特殊设备(伪设备)
- 在类Unix操作系统中,设备节点并不一定要对应物理设备
- 没有这种对应关系的设备是特殊设备(或伪设备)。操作系统运用了它们提供的多种功能
- 部份经常使用到的特殊设备(或伪设备)包括: null, zero, full, loop
3.1. /dev/stdin:指的就是键盘设备

实验1:
#cat > file1 < /dev/stdin
Test
Ctrl +d
#cat从/dev/stdin获得数据,然后保存到file1文件中。
#cat file1
Test
实验2:
#cat > file1
Test
Ctrl+D
#不指定输入,默认的输入设备就是/dev/stdin

3.2. /dev/null设备
- 是个黑洞设备,它丢弃一切写入其中数据,空设备通常被用于丢弃不需要的输出流
- 任何写入该设备数据都会被丢弃掉。从这个里面读取数据返回是空。将一些不用内容经常发送给这个设备,丢弃不需要的数

 #cat /dev/null#cat test.sh >/dev/null//读该设备为空,写入改设备的数据都丢弃了

3.3. /dev/zero设备
- /dev/zero 会提供无限的空字符(NULL, ASCII NUL, 0x00)。其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是产生一个特定大小的空白文件

//创建一个大小为1M文件,该文件一个块是1024字节,一共是1024块(刚好1M),用/dev/zero文件内容填充它。输出创建到:testzero文件
# dd if=/dev/zero of=testzero count=1024 bs=1024 1024+0 records in1024+0 records out 1048576 bytes (1.0 MB) copied, 0.0107194 seconds, 97.8 MB/s//这个命令一定不要随便用,有点象windows里面的粉碎文件工具。不过它是用\0x00填充整个分区。这样做数据是不可以恢复的了
# dd if=/dev/zero of=/dev/磁盘分区
  • 注意:在linux操作系统中,如果没有资源配额限制,一个普通用户就可以通过上面方法在短时间内将整个磁盘空间占用。也可以通过while(true) {fork……}类程序,启动无限线程,耗尽整个系统内存

    3.4. /dev/full设备

    • 类Unix系统中,/dev/full(常满设备)是一个特殊设备文件,总是在向其写入时返回设备无剩余空间
    • 这个设备通常被用来测试程序在遇到磁盘无剩余空间错误时的行为
# echo 'chengmo' >/dev/full
-bash: echo: write error: 设备上没有空间
# echo $?
1
//命令执行返回错误
//$?显示最后命令的退出状态。0表示没有错误,其它任何值表明有错误

命令补充:dd命令
- dd命令的用途把指定的输入文件拷贝到指定的输出文件中,并且在拷贝的过程中可以进行格式转换
- 一般用于数据备份与恢复

例1:将本地的/dev/hdx整盘备份到/dev/hdy :
#dd if=/dev/hdx of=/dev/hdy例2:将/dev/sda1全盘数据备份到指定路径的image文件:
#dd if=/dev/sda1 of=/home/apple/test例3:将备份文件恢复到指定盘:
#dd if =/home/apple/test  of=/dev/hdx

二. Linux下的设备驱动
1. 设备驱动
- 每个物理设备都拥有自己的控制器。且硬件控制器一般有各自的控制状态寄存器(CSR)。这些寄存器用来启动、停止、初始化设备以及对设备进行诊断
- Linux 中的设备由内核统一管理,这些处理和管理硬件控制器的软件就是设备驱动程序
- 这些设备驱动程序运行在特权优先级上,驻留在内存,负责对底层硬件进行处理
1.1. 主要功能
- 使设备投入运行和退出服务;
- 从设备接收数据并将它们送回内核;
- 将数据从内核送到设备;
- 检测和处理设备出现的错误。
1.2. 特性
a. 驱动程序属于内核代码
设备驱动程序是内核的一部分,它像内核中其它代码一样运行在内核模式,驱动程序如果出错将会使操作系统受到严重破坏,甚至能使系统崩溃并导致文件系统的破坏和数据丢失
b. 为内核提供统一的接口
设备驱动程序必须为 Linux 内核或其它子系统提供一个标准的接口。例如终端驱动程序为Linux 内核提供了一个文件 I/O 接口
c. 驱动程序的执行是属于内核机制并且使用内核服务
设备驱动可以使用标准的内核服务如内存分配、中断发送和等待队列等等
d. 动态可加载
多数 Linux 设备驱动程序可以在内核模块发出加载请求时加载,而不再使用时将其卸载。这样内核能有效地利用系统资源

e. 可配置
Linux 设备驱动程序可以连接到内核中。当内核被编译时,被连入内核的设备驱动程序是可配置的
1.3. 内核和模块
- Linux下硬件的驱动可以有两种方式:
- 直接加载到内核代码中,启动内核时就会驱动此硬件设备
- 另一种就是以模块方式,编译生成一个.o文件。当应用程序需要时再加载进内核空间运行。所以我们所说的一个硬件的驱动程序,通常指的就是一个驱动模块

模块(module)是在内核空间运行的程序,实际上是一种目标对象文件,没有链接,不能独立运行,但是可以装载到系统中作为内核的一部分运行,从而可以动态扩充内核的功能。模块最主要的用处就是用来实现设备驱动程序

1.4. 设备文件
- 设备管理的一个基本特征是设备处理的抽象性,即所有硬件设备都被看成普通文件
- 可以通过用操纵普通文件相同的系统调用来打开、关闭、读取和写入设备
- 对于一个物理设备,它可以在/dev下面存在一个或者多个对应的逻辑设备节点,这个节点以文件的形式存在,但它不是普通意义上的文件,它是设备文件,更确切的说,它是设备节点。例如系统中第一个IDE硬盘被表示成/dev/hda。
- 设备一般有主设备号和次设备号

  • 主设备号表明了某一类设备,一般对应着确定的驱动程序;主设备号是从/proc/devices文件中获得的

    • 主设备号的主要作用:就是声明设备所使用的驱动程序。驱动程序和设备号是一一对应的,当你打开一个设备文件时,操作系统就已经知道这个设备所对应的驱动程序
  • 次设备号一般是区分不同属性,例如不同的使用方法,不同的位置,不同的操作

    2.例子:U盘的访问
    2.1 U盘在访问之前一般需要mount,mount 的语法是

#mount 设备名 挂载点目录

2.2 但如何知道u盘的设备名?方法是:可以在插入u盘后用#fdisk -l看一下
2.3 在非虚拟机环境下,插入U盘或存储卡后,就会发现系统中多了一个SCSI硬盘,通过正确地mount它,就可以使用了。例如:

     #mount  /dev/sda1  /mnt
或#mount  /dev/sda  /mnt

然后,可以进入到这个目录/dev/sda1下查看u盘内容
2.4 而在虚拟机环境中,一般在插入U盘后,会自动mount。
例如其对应关系为:
设备名:/dev/sdb1 挂载目录:/media/KINGSTON

然后,可以进入到这个目录/media/KINGSTON下查看u盘内容

Linux学习笔记(三)-设备管理与驱动相关推荐

  1. Linux学习笔记三:安装VMWare Tools共享文件夹

    这里写目录标题 概述 window下安装 Ubuntu下安装 提取安装包 解压安装 Ubuntu安装插件 适应窗口和拖拽文件 概述 本文主要是记录下我安装VMwareTools的过程,原本打算写在Li ...

  2. Linux 学习笔记 三

    Llinux上的日志系统 syslog syslog-ng  next generation syslog 服务: syslogd:系统:非内核系统产生的信息 klogd:内核:专门负责记录内核产生的 ...

  3. Linux学习笔记三【文件及目录的权限管理篇】

    文件及目录的权限管理 上篇简单介绍了下文件和目录的一些简单的操作,接下来介绍用户和文件权限的管理.首先了解用户和组账号的配置文件,然后是管理用户和组账号,最后要会设置文件和目录权限和归属. Linux ...

  4. Linux学习笔记(三):系统运行级与运行级的切换

    1.Linux系统与其他的操作系统不同,它设有运行级别.该运行级指定操作系统所处的状态.Linux系统在任何时候都运行于某个运行级上,且在不同的运行级上运行的程序和服务都不同,所要完成的工作和所要达到 ...

  5. 【linux学习笔记三】链接命令

    链接命令:ln link =============华丽的分割线============= ln又有软链接和硬链接 //硬链接特征(不建议创建硬链接) 1.拥有相同的i节点和存储block块,可以看做 ...

  6. Linux学习笔记三

    <1>查看本机的IP地址 命令:ifconfig -a 机器的ip地址是:(inet 地址:172.16.163.57 ) <2>单独查看内存使用情况的命令:free -m 查 ...

  7. Linux学习笔记三--vim

    一般模式 按下i进入编辑模式,此时左下角出现--INSERT--,键盘上除了[Esc]外,其他按键就作为一般的输入,进行任何的编辑.一般模式下":q!"不保存离开,":w ...

  8. linux学习笔记三: secureCRT小键盘输入数字键的时候,出现字母的解决方法:

    把会话选项->仿真模式->启用小键盘转换的勾去掉就可以了. 转载于:https://blog.51cto.com/8738650/1742056

  9. LINUX学习笔记:31个常用LINUX命令和相关解释

    LINUX学习笔记三: 最近在带新同事,是一个刚入行的萌新,对于linux不是很熟悉,问我怎么来学习. 所以今天接着之前的部分,继续分享一些linux学习资料.有需要的点点保存,没有跳过呗.PS:内容 ...

最新文章

  1. 简单探讨JavaScript 与 TypeScript之间的联系
  2. JVM 从入门到“精通”,妥妥的
  3. 数据分析惯用的5种思维方法
  4. 有限元基础: Jacobian 矩阵和高斯积分
  5. Linux系统常用目录操作函数
  6. SVM: 支持向量机中的,那个C
  7. android tabpageindicator 参数,Android实现Tab布局的4种方式(Fragment+TabPageIndicator+ViewPager)...
  8. Mysql数据库分库和分表方式(常用)
  9. mysql查询周边商铺_利用Redis的Geo功能实现查找附近的店铺
  10. FreeTextBox使用
  11. 新手玩荔枝派 f1c100s nano折腾笔记(四)
  12. 计算机学院毕业设计任务书,计算机专业毕业设计任务书.doc
  13. 计算方法(三)分段线性插值和Hermite插值
  14. 007 JVM堆内存划分
  15. python股票量化交易入门到实践_Python股票量化交易从入门到实践
  16. 批量获取百度网盘文件目录
  17. SPSS基础操作(一):用幂指数型的权函数建立加权最小二乘回归方程
  18. 货币的未来取决于打破关于货币历史的虚构谎言
  19. 什么是 CI/CD?
  20. win10系统DPC_WATCHDOG_VIOLATION蓝屏靠谱解决办法

热门文章

  1. python键盘按键名称_跑Python的键盘可以很强大
  2. Android基本控件之GridView
  3. 使用命令批量修改文件名
  4. Spring Boot java.sql.SQLSyntaxErrorException: Table ‘mydb.table_name‘ doesn‘t exist
  5. Word文档中如何插入分数
  6. 手机投屏时常见的黑屏、卡顿、无画面等问题及解决方法
  7. Termux安装最强中间人工具Bettercap
  8. python---自动群发邮件
  9. Android App Bundles相关概念及开发流程详解
  10. CentOS7如何设置防火墙