mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 19:00:25 +00:00
![Kay Sievers](/assets/img/avatar_default.png)
Devtmpfs lets the kernel create a tmpfs instance called devtmpfs very early at kernel initialization, before any driver-core device is registered. Every device with a major/minor will provide a device node in devtmpfs. Devtmpfs can be changed and altered by userspace at any time, and in any way needed - just like today's udev-mounted tmpfs. Unmodified udev versions will run just fine on top of it, and will recognize an already existing kernel-created device node and use it. The default node permissions are root:root 0600. Proper permissions and user/group ownership, meaningful symlinks, all other policy still needs to be applied by userspace. If a node is created by devtmps, devtmpfs will remove the device node when the device goes away. If the device node was created by userspace, or the devtmpfs created node was replaced by userspace, it will no longer be removed by devtmpfs. If it is requested to auto-mount it, it makes init=/bin/sh work without any further userspace support. /dev will be fully populated and dynamic, and always reflect the current device state of the kernel. With the commonly used dynamic device numbers, it solves the problem where static devices nodes may point to the wrong devices. It is intended to make the initial bootup logic simpler and more robust, by de-coupling the creation of the inital environment, to reliably run userspace processes, from a complex userspace bootstrap logic to provide a working /dev. Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Jan Blunck <jblunck@suse.de> Tested-By: Harald Hoyer <harald@redhat.com> Tested-By: Scott James Remnant <scott@ubuntu.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
37 lines
734 B
C
37 lines
734 B
C
/*
|
|
* Copyright (c) 2002-3 Patrick Mochel
|
|
* Copyright (c) 2002-3 Open Source Development Labs
|
|
*
|
|
* This file is released under the GPLv2
|
|
*/
|
|
|
|
#include <linux/device.h>
|
|
#include <linux/init.h>
|
|
#include <linux/memory.h>
|
|
|
|
#include "base.h"
|
|
|
|
/**
|
|
* driver_init - initialize driver model.
|
|
*
|
|
* Call the driver model init functions to initialize their
|
|
* subsystems. Called early from init/main.c.
|
|
*/
|
|
void __init driver_init(void)
|
|
{
|
|
/* These are the core pieces */
|
|
devtmpfs_init();
|
|
devices_init();
|
|
buses_init();
|
|
classes_init();
|
|
firmware_init();
|
|
hypervisor_init();
|
|
|
|
/* These are also core pieces, but must come after the
|
|
* core core pieces.
|
|
*/
|
|
platform_bus_init();
|
|
system_bus_init();
|
|
cpu_dev_init();
|
|
memory_dev_init();
|
|
}
|