从 http://haifux.org/lectures/86-sil/kernel-modules-drivers/node10.html
字符 ('c') 设备是驱动程序通过发送和接收单个字符(字节、八位字节)与其进行通信的设备。
块(“b”)设备是驱动程序通过发送整个数据块进行通信的设备。
字符设备示例:串行端口、并行端口、声卡。
块设备示例:硬盘、USB 摄像头、Disk-On-Key。
“串口、并口”是什么意思有线串行通信和并行通信?
“串行端口”或“并行端口”是否仅适用于字符设备,而不适用于块设备?
谢谢。
答案1
虽然现代计算机上通常有多种互连,例如 USB、SATA 和 PCI/e,它们在技术上是串行的(即使在控制块式设备时也是如此),但您引用的文本更多是在并行和串行的上下文中,因为它最早用于 20 世纪的计算。
它们指的是用于将计算机与外围设备(有时是其他计算机)互连的方法。
虽然有很多变体,但最常见的“串行端口”是一次发送和/或接收一个字符的 I/O 设备,通常使用固定波特率的异步协议。通常通过 RS232 电缆。串行端口和 RS232 端口这两个术语有时可以互换使用,尽管用词不当,因为 RS-232 实际上是一种电气标准。一种常见的应用是将用户终端连接到计算机或调制解调器,用户可以通过调制解调器拨入并连接远程终端。其历史可以追溯到机电时代,例如 110 波特 ASR-33 电传打字机,它是 unix 命令和设备文件名中常见的字符串“tty”的来源。
串行端口相当慢,因此对于需要更高字符速率的用途,可以使用未串行化的并行端口。有时,打印机制造商将其称为“Centronix”端口,使其广受欢迎。
并不是说没有使用串行连接的打印机。
但正如您的报价中所使用的,串行端口和并行端口是指这两种外围设备连接方案。
因此,即使块式设备在技术上可能在某种低级别上与串行数据方法连接,但这并不是作者所指的,
答案2
“字符设备”和“块设备”是抽象,通常用于 Unix 风格的系统中对各种设备进行分类。 Unix 风格的设备节点 ( /dev/<something>
) 通常分为字符设备或块设备。
基本上,字符设备可以有意义地处理数据,即使一次处理一个字节,但块设备可以处理特定大小的块(通常为 512、1024 或 4096 字节)。如果向块设备提供不完整的块,则可能必须用零或其他合适的填充来填充它以完成该块,否则块设备可能无法完成其操作。
在 Unix 风格的系统中,磁盘通常表示为块设备。然而,在传统的 Unix 系统中,单个磁盘可能表示为两个设备:一个用于常规文件系统访问的块设备,另一个用于“原始访问”和其他特殊操作的设备:原始访问设备通常是字符设备。
在现代 Linux 中,可以通过使用标志打开常规块设备来实现原始访问O_DIRECT
,但如果从另一个 Unix 风格系统移植的应用程序特别需要专用的原始设备,则可以使用命令根据需要进行设置raw
。
另一方面,串行端口和并行端口通常指的是物理连接技术。
在PC硬件中,串行端口或者串口通常指的是RS232接口(通常使用与 National Semiconductor 8250 兼容的 UART 芯片驱动)。由于它不需要固定的块大小,因此在 Unix 系统中通常将其归类为字符设备。正如名字一样串行端口意味着,该端口串行传输数据,一次一位。该端口最现代的规范称为 EIA/TIA-232。
同样在 PC 硬件中,并口,打印机端口,LPT端口或者Centronics 端口所有这些都指的是一种端口类型,其最现代的实现被标准化为 IEEE 1284。它也表示为 Unix 风格系统中的字符设备,因为它不需要固定的块大小。顾名思义,它并行传输数据:它有 8 条数据线,每一条数据线对应一个字节中的每一位。
与串行端口不同,并行端口最古老的形式基本上是单向的:计算机一次可以发送一个字节的数据,但另一端的设备只有几个固定含义的状态行可用于与计算机通讯。 (早期版本的 Linux 内核将这些状态行的无效状态组合报告为半幽默的lp<n> on fire
错误消息。)双向通信模式作为后来的增强功能得以实现。
在推出 USB 之前,并行端口可能是典型 PC 上最快的通用外部连接器。如果需要具有更快数据传输速度的外部设备,通常意味着在系统中添加专用接口卡或带有外部连接器的 SCSI 适配器卡。例如,专业平板图像扫描仪可能需要 SCSI 连接。