LinuxQuestions.org
Visit Jeremy's Blog.
Home Forums Tutorials Articles Register
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Distributions > Slackware
User Name
Password
Slackware This Forum is for the discussion of Slackware Linux.

Notices


Reply
  Search this Thread
Old 11-22-2015, 02:50 PM   #1
yars
Member
 
Registered: Apr 2012
Location: Russia
Distribution: Slackware64-current
Posts: 249

Rep: Reputation: 24
udevd: cannot execute xcmddc because the device nodes doesn't exists


Greetings,
When I boot my system, I have appeared these error messages:
Code:
[    9.748410] udevd[322]: failed to execute '/usr/bin/xcmddc' '/usr/bin/xcmddc --i2c /dev/i2c-1 --identify': No such file or directory
[    9.748665] udevd[321]: failed to execute '/usr/bin/xcmddc' '/usr/bin/xcmddc --i2c /dev/i2c-4 --identify': No such file or directory
[    9.748961] udevd[320]: failed to execute '/usr/bin/xcmddc' '/usr/bin/xcmddc --i2c /dev/i2c-2 --identify': No such file or directory
[    9.749107] udevd[324]: failed to execute '/usr/bin/xcmddc' '/usr/bin/xcmddc --i2c /dev/i2c-0 --identify': No such file or directory
[    9.749409] udevd[325]: failed to execute '/usr/bin/xcmddc' '/usr/bin/xcmddc --i2c /dev/i2c-3 --identify': No such file or directory
[    9.750054] udevd[323]: failed to execute '/usr/bin/xcmddc' '/usr/bin/xcmddc --i2c /dev/i2c-5 --identify': No such file or directory
[    9.753976] udevd[327]: failed to execute '/usr/bin/xcmddc' '/usr/bin/xcmddc --i2c /dev/i2c-6 --identify': No such file or directory
The problem is in the /lib/udev/rules.d/90-xcm-i2c.rules, which tries to identify the DDC devices and assign the video group to it. But it fails, because the device nodes at the moment of the starting rule handling, does not exists. The solution for me is a splitting this rule into 2 ones:
90-xcm-i2c.rules:
Code:
-# match only DDC devices
-KERNEL=="i2c-[0-9]*", ACTION=="add", PROGRAM=="/usr/bin/xcmddc --i2c /dev/k --identify", RESULT=="0", GROUP="video", MODE="0660
And 91-xcm-i2c.rules:
Code:
+# match only DDC devices
+KERNEL=="i2c-[0-9]*", ACTION=="add", PROGRAM=="/usr/bin/xcmddc --i2c /dev/%k --identify", RESULT=="0", GROUP="video", MODE="0660"
After that, seems, everything is working fine.

Last edited by michaelk; 01-17-2016 at 06:12 PM. Reason: Correct title typ0
 
Old 11-22-2015, 03:27 PM   #2
Philip Lacroix
Member
 
Registered: Jun 2012
Distribution: Slackware
Posts: 441

Rep: Reputation: 574Reputation: 574Reputation: 574Reputation: 574Reputation: 574Reputation: 574
Hi. You probably have the /usr filesystem on a separate partition, and udevd cannot find /usr/bin/xcmddc because /usr is not mounted yet. I had the same problem. On -current this was fixed with the switch from udev to eudev a few days ago. This is a related thread:

udevd warning during boot on -current
 
1 members found this post helpful.
Old 11-22-2015, 03:49 PM   #3
yars
Member
 
Registered: Apr 2012
Location: Russia
Distribution: Slackware64-current
Posts: 249

Original Poster
Rep: Reputation: 24
Yes, I have separated /usr, I will try temporary moving the xcmddc to /bin instead. I just forgot that I use -current, and I know about switching to eudev.
 
Old 11-22-2015, 05:50 PM   #4
volkerdi
Slackware Maintainer
 
Registered: Dec 2002
Location: Minnesota
Distribution: Slackware! :-)
Posts: 2,504

Rep: Reputation: 8461Reputation: 8461Reputation: 8461Reputation: 8461Reputation: 8461Reputation: 8461Reputation: 8461Reputation: 8461Reputation: 8461Reputation: 8461Reputation: 8461
Quote:
Originally Posted by yars View Post
Yes, I have separated /usr, I will try temporary moving the xcmddc to /bin instead.
That won't help because it's linked to a boatload of X libraries in /usr/lib.
 
3 members found this post helpful.
Old 11-22-2015, 07:17 PM   #5
Gerard Lally
Senior Member
 
