linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Brendan Moran" <bremoran@broadcom.com>
To: linux-hotplug@vger.kernel.org
Subject: Re: Migrating from static /dev to udev
Date: Mon, 28 Sep 2009 16:09:30 +0000	[thread overview]
Message-ID: <4AC0DFBA.6090104@broadcom.com> (raw)
In-Reply-To: <4ABD467F.7010901@broadcom.com>

[-- Attachment #1: Type: text/plain, Size: 2881 bytes --]

Hi Alan,
I'm using virtually the same startup script as is used in Ubuntu 
(attached).  It only uses $udevadm trigger, with no arguments.  I didn't 
expect that permissions would be an issue, as this system is running in 
single user mode.

Mounting /dev as a tmpfs makes perfect sense to me, however I'll have to 
do some hacking before I can modify that.  I have a list of all the 
devices to be created and placed in /dev already.  Currently, it's 
expanded at compile time, but I should be able to change the target from 
/dev to /lib/udev/devices.

One additional thing that I need to do while migrating away from a 
static /dev is to convert our current naming scheme for devices to one 
which is consistent with the naming that udev uses by default.

Thanks again,
Brendan

Alan Jenkins wrote:
> Hi
>
> On 9/25/09, Brendan Moran <bremoran@broadcom.com> wrote:
>   
>> Hi,
>> I'm trying to migrate an armeb embedded Linux build from a static /dev
>> to udev.  I now have the system coming up with udev enabled, but the
>> first thing that udev does is disable my console connection.  Before the
>> console starts endlessly spewing "file not found" messages,
>>     
>
> Ow.  Often that means you've either deleted or removed access
> permissions to /dev/null.  Maybe the same has happened to /dev/tty or
> something as well.  It suggests that your rules are failing to assign
> permissions to these devices, so udev is giving them default
> permissions which are too restrictive.
>
>   
>> udev prints
>> a line like this
>>
>>     tty ttyAMA0: uevent: unsupported action-string; this will be ignored
>>     in a futur
>>
>> for nearly every device that was in the previous static /dev.
>>     
>
> Aha.  That's a kernel message, not a udev one.  It suggests you're doing this:
>
> udevadm trigger --action=uevent
>
> when you should be doing this:
>
> udevadm trigger --action=add
>
> ("udevadm trigger" should also work since --action=add is the default).
>
>   
>> I understand that I can add static rules to udev to fix this, but I also
>> want to migrate naming conventions to standard names--ttyAMA0 should be
>> ttyS0, etc.  I can keep legacy names around with symlinks if necessary.
>>     
>
> I suspect this is not relevant to your problems.  Udev doesn't delete
> the previous contents of /dev.  There should only be problems if the
> names conflict, so that udev overwrites one of your existing nodes
> with something you're not expecting.
>
> (Btw, in case you're not already doing this, the README recommends you
> mount /dev as a tmpfs and initialize it by copying all your static
> devices from /lib/udev/devices).
>
>   
>> So I'm not quite sure how to get started.  I have disabled udev's
>> startup for the moment, so I can get into /sys.  Is there a guide
>> somewhere on how to migrate from a static /dev to udev?
>>
>> Thanks,
>> Brendan
>>     
>
>   

[-- Attachment #2: udev --]
[-- Type: text/plain, Size: 4522 bytes --]

#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          udev
# Required-Start:    mountkernfs
# Required-Stop:
# Should-Start:
# Default-Start:     S
# Default-Stop:
# Short-Description: Start the udev daemon.
# Description:       Mounts the /dev virtual filesystem, starts the udev
#                    daemon and populates /dev.
### END INIT INFO

# Check the package is still installed
[ -x /sbin/udevd ] || exit 0

# Get LSB functions
. /lib/lsb/init-functions
if [ -e /etc/default/rcS]; then
. /etc/default/rcS
fi


case "$1" in
    start)
	DEVMOUNT=`mount | grep "on /dev " | cut -d " " -f 1`
	# We need the uevent support introduced in 2.6.15, bail out if we
	# don't have it and fall back to a static /dev
	if [ ! -f /sys/class/mem/null/uevent ]; then
	    if [ -n $DEVMOUNT ]; then
		# uh-oh, initramfs made some kind of /dev, get rid of it
		umount -l /dev
	    fi
	    exit 1
	fi
	
	if [ -z $DEVMOUNT ]; then
	    # initramfs didn't mount /dev, so we'll need to do that
	    mount -n -t tmpfs -o mode=0755 udev /dev
	fi

	# Copy over default device tree
	if [ -d /lib/udev/devices ]; then
		DEVICELIST=`ls /lib/udev/devices`
		if [ -n $DEVICELIST ]; then
			cp -a -f /lib/udev/devices/* /dev
		fi
	fi	

	# It's all over netlink now
	if [ -e /proc/sys/kernel/hotplug ]; then
	    echo "" > /proc/sys/kernel/hotplug
	fi
	
	# Start udevd
	log_begin_msg "Starting kernel event manager..."
	#if start-stop-daemon --start --quiet --exec /sbin/udevd -- --daemon; then
	/sbin/udevd --daemon & 
	UDEVPID=$! ; echo $UDEVPID > /var/run/udevd.pid
	if [ $UDEVPID -gt 0 ]; then
	    log_end_msg 0
	else
	    log_end_msg $?
	fi

	# This next bit can take a while
	if type usplash_write >/dev/null 2>&1; then
	    usplash_write "TIMEOUT 360" ||:
	    trap "usplash_write 'TIMEOUT 15' ||:" 0
	fi

	# Log things that trigger does
	/sbin/udevadm monitor -e >/dev/.udev.log &
	UDEV_MONITOR_PID=$!

	# Fix permissions and missing symlinks/programs for devices made in
	# initramfs, and catch up on everything we missed
	log_begin_msg "Loading hardware drivers..."
	/sbin/udevadm trigger
	if /sbin/udevadm settle; then
	    log_end_msg 0
	else
	    log_end_msg $?
	fi

	# Kill the udev monitor again
	kill $UDEV_MONITOR_PID
	;;
    stop)
	log_begin_msg "Stopping kernel event manager..."
	#if start-stop-daemon --stop --quiet --oknodo --exec /sbin/udevd --retry 5; then
	if [ -e /var/run/udevd.pid ]; then 
		UDEVPID=`cat /var/run/udevd.pid`
	else 
		UDEVPID=`ps | grep udevd | cut -d " " -f 3`
		if [ -z "$UDEVPID" ]; then
			echo "udev not running"		
			exit 0;
		fi
	fi
	if kill $UDEVPID ; then
	    log_end_msg 0
	else
	    log_end_msg $?
	fi
	umount -l /dev
	;;
    restart)
	if [ ! -f /sys/kernel/uevent_seqnum ]; then
	    echo "Kernel uevent sequence number not available, cowardly not restarting udev" 1>&2
	    exit 0
	fi

	seqnum_before=$(cat /sys/kernel/uevent_seqnum)

 	log_begin_msg "Stopping kernel event manager..."
	#if start-stop-daemon --stop --quiet --oknodo --exec /sbin/udevd --retry 5; then
	if [ -e /var/run/udevd.pid ]; then 
		UDEVPID=`cat /var/run/udevd.pid`
	else 
		UDEVPID=`ps | grep udevd | cut -d " " -f 3`
		if [ -z "$UDEVPID" ]; then
			echo "udev not running"		
			exit 0;
		fi
	fi
		
	
	if kill $UDEVPID ; then
	    log_end_msg 0
	else
	    log_end_msg $?
	fi

	log_begin_msg "Starting kernel event manager..."
	#if start-stop-daemon --start --quiet --exec /sbin/udevd -- --daemon; then
	/sbin/udevd --daemon & 
	UDEVPID=$! ; echo $UDEVPID > /var/run/udevd.pid
	if [ $UDEVPID -gt 0 ]; then	
	    log_end_msg 0
	else
	    log_end_msg $?
	fi

	seqnum_after=$(cat /sys/kernel/uevent_seqnum)

	if [ $seqnum_before -ne $seqnum_after ]; then
	    echo "Kernel uevent sequence number changed, some events may have been missed :o(" 1>&2
	fi
	;;
    refresh-devices)
	cp -au /lib/udev/devices/* /dev

	log_begin_msg "Loading additional hardware drivers..."
	/sbin/udevadm trigger
	if /sbin/udevadm settle; then
	    log_end_msg 0
	else
	    log_end_msg $?
	fi
	;;
    reload|force-reload)
	log_begin_msg "Reloading kernel event manager..."
	#if start-stop-daemon --stop --signal 1 --exec /sbin/udevd; then
	if [ -e /var/run/udevd.pid ]; then 
		UDEVPID=`cat /var/run/udevd.pid`
	else 
		UDEVPID=`ps | grep udevd | cut -d " " -f 3`
		if [ -z "$UDEVPID" ]; then
			echo "udev not running"		
			exit 0;
		fi
	fi
	if kill -1 $UDEVPID ; then
	    log_end_msg 0
	else
	    log_end_msg $?
	fi
	;;
*)
	echo "Usage: /etc/init.d/udev {start|stop|restart|refresh-devices|reload|force-reload}"
	exit 1
	;;
esac

exit 0

  parent reply	other threads:[~2009-09-28 16:09 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-25 22:38 Migrating from static /dev to udev Brendan Moran
2009-09-25 23:06 ` Stephan Raue
2009-09-26  9:22 ` Alan Jenkins
2009-09-26 15:41 ` Greg KH
2009-09-28 16:09 ` Brendan Moran [this message]
2009-09-28 21:02 ` Alan Jenkins
2009-09-29 17:41 ` Brendan Moran
2009-09-30  3:19 ` Bryan Kadzban

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=4AC0DFBA.6090104@broadcom.com \
    --to=bremoran@broadcom.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).