mount -t devtmpfs
현대 시스템에서는 /dev
일반적으로 원하는 곳에 마운트 할 수있는 파일 시스템 유형이라는 것도 흥미 롭습니다 . 우분투 16.04 :
mkdir d
sudo mount -t devtmpfs none d
head -c 10 d/random
sudo umount d
이것은에 의해 활성화되며 CONFIG_DEVTMPFS=y
커널 자체가 필요에 따라 장치 파일을 생성하고 파괴 할 수 있도록합니다.
CONFIG_DEVTMPFS_MOUNT=y
이 옵션은 커널을 devtmpfs에 자동 마운트합니다 /dev
.
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
호출로 연결됩니다.