Registered: Sep 2009
Location: Leinster, IE
Distribution: Slackware, NetBSD
Posts: 2,180

Rep: Reputation: 1763Reputation: 1763Reputation: 1763Reputation: 1763Reputation: 1763Reputation: 1763Reputation: 1763Reputation: 1763Reputation: 1763Reputation: 1763Reputation: 1763
I have this message at boot as well. I seem to remember it comes up only when I use the nouveau instead of nvidia driver. With the recent xorg upgrade in -current I have reverted to nouveau for the time being and sure enough the message has come up again.
 
Old 11-28-2015, 12:53 PM   #6
yars
Member
 
Registered: Apr 2012
Location: Russia
Distribution: Slackware64-current
Posts: 249

Original Poster
Rep: Reputation: 24
I was looked for that, and I see that xcm package contains the helpers that installed in /usr/bin instead of /lib/udev. I think, that helpers is xcmddc (obviously) and xcmedid (no udev rule that uses it), and it should be installed under /lib/udev and linked statically. Other binaries should be built dynamically and installed under /usr/bin. Currently, I'll try to find out how to do this.
 
Old 11-29-2015, 07:08 AM   #7
yars
Member
 
Registered: Apr 2012
Location: Russia
Distribution: Slackware64-current
Posts: 249

Original Poster
Rep: Reputation: 24
There is (possible) quick-and-dirty solution, but see it:
1. Create a configure/xcm file in x11's source directory:
Code:
diff -u /dev/null xcm 
--- /dev/null	2015-11-29 16:21:59.055998663 +0300
+++ xcm	2015-11-29 17:29:50.451748383 +0300
@@ -0,0 +1,15 @@
+libtoolize --force && \
+autoreconf -vif || exit 1
+
+CFLAGS=$SLKCFLAGS \
+CXXFLAGS=$SLKCFLAGS \
+./configure \
+  --prefix=/usr \
+  --libdir=/lib${LIBDIRSUFFIX} \
+  --sysconfdir=/etc \
+  --localstatedir=/var \
+  --infodir=/usr/info \
+  --mandir=/usr/man \
+  --docdir=/usr/doc/${PKGNAME}-${MODULAR_PACKAGE_VERSION} \
+  --with-udev-helper-dir=/lib/udev \
+  --build=$ARCH-slackware-linux || exit 1
2. To provide --with-udev-helper-dir option from xcm's configure, need a patch:
Code:
cat patch/xcm/configure-ac-udevhelperdir.patch 
--- configure.ac.orig	2015-11-29 14:52:24.837722686 +0300
+++ configure.ac	2015-11-29 15:00:28.808547690 +0300
@@ -107,11 +107,18 @@
 if [[ $LINUX = "1" ]]; then
 	HAVE_LINUX="#define XCM_HAVE_LINUX 1"
 	AM_CONDITIONAL([HAVE_LINUX], [true])
