Skip to contentSkip to conversation

UDEV from scratch for beginners - mtd device not shown in device

PATCH Clemens Koller 2 participants 4 messages Jul 11, 2005

lore
Share & tools
lore
#0 lore raw

Hello!

Well... I am pretty new to udev - forced to use the good new udev system as I need to migrate to 2.6.13. ;-)
I try to work my way through all the things google gave me to understand udev but I got stuck now somewhere in the middle:

After installing "udev from scratch" on an embedded system (not being able to follow Decibels UDEV Primer directly as I don't use any package management tools.) I still cannot get my mtd (memory technology device) node created dynamically by udev when I insert my module to the kernel.

Basically, my installation was like this:

- compiled Linux-2.6.13-rc2 w/ CONFIG_UNIX98_PTYS and CONFIG_DEVPTS_FS and CONFIG_HOTPLUG and friends.

- manually created /dev nodes on local filesystem to be able to boot and login via ssh at least:
cd /dev
mknod -m 660 console c 5 1
mknod -m 666 null c 1 3
mknod -m 666 hda b 3 0
mknod -m 666 hda1 b 3 1
mknod -m 666 hda2 b 3 2
(I guess I will have to move those manually created devices to /etc/udev/devices, right? Where is documentation for that and who is copying that to /dev and when?)

- to be able to login via ssh:
mknod /dev/ptmx c 5 2
chmod 666 /dev/ptmx
mkdir /dev/pts

- Add to /etc/fstab:
none /dev/pts devpts gid=5,mode=620 0 0
(Note: gid=5 is applicable for RedHat systems for which group "tty" has gid 5. Adjust according to your distribution. Use mode=600 if you want "mesg n" to be default.)

- mount /dev/pts

- installed hotplug-2004_09_23

- installed udev-062 with udevdir=/dev

- added mtd sections to /etc/udev/rules.d/50-udev.rules:
#KERNEL="mtd[0-9]*", NAME="mtd/%k", MODE="0666"
KERNEL="mtd*" NAME="%k", OWNER="root", GROUP="disk", MODE="0640"
(I tested both lines)

(BTW: in which order are the files in /etc/udev/rules.d processed if there are more than one? Are there any naming conventions which apply? Where is the documentation for that?)

- I've checked /udev/uevent_listen which works pretty fine while loading my mtd modules:

$ ./uevent_listen
[1121084998] received 'remove' from '/module/mminfo'
ACTION=remove
DEVPATH=/module/mminfo
SUBSYSTEM=module
SEQNUM=181

[1121085000] received 'add' from '/module/mminfo'
ACTION=add
DEVPATH=/module/mminfo
SUBSYSTEM=module
SEQNUM=182

while doing

$ rmmod mminfo
$ insmod mminfo.ko

Now I ran into the following problem while loading my module which appeared as /dev/mtd/0 and/or /dev/mtd/0ro in devfs:

Jul 11 13:33:29 ecam udevd[14647]: udevd.c: seq 177 forked, pid 14653, 2 seconds old
Jul 11 13:33:29 ecam udev[14653]: udev_rules.c: reset run list
Jul 11 13:33:29 ecam udev[14654]: udev_utils.c: exec of program '/sbin/udev_run_devd' failed
Jul 11 13:33:29 ecam udevd[14647]: udevd.c: seq 177 exit, 2 seconds old
Jul 11 13:42:32 ecam udevd[14647]: udevd.c: seq 178 queued, devpath '/module/mminfo'
Jul 11 13:42:32 ecam udevd[14647]: udevd.c: seq 178 forked, pid 14662, 0 seconds old

I patched udev_utils.c (appended, whitespaces fixed, too) to get the clue that the call to /sbin/udev_run_devd failed.

Well, there is no valuable documentation about udev_run_devd neither in writing_udev_rules nor in Decibels UDEV primer. So I decided to remove that line from the 50-udev.rules:

# emulate dev.d/
#RUN="/sbin/udev_run_devd"
without really knowing what that is...
(What is a directory multiplexer doing? Do I need that? For what?)

The error messge about failed exec of udev_run_devd doesn't appear anymore. But I still cannot get my /dev/mtd/0 created...

What did I miss? udev seems to work as udevstart gives me all the ttys and friends... but I cannot get my /dev/mtd.
Is there a step by step installation for the not-mainstream distros?

Best greets,

Clemens Koller
_______________________________
R&D Imaging Devices
Anagramm GmbH
Rupert-Mayer-Str. 45/1
81379 Muenchen
Germany

http://www.anagramm.de
Phone: +49-89-741518-50
Fax: +49-89-741518-19

udev_utils.c.bak renamed from udev_utils.c +3 -3
@@ -6,12 +6,12 @@
  *	This program is free software; you can redistribute it and/or modify it
  *	under the terms of the GNU General Public License as published by the
  *	Free Software Foundation version 2 of the License.
- *
+ * 
  *	This program is distributed in the hope that it will be useful, but
  *	WITHOUT ANY WARRANTY; without even the implied warranty of
  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  *	General Public License for more details.
- *
+ * 
  *	You should have received a copy of the GNU General Public License along
  *	with this program; if not, write to the Free Software Foundation, Inc.,
  *	675 Mass Ave, Cambridge, MA 02139, USA.
@@ -462,7 +462,7 @@
 		if (result)
 			dup2(pipefds[1], STDOUT_FILENO);
 		execv(arg, argv);
-		err("exec of program '%s' failed", arg);
+		err("exec of program failed");
 		_exit(1);
 	case -1:
 		err("fork of '%s' failed", arg);
#1 lore raw

Sorry, the applied in my last mail was "reversed"...

Attached a hopefully better one...

Best greets,

Clemens

udev_utils.c renamed from udev_utils.c.bak +3 -3
@@ -6,12 +6,12 @@
  *	This program is free software; you can redistribute it and/or modify it
  *	under the terms of the GNU General Public License as published by the
  *	Free Software Foundation version 2 of the License.
- * 
+ *
  *	This program is distributed in the hope that it will be useful, but
  *	WITHOUT ANY WARRANTY; without even the implied warranty of
  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  *	General Public License for more details.
- * 
+ *
  *	You should have received a copy of the GNU General Public License along
  *	with this program; if not, write to the Free Software Foundation, Inc.,
  *	675 Mass Ave, Cambridge, MA 02139, USA.
@@ -462,7 +462,7 @@ int execute_program(const char *command,
 		if (result)
 			dup2(pipefds[1], STDOUT_FILENO);
 		execv(arg, argv);
-		err("exec of program failed");
+		err("exec of program '%s' failed", arg);
 		_exit(1);
 	case -1:
 		err("fork of '%s' failed", arg);
#2 lore raw

Re: UDEV from scratch for beginners - mtd device not shown in device tree.

In reply to Clemens Koller
Quoted 11 lines · Clemens Koller

After installing "udev from scratch" on an embedded system (not being able to follow Decibels UDEV Primer directly as I don't use any package management tools.) I still cannot get my mtd (memory technology device) node created dynamically by udev when I insert my module to the kernel.

Basically, my installation was like this:

- compiled Linux-2.6.13-rc2 w/ CONFIG_UNIX98_PTYS and CONFIG_DEVPTS_FS and CONFIG_HOTPLUG and friends.

Quoted 11 lines

- manually created /dev nodes on local filesystem to be able to boot and login via ssh at least:
cd /dev
mknod -m 660 console c 5 1
mknod -m 666 null c 1 3
mknod -m 666 hda b 3 0
mknod -m 666 hda1 b 3 1
mknod -m 666 hda2 b 3 2
(I guess I will have to move those manually created devices to /etc/udev/devices, right? Where is documentation for that and who is copying that to /dev and when?)

This is Fedora specific, udev does not do it by default.

Quoted 2 lines

(BTW: in which order are the files in /etc/udev/rules.d processed if there are more than one?

Lexical order.

Quoted 2 lines

Are there any naming conventions which apply?
Where is the documentation for that?)

The man page.

Quoted 16 lines

- I've checked /udev/uevent_listen which works pretty fine while loading my mtd modules:

$ ./uevent_listen
[1121084998] received 'remove' from '/module/mminfo'
ACTION=remove
DEVPATH=/module/mminfo
SUBSYSTEM=module
SEQNUM1

[1121085000] received 'add' from '/module/mminfo'
ACTION­d
DEVPATH=/module/mminfo
SUBSYSTEM=module
SEQNUM2

Quoted 3 lines

while doing

$ rmmod mminfo
$ insmod mminfo.ko

These are module events and not events for class or block devices. udev will not create any node for such events.

Quoted 17 lines

Now I ran into the following problem while loading my module which appeared as /dev/mtd/0 and/or /dev/mtd/0ro in devfs:

Jul 11 13:33:29 ecam udevd[14647]: udevd.c: seq 177 forked, pid 14653, 2 
seconds old
Jul 11 13:33:29 ecam udev[14653]: udev_rules.c: reset run list
Jul 11 13:33:29 ecam udev[14654]: udev_utils.c: exec of program 
'/sbin/udev_run_devd' failed
Jul 11 13:33:29 ecam udevd[14647]: udevd.c: seq 177 exit, 2 seconds old
Jul 11 13:42:32 ecam udevd[14647]: udevd.c: seq 178 queued, devpath 
'/module/mminfo'
Jul 11 13:42:32 ecam udevd[14647]: udevd.c: seq 178 forked, pid 14662, 0 

seconds old

I patched udev_utils.c (appended, whitespaces fixed, too) to get the clue that the call to /sbin/udev_run_devd failed.

Quoted 7 lines

Well, there is no valuable documentation about udev_run_devd neither in writing_udev_rules nor in Decibels UDEV primer. So I decided to remove that line from the 50-udev.rules:

# emulate dev.d/
#RUN="/sbin/udev_run_devd"
without really knowing what that is...
(What is a directory multiplexer doing? Do I need that? For what?)

Look at the archives, and RELEASE-NOTES. dev.d/ is a hotplug.d/ style directory, where you can place programs in, that run at device node creation/removal.

Quoted 2 lines

The error messge about failed exec of udev_run_devd doesn't appear anymore. But I still cannot get my /dev/mtd/0 created...

Mtd seems to lack proper driver-core integration, and therefore no udev support:
http://lists.infradead.org/pipermail/linux-mtd/2005-June/012821.html

Kay

-------------------------------------------------------
This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

#3 lore raw
In reply to Clemens Koller

Hello, Kai!

Thank you for filling the gaps. The problem was:

Quoted 8 lines
Quoted 2 lines

The error messge about failed exec of udev_run_devd doesn't appear anymore. But I still cannot get my /dev/mtd/0 created...

Mtd seems to lack proper driver-core integration, and therefore no udev support:
http://lists.infradead.org/pipermail/linux-mtd/2005-June/012821.html

The latest 2.6.13-rc2 tree didn't use class_simple_device_xxx() to register new devices. I've patched my tree with the patch in above link and I've also applied no-sources-keep-class-symbol.diff for simple_class.c

Now everything seems to work fine, I get my mtd device added and removed properly.

Thanks for your support!

Greets,

Clemens Koller
_______________________________
R&D Imaging Devices
Anagramm GmbH
Rupert-Mayer-Str. 45/1
81379 Muenchen
Germany

http://www.anagramm.de
Phone: +49-89-741518-50
Fax: +49-89-741518-19

Quoted 98 lines · Kay Sievers
Quoted 11 lines · Clemens Koller

After installing "udev from scratch" on an embedded system (not being able to follow Decibels UDEV Primer directly as I don't use any package management tools.) I still cannot get my mtd (memory technology device) node created dynamically by udev when I insert my module to the kernel.

Basically, my installation was like this:

- compiled Linux-2.6.13-rc2 w/ CONFIG_UNIX98_PTYS and CONFIG_DEVPTS_FS and CONFIG_HOTPLUG and friends.

Quoted 11 lines

- manually created /dev nodes on local filesystem to be able to boot and login via ssh at least:
cd /dev
mknod -m 660 console c 5 1
mknod -m 666 null c 1 3
mknod -m 666 hda b 3 0
mknod -m 666 hda1 b 3 1
mknod -m 666 hda2 b 3 2
(I guess I will have to move those manually created devices to /etc/udev/devices, right? Where is documentation for that and who is copying that to /dev and when?)

This is Fedora specific, udev does not do it by default.

Quoted 2 lines

(BTW: in which order are the files in /etc/udev/rules.d processed if there are more than one?

Lexical order.

Quoted 2 lines

Are there any naming conventions which apply?
Where is the documentation for that?)

The man page.

Quoted 16 lines

- I've checked /udev/uevent_listen which works pretty fine while loading my mtd modules:

$ ./uevent_listen
[1121084998] received 'remove' from '/module/mminfo'
ACTION=remove
DEVPATH=/module/mminfo
SUBSYSTEM=module
SEQNUM1

[1121085000] received 'add' from '/module/mminfo'
ACTION­d
DEVPATH=/module/mminfo
SUBSYSTEM=module
SEQNUM2

Quoted 3 lines

while doing

$ rmmod mminfo
$ insmod mminfo.ko

These are module events and not events for class or block devices. udev will not create any node for such events.

Quoted 17 lines

Now I ran into the following problem while loading my module which appeared as /dev/mtd/0 and/or /dev/mtd/0ro in devfs:

Jul 11 13:33:29 ecam udevd[14647]: udevd.c: seq 177 forked, pid 14653, 2 
seconds old
Jul 11 13:33:29 ecam udev[14653]: udev_rules.c: reset run list
Jul 11 13:33:29 ecam udev[14654]: udev_utils.c: exec of program 
'/sbin/udev_run_devd' failed
Jul 11 13:33:29 ecam udevd[14647]: udevd.c: seq 177 exit, 2 seconds old
Jul 11 13:42:32 ecam udevd[14647]: udevd.c: seq 178 queued, devpath 
'/module/mminfo'
Jul 11 13:42:32 ecam udevd[14647]: udevd.c: seq 178 forked, pid 14662, 0 

seconds old

I patched udev_utils.c (appended, whitespaces fixed, too) to get the clue that the call to /sbin/udev_run_devd failed.

Quoted 7 lines

Well, there is no valuable documentation about udev_run_devd neither in writing_udev_rules nor in Decibels UDEV primer. So I decided to remove that line from the 50-udev.rules:

# emulate dev.d/
#RUN="/sbin/udev_run_devd"
without really knowing what that is...
(What is a directory multiplexer doing? Do I need that? For what?)

Look at the archives, and RELEASE-NOTES. dev.d/ is a hotplug.d/ style directory, where you can place programs in, that run at device node creation/removal.

Quoted 10 lines

-------------------------------------------------------
This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

-------------------------------------------------------
This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel