Task Description
Xorg input devices would not work for me using core-arm/udev (version 167) on a cubox platform.
I upgraded to version 182 and the input devices worked fine. I had to patch udev to replace calls to accept4() with accept(). Pkgfile (based on core/udev) and patch appear below:
######## Pkgfile ############ # Description: Userspace device management daemon # URL: http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html # Maintainer: CRUX System Team, core-ports at crux dot nu # Depends on: kmod
name=udev version=182 release=1 source=(ftp://ftp.kernel.org/pub/linux/utils/kernel/hotplug/$name-$version.tar.x z \
pre-accept4-kernel.patch 81-crux.rules start_udev)
build() {
cd udev-$version
patch -p1 < $SRC/pre-accept4-kernel.patch
./configure --prefix=/usr \
--sbindir=/sbin --bindir=/sbin \
--sysconfdir=/etc \
--with-rootlibdir=/lib \
--with-rootprefix= \
--libexecdir=/lib \
--mandir=/usr/man \
--disable-introspection \
--disable-gudev \
--disable-udev_acl \ --disable-keymap \
--enable-static \
--enable-rule_generator
make
make install DESTDIR=$PKG
mkdir -p $PKG/lib/{firmware,udev/devices/{pts,shm}}
mkdir -p $PKG/{lib,sbin,run}
# Symlink to udevd
ln -s ../lib/udev/udevd $PKG/sbin/udevd
# Add CRUX items
install -m 0755 $SRC/start_udev $PKG/sbin
install -m 0644 $SRC/81-crux.rules $PKG/lib/udev/rules.d
# Remove junk
rm -r $PKG/usr/share/{gtk-,}doc
}
######### pre-accept4-kernel.patch ########### diff -urN a/src/udev-ctrl.c b/src/udev-ctrl.c — a/src/udev-ctrl.c 2011-10-09 17:10:32.000000000 -0600 +++ b/src/udev-ctrl.c 2011-10-25 15:11:09.000000000 -0600 @@ -15,6 +15,7 @@ #include <stddef.h> #include <string.h> #include <unistd.h> +#include <fcntl.h> #include <sys/types.h> #include <sys/poll.h> #include <sys/socket.h> @@ -182,6 +183,7 @@
struct ucred ucred;
socklen_t slen;
const int on = 1;
+ int flgs;
conn = calloc(1, sizeof(struct udev_ctrl_connection));
if (conn == NULL)
@@ -189,13 +191,19 @@
conn->refcount = 1;
conn->uctrl = uctrl;
- conn→sock = accept4(uctrl→sock, NULL, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK); + conn→sock = accept4(uctrl→sock, NULL, NULL, SOCK_CLOEXEC|SOCK_NONBLOCK); + conn→sock = accept(uctrl→sock, NULL, NULL); if (conn→sock < 0) { if (errno != EINTR) err(uctrl→udev, "unable to receive ctrl connection: %m\n"); goto err; } + Since we don't have accept4 + flgs = fcntl(conn→sock, F_GETFL, NULL); + if(flgs >= 0) fcntl(conn→sock, F_SETFL, flgs | O_NONBLOCK); + fcntl(conn→sock, F_SETFD, FD_CLOEXEC); +
/* check peer credential of connection */ slen = sizeof(ucred);
if (getsockopt(conn->sock, SOL_SOCKET, SO_PEERCRED, &ucred, &slen) < 0) {
|