前言:
Linux操作系统对于一名嵌入式工程师来说,往往是最常用的操作系统,而无论是内核工作者还是驱动开发者都会和设备打交道,浏览/driver目录,你会发现有众多子文件夹,而每个子文件夹基本都对应一个设备驱动。今天要讲的就是Linux有哪几种设备?而这也是找工作中最常被问到的问题。
字符设备(char device)
字符(char)设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性。字符设备驱动程序通常至少要实现open,close,read和write系统调用。大多数字符设备是一个个只能顺序访问的数据通道。
字符设备提供连续的数据流,应用程序可以顺序读取,通常不支持随机存取。相反,此类设备支持按字节/字符来读写数据。举例来说,键盘、串口、调制解调器都是典型的字符设备。
块设备(block device)
顾名思义,块设备不同字符设备的是应用程序可以随机访问设备数据,应用程序可以自由定位数据的位置,硬盘、闪存、CD-ROM等都是典型的块设备。数据的读写是以块(512B)的倍数操作。而块设备不支持基于字符的寻址。
网络设备(net device)
网络设备在系统中的作用类似于一个已挂载的块设备。块设备将自己注册到blk_dev数据及其他内核结构中,然后通过自己的request函数在发生请求时传输和接收数据块,同样网络设备也必须在特定的数据结构中注册自己,以便与外界交换数据包时被调用。网络设备在Linux里做专门的处理。Linux的网络系统主要是基于BSD UNIX的Socket机制。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递。系统里支持对发送数据和接收数据的缓存,提供流量控制机制,提供对多协议的支持。
以上是基本的三种设备类型,但其实在嵌入式系统内常用的还有一种设备类型,具体我们下个篇幅单独了解。