Как создаются файлы "/dev" Linux?

GNU grep может сделать это довольно просто. Из man grep :

Два регулярных выражения могут быть соединены инфиксным оператором |; результирующее регулярное выражение соответствует любой строке, соответствующей любому подвыражению.

grep "ERROR\|FAIL\|WARN" /path/to/example.log

egrep устраняет необходимость экранирования символов | .

egrep "ERROR|FAIL|WARN" /path/to/example.log
112
04.09.2016, 00:18
1 ответ

mount -t devtmpfs

Во многих современных системах /devобычно является типом файловой системы, который можно монтировать куда угодно. Например. в Ubuntu 16.04:

mkdir d
sudo mount -t devtmpfs none d
head -c 10 d/random
sudo umount d

и теперь d/содержит то же самое, что и /dev.

Это разрешено CONFIG_DEVTMPFS=yи позволяет ядру самому создавать и уничтожать файлы устройств по мере необходимости.

CONFIG_DEVTMPFS_MOUNT=y

Этот параметр заставляет ядро ​​автоматически -монтировать devtmpfs на /devво время загрузки. Например, он включен в Ubuntu 21.04.

drivers/base/Kconfigдокументы:

config DEVTMPFS_MOUNT
    bool "Automount devtmpfs at /dev, after the kernel mounted the rootfs"
    depends on DEVTMPFS
    help
      This will instruct the kernel to automatically mount the
      devtmpfs filesystem at /dev, directly after the kernel has
      mounted the root filesystem. The behavior can be overridden
      with the commandline parameter: devtmpfs.mount=0|1.
      This option does not affect initramfs based booting, here
      the devtmpfs filesystem always needs to be mounted manually
      after the rootfs is mounted.
      With this option enabled, it allows to bring up a system in
      rescue mode with init=/bin/sh, even when the /dev directory
      on the rootfs is completely empty.

file_operations

Наконец, вы должны создать свой собственный модуль ядра символьного устройства, чтобы точно видеть, что происходит.

Вот минимальный исполняемый пример.:Как работают символьные устройства или специальные файлы символов?

Наиболее важным шагом является настройка структуры file_operations, например.:

static const struct file_operations fops = {
   .owner = THIS_MODULE,
   .read = read,
   .open = open,
};

static int myinit(void)
{
    major = register_chrdev(0, NAME, &fops);
    return 0;
}

, который содержит указатели на функции, которые вызываются для каждого системного вызова, -связанного с файлом.

Затем становится очевидным, что вы переопределяете системные вызовы, связанные с файлом -, чтобы делать все, что вы хотите, и таким образом ядро ​​реализует такие устройства, как /dev/zero.

Создать /devзаписи автоматически безmknod

Последняя загадка заключается в том, как ядро ​​автоматически создает /devзаписи.

Механизм можно наблюдать, создав модуль ядра, который делает это самостоятельно, как показано в :https://stackoverflow.com/questions/5970595/how-to-create-a-device-node-from-the-init-module-code-of-a-linux-kernel-module/45531867#45531867, и сводится к вызову device_create.

2
27.01.2020, 19:29

Теги

Похожие вопросы