每日精进:块设备和字符设备

283 阅读1分钟

背景

在类UNIX系统中经常会听到块设备(block device)和字符设备(character device)的概念,它们是一个什么样的概念呢,我们来探讨一下

使用语境

比如,在*OS internals卷一第3章Disk Images这一节中讲到在挂载DMG文件时需要创建(on-the-fly)即时的块设备以支撑这次挂载,那要理解这个场景就需要对块设备本身有所了解,才能知道为什么要创建块设备,以及为什么要选择使用块设备

块设备&字符设备

块设备和字符设备的差别

这两种设备有所有UNIX系统中两个主要的类型: 字符设备,是一种其驱动支持发送和接收单个字符(bytes, octets)来进行通信的设备. 比如 - 串口(serial ports), 并口(parallel ports), 声卡(sound cards), 键盘(keyboard).

块设备,是一种其驱动通过发送整块blocks数据来进行通信的设备. 比如 - 硬盘(hard disks), USB相机(cameras), Disk-On-Key.

(需要注意的是: 文件系统只能通过块设备挂载.)

回到开头的语境

所以在用户下载了DMG文件之后,因为DMG中是一个完整的文件系统的镜像,所以需要先挂载到系统后才能读取其中的内容,而文件系统挂载只支持块设备,所以需要创建即时的块设备以支撑这次挂载

字符设备的源代码保存在drivers/char/, 块设备的源代码保存在drivers/block/

参考

1. The Linux Kernel, Kernel Modules And Hardware Drivers

2. Device Driver Basics

3. Drivers