public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Kay Sievers <kay.sievers@vrfy.org>
To: linux-kernel <linux-kernel@vger.kernel.org>
Cc: Greg KH <greg@kroah.com>, Jan Blunck <jblunck@suse.de>
Subject: Re: [PATCH] driver-core: devtmpfs - driver core maintained /dev tmpfs
Date: Wed, 06 May 2009 14:56:38 +0200	[thread overview]
Message-ID: <1241614598.3319.28.camel@poy> (raw)
In-Reply-To: <1241097822.2516.3.camel@poy>

On Thu, 2009-04-30 at 15:23 +0200, Kay Sievers wrote:
> From: Kay Sievers <kay.sievers@vrfy.org>
> Subject: driver-core: devtmpfs - driver core maintained /dev tmpfs

Below are some numbers. Appended the used initramfs /init script, which
gets very simple with devtmpfs, compared what we need do today to handle
and fill an empty /dev after mounting its own tmpfs there.

This simple initramfs example still supports udev by-{label,uuid,id} device
name links, and other setups which need udev to find/setup/assemble
the root device.

Thanks,
Kay


kvm: initramfs mount-by-label
[    2.018622] Freeing unused kernel memory: 2172k freed
[    2.034799] initramfs: starting ...
[    2.093656] initramfs: looking for /dev/disk/by-label/root
[    2.121746] initramfs: starting udev
[    2.141221] udev: starting version 142
[    2.223777] initramfs: trigger block events
[    2.465649] initramfs: mounting /dev/disk/by-label/root
[    2.937051] kjournald starting.  Commit interval 5 seconds
[    2.941167] EXT3 FS on sda1, internal journal
[    2.962522] EXT3-fs: mounted filesystem with writeback data mode.
[    3.122292] initramfs: switching to root filesystem /dev/disk/by-label/root and start /bin/bash

kvm: initramfs mount-by-kernel-node
[    1.939865] Freeing unused kernel memory: 2172k freed
[    1.957918] initramfs: starting ...
[    2.226510] initramfs: looking for /dev/sda1
[    2.249192] initramfs: mounting /dev/sda1
[    2.731584] kjournald starting.  Commit interval 5 seconds
[    2.736040] EXT3 FS on sda1, internal journal
[    2.779422] EXT3-fs: mounted filesystem with writeback data mode.
[    2.866554] initramfs: switching to root filesystem /dev/sda1 and start /bin/bash

kvm: direct kernel mount
[    2.425663] kjournald starting.  Commit interval 5 seconds
[    2.434656] EXT3 FS on sda1, internal journal
[    2.506279] EXT3-fs: mounted filesystem with writeback data mode.
[    2.517395] VFS: Mounted root (ext3 filesystem) on device 259:524288.
[    2.550488] devtmpfs: mounted
[    2.555379] Freeing unused kernel memory: 2172k freed

real box: initramfs and mount-by-label
[    1.513740] Freeing unused kernel memory: 2172k freed
[    1.519782] initramfs: starting ...
[    1.532795] initramfs: looking for /dev/disk/by-label/root
[    1.533226] initramfs: starting udev
[    1.537925] initramfs: trigger block events
[    1.538715] udev: starting version 142
[    1.647484] initramfs: mounting /dev/disk/by-label/root
[    1.657646] kjournald starting.  Commit interval 5 seconds
[    1.657804] EXT3 FS on sda1, internal journal
[    1.657864] EXT3-fs: mounted filesystem with writeback data mode.
[    1.687084] initramfs: switching to root filesystem /dev/disk/by-label/root and start /sbin/init

real box: kernel mount
[    1.329632] kjournald starting.  Commit interval 5 seconds
[    1.329756] EXT3 FS on sda1, internal journal
[    1.329814] EXT3-fs: mounted filesystem with writeback data mode.
[    1.329867] VFS: Mounted root (ext3 filesystem) on device 259:524288.
[    1.330313] devtmpfs: mounted
[    1.330377] async_waiting @ 1
[    1.330381] async_continuing @ 1 after 0 usec
[    1.330424] Freeing unused kernel memory: 2172k freed



#!/bin/sh

# minimal initramfs with persistent device name support
# requires devtmpfs support provided by the kernel

shell() {
	echo "initramfs: dropping to shell"
	exec >/dev/console 2>&1 </dev/console < /dev/console
	sh -i
}

