美文网首页
字符设备和块设备

字符设备和块设备

作者: 线断木偶人 | 来源:发表于2018-07-02 13:42 被阅读0次
字符设备

提供连续的数据流,是一个线性设备,应用程序可以顺序读取,通常不支持随机存取。相反,此类设备支持按字节/字符来读写数据。举例来说,调制解调器是典型的字符设备。
如:键盘、鼠标、显示屏

块设备

应用程序可以随机访问设备数据,程序可自行确定读取数据的位置。硬盘是典型的块设备,应用程序可以寻址磁盘上的任何位置,并由此读取数据。此外,数据的读写只能以块(通常是512B)的倍数进行。与字符设备不同,块设备并不支持基于字符的寻址。
如:硬盘、U盘
两种设备本身并没用严格的区分,主要是字符设备和块设备驱动程序提供的访问接口(file I/O API)是不一样的

主设备和次设备号:MAJOR MINOR

Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3。
一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。例如一个嵌入式系统,有两个LED指示灯,LED灯需要独立的打开或者关闭。那么,可以写一个LED灯的字符设备驱动程序,可以将其主设备号注册成5号设备,次设备号分别为1和2。这里,次设备号就分别表示两个LED灯。

[zzz@Linuxmg /]$ ll /dev/
crw-rw-rw-   1 root root      1,   3 Jun  7 13:38 null   #1主设备号,3次设备号
crw-------   1 root root     10, 144 Jun  7 13:38 nvram #10主设备号,144次设备号
crw-------   1 root root      1,  12 Jun  7 13:38 oldmem
crw-r-----   1 root kmem      1,   4 Jun  7 13:38 port

一般的,主设备号标识出与设备关联的设备驱动。如 /dev/null 和 /dev/port 由 1 号驱动来管理。

现在的 Linux 内核允许多个驱动共享一个主设备号,但更多的设备都遵循一个驱动对一个主设备号的原则。

内核由次设备号确定当前所指向的是哪个设备。根据所编写的驱动程序,可以从内核那里得到一个直接指向设备的指针,或者使用次设备号作为一个设备本地数组的索引。但不论如何,内核自身几乎不知道次设备号的什么事情。

查看设备号

当静态分配设备号时,需要查看系统中已经存在的设备号,从而决定使用哪个新设备号。可以读取/proc/devices文件获得设备的设备号。/proc/devices文件包含字符设备和块设备的设备号,如下所示:

[zzz@Linuxmg /]$ cat /proc/devices  #查看字符设备和块设备
Character devices:
  1 mem
  4 /dev/vc/0
  4 tty
  4 ttyS
  5 /dev/tty
  5 /dev/console
  5 /dev/ptmx
  7 vcs
 10 misc
Block devices:
259 blkext
  8 sd
  9 md
 65 sd
 66 sd
 67 sd
 68 sd
 69 sd
 70 sd
 71 sd
128 sd
129 sd
130 sd
mknod命令

用于创建Linux中的字符设备文件和块设备文件。

man mknod
NAME
       mknod - make block or character special files

SYNOPSIS
       mknod [OPTION]... NAME TYPE [MAJOR MINOR]

DESCRIPTION
       Create the special file NAME of the given TYPE.

       Mandatory arguments to long options are mandatory for short options too.

       -m, --mode=MODE
              set file permission bits to MODE, not a=rw - umask

       -Z     set the SELinux security context to default type

       --context[=CTX]
              like  -Z, or if CTX is specified then set the SELinux or SMACK security con‐
              text to CTX

       --help display this help and exit

Both MAJOR and MINOR must be specified when TYPE is b, c, or u, and  they  must  be
       omitted  when TYPE is p.  If MAJOR or MINOR begins with 0x or 0X, it is interpreted
       as hexadecimal; otherwise, if it begins with 0, as octal;  otherwise,  as  decimal.
       TYPE may be:

       b      create a block (buffered) special file

       c, u   create a character (unbuffered) special file

       p      create a FIFO

主要参数
-Z:设置安全的上下文;
-m:设置权限模式;
FIFO:First Input First Output的缩写,先入先出队列,这是一种传统的按序执行方法,
先进入的指令先完成并引退,跟着才执行第二条指令。
跟去超市买菜差不多,先排队的先结账离开,然后轮到下一个。

相关文章

  • 字符设备和块设备

    字符设备 提供连续的数据流,是一个线性设备,应用程序可以顺序读取,通常不支持随机存取。相反,此类设备支持按字节/字...

  • 磁盘结构和读写

    IO设备分为块设备和字符设备。磁盘属于前者,键盘和打印机属于后者(以字符为单位传输)。 块设备的基本特征是将数据存...

  • Linux设备驱动简介

    linux中三种驱动设备 linux系统将设备分为3类:字符设备、块设备、网络设备。 字符设备字符设备是能够像字节...

  • 字符设备、块设备与网络设备

    在Linux中,设备类型可以分为:字符设备、块设备和网络设备。 1 字符设备 提供连续的数据流,应用程序可以顺序读...

  • CPU 与外设通信

    2018.04.17 IO 设备分为块设备、字符设备。 块设备:U 盘、硬盘、CD。数据存储在固定大小的块中,有地...

  • [现代操作系统] I/O之硬件原理

    I/O 硬件原理 I/O 设备块设备(block device)字符设备(character device) 设备...

  • Linux设备驱动

    Linux设备文件自动生成 Linux字符设备驱动 Linux块设备驱动 Linux混杂设备驱动 - 按键设备驱动...

  • Linux磁盘和分区管理

    一、设备 在Linux中,一切皆“文件”。 设备分为:块设备(b):block,块文件存储,例如磁盘;字符设备(c...

  • Linux入门09-Linux根文件系统层级标准FHS

    学习了Linux目录体系结构,理解Linux设备、字符设备、块设备基本概念。

  • Linux磁盘及文件系统管理

    1. 关于设备文件 设备有两种类型: 块(block)和字符(character)块为随机访问,数据交换单位是"块...

网友评论

      本文标题:字符设备和块设备

      本文链接:https://www.haomeiwen.com/subject/lcukuftx.html