简介
在linux系统下,硬件设备都是以文件的形式存在的,因而不同硬件设备有这不同的文件类型,这种文件类型叫做设备文件,设备文件在外部设备与操作系统之间提供了一个接口,这样用户使用外部设备就相当于普通文件一样。
接口
比如 /dev/sda 表示第一个 SCSI/IDE 盘,/dev/vda 表示第一个 virtio 磁盘。应用程序通过访问这些设备文件像操作文件一样来访问这些设备,可以使用的接口包括:
int open(const char *path, int oflag, ... )
int close(int fd);
ssize_t write(int fd, const void *buf, size_t nbyte)
ssize_t read(int fd, void *buf, size_t nbyte)
int ioctl(int d, int request, ...)
在 Linux 系统上,设备驱动可以被动态加载和删除
lsmod - 列出当前已经被加载的模块
insmod <module_file> - insert/load 指定的模块文件
modprobe <module> - insert/load 指定的 module,以及所有依赖
rmmod <module> - remove/unload 指定的module
常见的设备文件命名方式
/dev/fd:软驱,即软盘。fd0 代表第一软盘设备,fd1代表第二个软盘设备。
/dev/hd:IDE 磁盘。
/dev/sd:SCSI 磁盘,例如U盘,Sda1表示第一块 SCSI 设备的第一个分区, /sdc5表示第三块SCSI设备的第一个逻辑分区
/dev/tty:terminals
/dev/vd:virtio 磁盘,virtio-block 类型的设备,virtio-blk 设备的名称以 ‘vd’ 开头。从 ‘vda’ 开始递增,数目在 26 个以内时,增长至 ‘vdz’;如果超过 26,则从 ’vdaa‘ 一直增长至 ’vdzz‘;最高可以增长到 ’vdzzz‘。
名称在设备被加载后被确定,在重新加载或者系统重启后会重新生成,因此对同一个设备其名称可能会发生变化。