1. Introduction
dev est l'abréviation anglaise de device. Le répertoire /dev est très important pour tous les utilisateurs. Parce que ce répertoire contient tous les périphériques externes utilisés dans le système Linux. Mais ici, ce n'est pas le pilote du périphérique externe, qui est différent des systèmes d'exploitation Windows et DOS. C'est en fait un port pour accéder à ces périphériques externes. Nous pouvons accéder à ces périphériques externes très facilement, ce qui n'est pas différent de l'accès à un fichier ou à un répertoire.
2. Répertoire /dev
Il existe deux types de fichiers de périphérique : les fichiers de périphérique en mode bloc (b) et les fichiers de périphérique en mode caractère (c). Les fichiers de périphérique sont généralement stockés dans le répertoire /dev.
Fichiers de périphérique communs :
/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:随机数设备
Pour une interprétation plus détaillée, voir :
Créer une méthode de périphérique de caractère
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
Pour supprimer un périphérique de caractères, utilisez rmmod.
Référence de signification de bas niveau pour la création de périphériques de caractères
[3] Comment créer un périphérique de caractère
3. Interface
Par exemple, /dev/sda signifie le premier disque SCSI/IDE et /dev/vda signifie le premier disque virtio. Le programme d'application accède à ces équipements en accédant à ces fichiers d'équipement en tant que fichiers d'exploitation. Les interfaces utilisables incluent :
int open(const char *path, int oflag, ... )
int close(int fd);
ssize_t écriture(int fd, const void *buf, size_t nbyte)
ssize_t lire(int fd, void *buf, size_t nbyte)
int ioctl(int d, int requête, ...)
Sur les systèmes Linux, les pilotes de périphérique peuvent être chargés et supprimés dynamiquement
lsmod - liste les modules actuellement chargés
insmod <module_file> - insère/charge le fichier de module spécifié
modprobe <module> - insère/charge le module spécifié et toutes les dépendances
rmmod <module> - supprime/décharge un module spécifique
Si vous voulez concevoir du code pour lire et écrire /dev/*, vous pouvez apprendre du code en langage C de ce blog
Si vous souhaitez utiliser le périphérique de nombre aléatoire pour générer des nombres aléatoires hexadécimaux
#!/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
Résultats de test:
# 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. Enfin
Ce blog analyse les dispositifs de caractère.