All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <greg@kroah.com>
To: linux-hotplug@vger.kernel.org
Subject: Re: udev on Fedore 5
Date: Thu, 03 Aug 2006 08:39:06 +0000	[thread overview]
Message-ID: <20060803083906.GA29339@kroah.com> (raw)
In-Reply-To: <1154582086.8839.42.camel@piet2.bluelane.com>

On Wed, Aug 02, 2006 at 10:14:46PM -0700, Piet Delaney wrote:
> I wasn't able to login to your Fedora 5 (10.10.111.220).
> I tried my AMD hammer at home (hammer.piet.net) and looked
> at the Fedora 5 udev scripts. I can't see what the gento 
> /sbin/start_udev might be doing to boost Performance so much
> and didn't see the udev daemon stuff we saw on your system.
> Perhaps it's probing the modules to pre-awaken them. I'm not
> using modules, so I doubt it would have an effect.

The gentoo script for startup is attached below.  It picks it's startup
logic depending on the kernel version running.

Hope this helps,

greg k-h

------------------
# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

udev_version() {
	local version=0

	if [[ -x /sbin/udev ]] ; then
		version=$(/sbin/udev -V)
		# We need it without a leading '0', else bash do the wrong thing
		version=${version##0}
		# Older udev's will print nothing
		[[ -z ${version} ]] && version=0
	fi

	echo "${version}"
}

# This works for 2.6.15 kernels or greater
trigger_events() {
	list=""
	# if you want real coldplug (with all modules being loaded for all
	# devices in the system), uncomment out the next line.
	#list="$list $(echo /sys/bus/*/devices/*/uevent)"
	list="$list $(echo /sys/class/*/*/uevent)"
	list="$list $(echo /sys/block/*/uevent /sys/block/*/*/uevent)"
	for i in $list; do
		case "$i" in
			*/device/uevent)
				# skip followed device symlinks
				continue
				;;
			*/class/mem/*|*/class/tty/*)
				first="$first $i"
				;;
			*/block/md*)
				last="$last $i"
				;;
			*/*)
				default="$default $i"
				;;
		esac
	done

	# trigger the sorted events
	for i in $first $default $last; do
		echo "add" > "$i"
	done
}

populate_udev() {
	# populate /dev with devices already found by the kernel
	if [ "$(get_KV)" -gt "$(KV_to_int '2.6.14')" ] ; then
		ebegin "Populating /dev with existing devices through uevents"
		udevtrigger
		eend 0
	else
		ebegin "Populating /dev with existing devices with udevstart"
		/sbin/udevstart
		eend 0
	fi

	# loop until everything is finished
	# there's gotta be a better way...
	ebegin "Letting udev process events"
	loop=0
	while test -d /dev/.udev/queue; do
		sleep 0.1;
		test "$loop" -gt 300 && break
		loop=$(($loop + 1))
	done
	#einfo "loop = $loop"
	eend 0

	return 0
}

seed_dev() {
	# Seed /dev with some things that we know we need
	ebegin "Seeding /dev with needed nodes"

	# copy over any persistant things
	if [[ -d /lib/udev/devices ]] ; then
		cp --preserve=all --recursive --update /lib/udev/devices/* /dev
	fi

	# Not provided by sysfs but needed
	ln -snf /proc/self/fd /dev/fd
	ln -snf fd/0 /dev/stdin
	ln -snf fd/1 /dev/stdout
	ln -snf fd/2 /dev/stderr
	[[ -e /proc/kcore ]] && ln -snf /proc/kcore /dev/core

	# Create problematic directories
	mkdir -p /dev/{pts,shm}
	eend 0
}


main() {
	# Setup temporary storage for /dev
	ebegin "Mounting /dev for udev"
	if [[ ${RC_USE_FSTAB} = "yes" ]] ; then
		mntcmd=$(get_mount_fstab /dev)
	else
		unset mntcmd
	fi
	if [[ -n ${mntcmd} ]] ; then
		try mount -n ${mntcmd}
	else
		if egrep -qs tmpfs /proc/filesystems ; then
			mntcmd="tmpfs"
		else
			mntcmd="ramfs"
		fi
		# many video drivers require exec access in /dev #92921
		try mount -n -t ${mntcmd} udev /dev -o exec,nosuid,mode\a55
	fi
	eend $?

	# Create a file so that our rc system knows it's still in sysinit.
	# Existance means init scripts will not directly run.
	# rc will remove the file when done with sysinit.
	touch /dev/.rcsysinit

	# Selinux lovin; /selinux should be mounted by selinux-patched init
	if [[ -x /sbin/restorecon && -c /selinux/null ]] ; then
		restorecon /dev &> /selinux/null
	fi

	# Actually get udev rolling
	if [[ ${RC_DEVICE_TARBALL} = "yes" && \
	      -s /lib/udev-state/devices.tar.bz2 ]] ; then
		ebegin "Populating /dev with saved device nodes"
		try tar -jxpf /lib/udev-state/devices.tar.bz2 -C /dev
		eend $?
	fi

	seed_dev

	# Setup hotplugging (if possible)
	ebegin "Setting up proper hotplug agent"
	if [[ -e /proc/sys/kernel/hotplug ]] ; then
		if [ "$(get_KV)" -gt "$(KV_to_int '2.6.14')" ] ; then
			einfo "  Using netlink for hotplug events..."
			echo "" > /proc/sys/kernel/hotplug
		elif [[ $(udev_version) -ge "48" ]] ; then
			einfo "  Setting /sbin/udevsend as hotplug agent ..."
			echo "/sbin/udevsend" > /proc/sys/kernel/hotplug
		elif [[ -x /sbin/hotplug ]] ; then
			einfo "  Using /sbin/hotplug as hotplug agent ..."
		else
			einfo "  Setting /sbin/udev as hotplug agent ..."
			echo "/sbin/udev" > /proc/sys/kernel/hotplug
		fi
	fi
	eend 0

	ebegin "Starting udevd"
	/sbin/udevd --daemon
	eend $?

	populate_udev

	# Create nodes that udev can't
	ebegin "Finalizing udev configuration"
	[[ -x /sbin/dmsetup ]] && /sbin/dmsetup mknodes &>/dev/null
	[[ -x /sbin/lvm ]] && \
		/sbin/lvm vgscan -P --mknodes --ignorelockingfailure &>/dev/null
	# Running evms_activate on a LiveCD causes lots of headaches
	[[ -z ${CDBOOT} ]] && [[ -x /sbin/evms_activate ]] && \
		/sbin/evms_activate -q &>/dev/null
	eend 0
}

main


# vim:ts=4

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CIDÞVDEV
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

      reply	other threads:[~2006-08-03  8:39 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-03  5:14 udev on Fedore 5 Piet Delaney
2006-08-03  8:39 ` Greg KH [this message]

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=20060803083906.GA29339@kroah.com \
    --to=greg@kroah.com \
    --cc=linux-hotplug@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.