-        udevdir="/lib/udev/rules.d/"
-        AC_ARG_WITH([udev-dir],
-            AS_HELP_STRING([--with-udev-dir=DIR],[Directory where udev expects helper programs to be located]),
-            [udevdir="$with_udev_dir"])
-        AC_SUBST([udevdir], [$udevdir])
+        udevrulesdir="/lib/udev/rules.d/"
+        AC_ARG_WITH([udev-rules-dir],
+            AS_HELP_STRING([--with-udev-rules-dir=DIR],[Directory where udev expects it's rules to be located]),
+            [udevrulesdir="$with_udev_rules_dir"])
+        AC_SUBST([udevrulesdir], [$udevrulesdir])
+        
+        AM_CONDITIONAL([HAVE_LINUX], [true])
+        udevhelperdir="/lib/udev/"
+        AC_ARG_WITH([udev-helper-dir],
+            AS_HELP_STRING([--with-udev-helpers-dir=DIR],[Directory where udev expect helper programs to be located]),
+            [udevhelperdir="$with_udev_helper_dir"])
+        AC_SUBST([udevhelperdir], [$udevhelperdir])
 else
 	HAVE_LINUX=
 	AM_CONDITIONAL([HAVE_LINUX], [false])
3. To install the xcmddc in the udevhelperdir, need a several patches to Makefile.am's:
One from xcm's src directory:
Code:
cat patch/xcm/src-Makefile-am-improve-udevhelperdir.patch       
--- src/Makefile.am.orig	2015-11-29 00:01:22.484928156 +0300
+++ src/Makefile.am	2015-11-30 00:19:35.160940741 +0300
@@ -5,14 +5,16 @@
 AM_CFLAGS += -I$(top_srcdir)
 
 bin_PROGRAMS = xcmedid
-
 xcmedid_SOURCES = xcmedid.c
 xcmedid_LDADD  = ${libXcm_LIBS} -lm
+
 if HAVE_LINUX
-bin_PROGRAMS += xcmddc
+@udevhelperdir@dir = @udevhelperdir@
+@udevhelperdir@_PROGRAMS = xcmddc
 xcmddc_SOURCES = xcmddc.c
 xcmddc_LDADD  = ${libXcm_LIBS} -lm
 endif
+
 if HAVE_X11
 bin_PROGRAMS += xcm xcmevents
 xcm_SOURCES = xcm.c
And one from top-level xcm's sources directory:
Code:
cat patch/xcm/toplevel-Makefile-am-replace-udevdir-to-udevrulesdir.patch      
--- Makefile.am.orig	2015-11-29 15:02:35.107284895 +0300
+++ Makefile.am	2015-11-30 00:30:16.266682974 +0300
@@ -15,8 +15,9 @@
 
 if HAVE_LINUX
 install-data-hook:
-	$(MKDIR_P) "$(DESTDIR)@udevdir@"
-	-$(INSTALL) -m 0644 $(srcdir)/scripts/90-xcm-i2c.rules "$(DESTDIR)@udevdir@"
+	$(MKDIR_P) "$(DESTDIR)@udevrulesdir@"
+	$(INSTALL) -m 0644 $(srcdir)/scripts/90-xcm-i2c.rules "$(DESTDIR)@udevrulesdir@"
+	$(LN_S) "@udevhelperdir@/xcmddc"  "$(DESTDIR)$(bindir)/xcmddc"
 endif
 
 RPMARCH=`rpmbuild --showrc | awk '/^build arch/ {print $$4}'`
4. Change the path to xcmddc binary in udev rule:
Code:
cat xcm/90-xcm-i2c-rules-change-path-to-xcmddc.patch 
--- scripts/90-xcm-i2c.rules.orig	2015-11-29 16:02:27.124252024 +0300
+++ scripts/90-xcm-i2c.rules	2015-11-29 16:02:38.385317754 +0300
@@ -5,4 +5,4 @@
 SUBSYSTEM=="i2c", RUN+="/sbin/modprobe -bv i2c-dev"
 
 # match only DDC devices
-KERNEL=="i2c-[0-9]*", ACTION=="add", PROGRAM=="/usr/bin/xcmddc --i2c /dev/k --identify", RESULT=="0", GROUP="video", MODE="0660"
+KERNEL=="i2c-[0-9]*", ACTION=="add", PROGRAM=="/lib/udev/xcmddc --i2c /dev/k --identify", RESULT=="0", GROUP="video", MODE="0660"
5. And at the end, need the xcm.patch script:
Code:
cat patch/xcm.patch 
patch -p0 --verbose -i $CWD/patch/xcm/configure-ac-udevhelperdir.patch || exit 1
patch -p0 --verbose -i $CWD/patch/xcm/toplevel-Makefile-am-replace-udevdir-to-udevrulesdir.patch || exit 1
patch -p0 --verbose -i $CWD/patch/xcm/src-Makefile-am-improve-udevhelperdir.patch || exit 1
patch -p0 --verbose -i $CWD/patch/xcm/90-xcm-i2c-rules-change-path-to-xcmddc.patch  || exit 1
6. Then, run the x11.SlackBuild as follow:
Code:
# UPGRADE_PACKAGES=NO ./*Build app xcm
7. After that you have the new xcm package dropped in /tmp:
Code:
cat /var/log/packages/xcm-0.5.2-x86_64-1_yars 
PACKAGE NAME:     xcm-0.5.2-x86_64-1_yars
COMPRESSED PACKAGE SIZE:     20K
UNCOMPRESSED PACKAGE SIZE:     70K
PACKAGE LOCATION: ./xcm-0.5.2-x86_64-2.txz
PACKAGE DESCRIPTION:
xcm: xcm (X color management tools)
xcm:
xcm: Tools based on libXcm, a library for colour management on X.
xcm: xcmddc requests EDID from a monitor over the i2c bus.
xcm: xcmedid is for parsing EDID data blocks. 
xcm: xcmevents observes X11 colour management events.
xcm:
xcm:
xcm:
xcm:
xcm:
FILE LIST:
./
install/
install/slack-desc
lib/
lib/udev/
lib/udev/rules.d/
lib/udev/rules.d/90-xcm-i2c.rules
lib/udev/xcmddc
usr/
usr/bin/
usr/bin/xcm
usr/bin/xcmedid
usr/bin/xcmevents
usr/doc/
usr/doc/xcm-0.5.2/
usr/doc/xcm-0.5.2/AUTHORS
usr/doc/xcm-0.5.2/COPYING
usr/doc/xcm-0.5.2/ChangeLog
usr/doc/xcm-0.5.2/README
usr/man/
usr/man/man1/
usr/man/man1/xcm.1.gz
usr/man/man1/xcmddc.1.gz
usr/man/man1/xcmedid.1.gz
usr/man/man1/xcmevents.1.gz
8. Install and Enjoy!

Last edited by yars; 11-29-2015 at 03:44 PM.
 
Old 11-29-2015, 09:37 AM   #8
ReaperX7
LQ Guru
 
Registered: Jul 2011
Location: California
Distribution: Slackware64-15.0 Multilib
Posts: 6,558
Blog Entries: 15

Rep: Reputation: 2097Reputation: 2097Reputation: 2097Reputation: 2097Reputation: 2097Reputation: 2097Reputation: 2097Reputation: 2097Reputation: 2097Reputation: 2097Reputation: 2097
If you're using separated /usr, any device node creation software will need to be added to the initramfs so the tools can be mounted beforehand. The other option is to move them into /(root) so they are available at boot.
 
Old 11-29-2015, 10:33 AM   #9
yars
Member
 
Registered: Apr 2012
Location: Russia
Distribution: Slackware64-current
Posts: 249

Original Poster
Rep: Reputation: 24
Yes, now, there are only /lib/udev/udev-acl I see, that is a symlink to /usr/libexec/udev-acl.
EDIT: Ok, I'll done it, I'll removed from the original ConsoleKit2's patch 0002-Fix-some-libdir-scripts-stuff-missed-in-4d87a25ea0af.orig.patch.gz the lines about install-exec-hook and replaced it with this patch:
Code:
--- tools/Makefile.am.orig	2015-11-29 21:03:42.512650915 +0300
+++ tools/Makefile.am	2015-11-29 21:11:35.572412245 +0300
@@ -161,8 +161,9 @@
 udevrulesdir = $(UDEVDIR)/rules.d
 
 dist_udevrules_DATA = 70-udev-acl.rules
-libexec_PROGRAMS += udev-acl
 
+@UDEVDIR@dir = $(UDEVDIR)
+@UDEVDIR@_PROGRAMS = udev-acl
 udev_acl_SOURCES = udev-acl.c
 udev_acl_LDADD = $(UDEV_ACL_LIBS)
 udev_acl_CFLAGS =       \
@@ -171,10 +172,10 @@
 	$(NULL)
 
 install-exec-hook:
-	mkdir -p $(DESTDIR)$(prefix)/lib/ConsoleKit/run-seat.d
+	mkdir -p $(DESTDIR)$(libdir)/ConsoleKit/run-seat.d
 	mkdir -p $(DESTDIR)$(UDEVDIR)
-	ln -sf $(libexecdir)/udev-acl $(DESTDIR)$(prefix)/lib/ConsoleKit/run-seat.d/udev-acl.ck
-	ln -sf $(libexecdir)/udev-acl $(DESTDIR)$(UDEVDIR)/udev-acl
+	ln -sf $(UDEVDIR)/udev-acl $(DESTDIR)$(libdir)/ConsoleKit/run-seat.d/udev-acl.ck
+	ln -sf $(UDEVDIR)/udev-acl $(DESTDIR)$(libexecdir)/udev-acl
 endif
 
 EXTRA_DIST =				\
Now, udev-acl will be installed under /lib/udev instead of /usr/libexec.
EDIT2: As I know (see post #4), all this will not help, if the binaries is built dynamically (currently, it so), because these binaries are linked against libraries that lives in /usr/lib$LIBDIRSUFFIX. But I have no errors on boot. Why?

Last edited by yars; 11-29-2015 at 03:58 PM.
 
Old 11-30-2015, 10:53 AM   #10
Tonus
Senior Member
 
Registered: Jan 2007
Location: Paris, France
Distribution: Slackware-15.0
Posts: 1,405
Blog Entries: 3

Rep: Reputation: 514Reputation: 514Reputation: 514Reputation: 514Reputation: 514Reputation: 514
Quote:
Originally Posted by ReaperX7 View Post
If you're using separated /usr, any device node creation software will need to be added to the initramfs so the tools can be mounted beforehand. The other option is to move them into /(root) so they are available at boot.
Hi,

I have same errors on boot an am curious on how to add device node creation software to the initramfs.

Assuming /usr is sda16, would this work ?

Code:
mkinitrd -c -k 4.2.3-tonus -f ext4 -r /dev/sda11 -m usbhid:hid_generic:ext4 -C /dev/sda16 -u -o /boot/initrd.gz

Thanks for infos and help.
 
Old 11-30-2015, 11:39 AM   #11
yars
Member
 
Registered: Apr 2012
Location: Russia
Distribution: Slackware64-current
Posts: 249

Original Poster
Rep: Reputation: 24
mkinitrd does not append any files to the initrd, only a kernel modules that you passed to mkinitrd on the command-line. That means, you should unpack the initrd, manually add the appropriate files and invoke mkinitrd.
Quote:
Assuming /usr is sda16, would this work ?
That should work, independently on where your /usr is placed (except that you have the -C option, which is not applicable on that purpose - that is intended to use with LUKS).

Last edited by yars; 11-30-2015 at 01:39 PM.
 
Old 11-30-2015, 12:59 PM   #12
Tonus
Senior Member
 
Registered: Jan 2007
Location: Paris, France
Distribution: Slackware-15.0
Posts: 1,405
Blog Entries: 3

Rep: Reputation: 514Reputation: 514Reputation: 514Reputation: 514Reputation: 514Reputation: 514
udevd: cannot execute xcm-ddc because the device nodes doesn't exists

Thanks. I will try to do that. Might need some trial /error and a few research to track dependencies.

Do you think it might slow down the boot time?
 
Old 11-30-2015, 01:32 PM   #13
yars
Member
 
Registered: Apr 2012
Location: Russia
Distribution: Slackware64-current
Posts: 249

Original Poster
Rep: Reputation: 24
Quote:
Do you think it might slow down the boot time?
Yes, but delay will about 1-2 seconds and less.
 
Old 11-30-2015, 02:03 PM   #14
bormant
Member
 
Registered: Jan 2008
Posts: 426

Rep: Reputation: 240Reputation: 240Reputation: 240
yars,
mkinitrd copies the whole tree under /boot/initrd-tree/, just add some files and doesn't specify -c (clear tree) on next call; other options for copying files, for ex. -m (modules), -u (copy udev), -C (crypt) etc. may be omitted too.

Last edited by bormant; 11-30-2015 at 02:07 PM.
 
1 members found this post helpful.
Old 11-30-2015, 02:26 PM   #15
yars
Member
 
Registered: Apr 2012
Location: Russia
Distribution: Slackware64-current
Posts: 249

Original Poster
Rep: Reputation: 24
Quote:
Originally Posted by yars View Post
But I have no errors on boot. Why?
Seems I guessed why it is, I have:
Code:
[    4.802024] VFS: Mounted root (ext4 filesystem) readonly on device 8:1.
But udevd will started later:
Code:
[    6.975666] udevd[476]: starting eudev-3.1.5
So, I think, my problem with separated /usr is solved. But, the rule 90-xcm-i2c.rules does not working: the mode on the device nodes does not changed, and the group video does not assigned. I was tried that test:
Code:
# for i in /dev/i2c-* ; do echo "testing: $i"; /lib/udev/xcmddc --i2c $i --identify; done           
testing: /dev/i2c-0
Setting EEDID adress failed.
testing: /dev/i2c-1
Setting EEDID adress failed.
testing: /dev/i2c-2

testing: /dev/i2c-3
Setting EEDID adress failed.
testing: /dev/i2c-4
Setting EEDID adress failed.
testing: /dev/i2c-5
Setting EEDID adress failed.
testing: /dev/i2c-6
Setting EEDID adress failed.
That means, the DDC device is /dev/i2c-2, but permissions/access mode remains as root:root 0600. I contunue the research on that.
 
  


Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
Setting up Kickstart server RHEL 6.5 for compute nodes, GPU nodes and PHI nodes sho1sho1 Red Hat 3 06-23-2015 04:20 PM
device nodes linux_newbie79 Linux - Newbie 1 10-19-2009 03:24 AM
no such file or directory exists when trying to execute a exe ryedawg Linux - Software 5 12-05-2005 05:42 AM
udev doesn't create scd* device nodes for scsi cdrom kejava Slackware 3 09-15-2005 02:04 PM
Device nodes zoomzoom Linux - General 0 08-18-2003 08:00 AM

LinuxQuestions.org > Forums > Linux Forums > Linux - Distributions > Slackware

All times are GMT -5. The time now is 05:16 PM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Open Source Consulting | Domain Registration