linux 中字符设备(/dev)

1.前言

        dev是设备(device)的英文缩写。/dev这个目录对所有的用户都十分重要。因为 在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序,这一点和windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。

2./dev目录

设备文件分为两种:块设备文件(b)和字符设备文件(c),设备文件一般存放在/dev目录下。

常见设备文件:

/dev/hd[a-t]:IDE设备

/dev/sd[a-z]:SCSI设备

/dev/fd[0-7]:标准软驱

/dev/md[0-31]:软raid设备

/dev/loop[0-7]:本地回环设备

/dev/ram[0-15]:内存

/dev/null:无限数据接收设备,相当于黑洞

/dev/zero:无限零资源

/dev/tty[0-63]:虚拟终端

/dev/ttyS[0-3]:串口

/dev/lp[0-3]:并口

/dev/console:控制台

/dev/fb[0-31]:framebuffer

/dev/cdrom => /dev/hdc

/dev/modem => /dev/ttyS[0-9]

/dev/pilot => /dev/ttyS[0-9]

/dev/random:随机数设备

/dev/urandom:随机数设备

更详细的解读可以查看:

Linux字符设备驱动详解_一只嵌入式爱好者的博客-CSDN博客

创建字符设备方法

130|zyy:/dev # mknod  /dev/zyydev  c  4090   40900
zyy:/dev # ls -l | grep zyydev
crw-rw----  1 root      root            4090, 40900 2023-03-21 16:11 zyydev

删除字符设备则使用 rmmod。

创建字符设备的底层含义参考

【3】如何创建字符设备_花一样的阿衰的博客-CSDN博客

3.接口

比如 /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/*的读写,可以借鉴这篇博客的C语言代码

进程间通信-有名管道(FIFO)_有名管道多个进程读写_flyhelloword的博客-CSDN博客

如果你想使用随机数设备生成16进制的随机数

#!/bin/bash
i=0
while [ $i -lt 10 ]
do
        data1=` printf "%x\n" $(($RANDOM%255))`
        data2=` printf "%x\n" $(($RANDOM%255))`
        echo " [$i] data is: $data1 $data2"
        sleep 0.1
        ((i++))
done

测试结果:

# sh testrandom.sh
 [0] data is: 4c ba
 [1] data is: eb 8f
 [2] data is: 54 64
 [3] data is: 8a c4
 [4] data is: 1b 4f
 [5] data is: b4 b8
 [6] data is: 37 5f
 [7] data is: 6d 2e
 [8] data is: 2c b4
 [9] data is: 6e 93

4.最后

本篇博客分析了字符设备。

猜你喜欢

转载自blog.csdn.net/qq_33163046/article/details/130697325