getarg() {
	local o line
	for o in $cmdline; do
		test "$o" = "$1" && return 0
		if test "${o%%=*}" = "${1%=}"; then
			echo ${o#*=}
			return 0
		fi
	done
	return 1
}

export PATH=/sbin:/bin:/usr/sbin:/usr/bin
export TERM=linux

# console redirect
exec >/dev/kmsg 2>&1 </dev/console
echo "initramfs: starting ..."

# mount needed filesystems
mount -t proc /proc /proc >/dev/null
mount -t sysfs /sys /sys >/dev/null
mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts

# kernel commandline
read cmdline </proc/cmdline;

# root we are looking for
root=$(getarg root=)
echo "initramfs: looking for $root"

# shortcut, in case root is already there 
if test -e "$root"; then
	echo "initramfs: mounting $root"
	mount "$root" /root
	mounted=yes
fi

# we need to start udev to create the symlink we are looking for
if test -z "$mounted"; then
	echo "initramfs: starting udev"
	udevd --daemon --resolve-names=never
	# create links for already existing block devices
	echo "initramfs: trigger block events"
	udevadm trigger --subsystem-match=block
	udevadm settle --timeout=3

	# try if the link is there now
	if test -e "$root"; then
		echo "initramfs: mounting $root"
		mount "$root" /root
		mounted=yes
	fi

	if test -z "$mounted"; then
		# load modules to let the root device show up
		echo "initramfs: trigger module events"
		udevadm trigger --attr-match=modalias

		echo "initramfs: waiting for $root"
		# loop until root shows up
		while test -z "$mounted"; do
			if test -e "$root"; then
				echo "initramfs: mounting $root"
				mount "$root" /root && mounted=yes
			fi
			sleep 0.05
		done
	fi

	# kill udev
	kill $(pidof udevd) >/dev/null 2>&1
fi

# move filesystems over to the mounted root
mount --move /dev /root/dev
mount --move /proc /root/proc
mount --move /sys /root/sys

# move into root
cd /root
init=$(getarg init=)
test -z "$init" && init=/sbin/init
echo "initramfs: switching to root filesystem $root and start $init"
exec run-init -c /dev/console /root $init



  parent reply	other threads:[~2009-05-06 12:56 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-30 13:23 [PATCH] driver-core: devtmpfs - driver core maintained /dev tmpfs Kay Sievers
2009-05-01  5:29 ` Andrew Morton
2009-05-01  6:17   ` Greg KH
2009-05-01  6:43     ` Andrew Morton
2009-05-01  6:55       ` Greg KH
2009-05-01  7:03         ` Andrew Morton
2009-05-01 10:52           ` Kay Sievers
2009-05-01 11:38             ` Michael Tokarev
2009-05-01 11:44               ` Kay Sievers
2009-05-01 11:03         ` Alan Cox
2009-05-01 11:11           ` Kay Sievers
2009-05-01 13:18             ` Alan Cox
2009-05-01 13:24               ` Kay Sievers
2009-05-02  7:19                 ` Christoph Hellwig
2009-05-02 13:46                   ` Kay Sievers
2009-05-02 15:18                     ` Andy Lutomirski
2009-05-02 15:35                       ` Kay Sievers
2009-05-02 18:20                 ` Michael Riepe
2009-05-02 19:55                   ` Alan Jenkins
2009-05-02 21:47                     ` Kay Sievers
2009-05-04 16:20                       ` Lars Marowsky-Bree
2009-05-04 16:53                         ` Kay Sievers
2009-05-04 17:54                           ` Michael Riepe
2009-05-04 18:13                             ` Kay Sievers
2009-05-04 18:55                               ` Michael Riepe
2009-05-04 19:13                                 ` Kay Sievers
2009-05-04 19:30                                 ` Greg KH
2009-05-02  1:24         ` Brian Swetland
2009-05-02  1:48           ` Kay Sievers
2009-05-02  2:02             ` Brian Swetland
2009-05-02  2:28               ` Kay Sievers
2009-05-02  4:42                 ` Brian Swetland
2009-05-02 13:30                   ` Kay Sievers
2009-05-01 11:01     ` Alan Cox
2009-05-01 11:02       ` Kay Sievers
2009-05-01 11:16   ` Kay Sievers
2009-05-01 19:26     ` Andrew Morton
2009-05-01 21:59       ` Kay Sievers
2009-05-01 22:21         ` Andrew Morton
2009-05-01  6:57 ` Chris Wedgwood
2009-05-01 14:01   ` Greg KH
2009-05-01 15:43     ` Alan Jenkins
2009-05-01 16:04       ` Greg KH
2009-05-01 21:13         ` Alan Jenkins
2009-05-01 15:53     ` Chris Wedgwood
2009-05-01 16:09       ` Greg KH
2009-05-01 16:17         ` Chris Wedgwood
2009-05-01 10:19 ` Alan Jenkins
2009-05-01 11:13   ` Kay Sievers
2009-05-01 12:38     ` Alan Jenkins
2009-05-01 13:12       ` Alan Cox
2009-05-02 15:03         ` Kyle Moffett
2009-05-01 14:55       ` Kay Sievers
2009-05-01 11:41 ` Hugh Dickins
2009-05-01 11:59   ` Kay Sievers
2009-05-02  7:16 ` Christoph Hellwig
2009-05-02 11:34   ` Kay Sievers
2009-05-02 20:22     ` Alan Jenkins
2009-05-02 21:39       ` Kay Sievers
2009-05-02 22:04         ` Alan Jenkins
2009-05-03  7:29           ` Michael Tokarev
2009-05-02 21:41       ` Alan Jenkins
2009-05-02 21:54         ` Greg KH
2009-05-02 21:59         ` Kay Sievers
2009-05-02 16:59   ` Jeff Garzik
2009-05-02 17:57     ` Kay Sievers
2009-05-06 12:56 ` Kay Sievers [this message]
2009-05-07  1:41 ` Arjan van de Ven
2009-05-07  2:08   ` Kay Sievers
2009-05-07  2:25     ` Arjan van de Ven
2009-05-07  2:40       ` Kay Sievers
2009-05-14  9:28     ` Pavel Machek
2009-05-07  8:17 ` Eric W. Biederman
2009-05-07  9:28   ` Kay Sievers
2009-05-07 14:43     ` Theodore Tso
2009-05-07 15:13       ` Kay Sievers
2009-05-10  0:29     ` Eric W. Biederman
2009-05-10  0:56       ` Kay Sievers
2009-05-10  2:11         ` Eric W. Biederman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1241614598.3319.28.camel@poy \
    --to=kay.sievers@vrfy.org \
    --cc=greg@kroah.com \
    --cc=jblunck@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox