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
next prev 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 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.