dev是设备(device)的英文缩写。/dev这个目录对所有的用户都十分重要。因为 在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序,这一点和windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。
设备文件分为两种:块设备文件(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博客
比如 /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
modprobe
rmmod
如果想设计代码实现对/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
本篇博客分析了字符设备。