mount -t devtmpfs
Modern sistemlerde /dev
normalde istediğiniz yere monte edilebilen bir dosya sistemi türüdür. Ubuntu 16.04:
mkdir d
sudo mount -t devtmpfs none d
head -c 10 d/random
sudo umount d
Bu, etkinleştirilir CONFIG_DEVTMPFS=y
ve çekirdeğin gerektiğinde aygıt dosyaları oluşturmasını ve yok etmesini sağlar.
CONFIG_DEVTMPFS_MOUNT=y
Bu seçenek, çekirdeğin otomatik montaj devtmpf'lerini açık hale getirir /dev
.
drivers/base/Kconfig
belgeler:
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
Sonunda, tam olarak ne olduğunu görmek için kendi karakter cihazı çekirdek modülünüzü oluşturmalısınız.
İşte minimal bir çalıştırılabilir örnek: Karakter aygıtı (veya karakter özel) dosyalarını anlama
En önemli adım, file_operations
yapıyı ayarlamaktır , örneğin:
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;
}
her dosya ile ilgili sistem çağrısı için çağrılan işlev işaretçilerinden oluşur.
Ardından, dosya bağlantılı sistem çağrıları istediğinizi yapmak için yapılan aramaları geçersiz kıldığınızı ve böylece çekirdeğin bu gibi aygıtları nasıl uygulayacağını açıkça ortaya çıkarır /dev/zero
.
/dev
Girişleri otomatik olarak olmadan oluşturmknod
Son gizem, çekirdeğin otomatik olarak /dev
girdileri nasıl oluşturduğu .
Mekanizma, kendiniz için yaptığınız gibi bir çekirdek modülü yapılarak görülebilir: https://stackoverflow.com/questions/5970595/how-to-create-a-device-node-from-the-init-module- linux-çekirdek-modülü / 45531867 # 45531867 ve bir device_create
çağrı geliyor .