diff options
Diffstat (limited to 'abs/core/klibc-udev')
-rw-r--r-- | abs/core/klibc-udev/PKGBUILD | 58 | ||||
-rw-r--r-- | abs/core/klibc-udev/klibc-remove-revert.patch | 111 | ||||
-rwxr-xr-x | abs/core/klibc-udev/load-modules.sh | 32 | ||||
-rw-r--r-- | abs/core/klibc-udev/post-107.patch | 176 | ||||
-rwxr-xr-x | abs/core/klibc-udev/start_udev | 115 | ||||
-rw-r--r-- | abs/core/klibc-udev/udev.rules | 187 | ||||
-rw-r--r-- | abs/core/klibc-udev/udev_hook | 7 | ||||
-rw-r--r-- | abs/core/klibc-udev/udev_install | 31 | ||||
-rw-r--r-- | abs/core/klibc-udev/vol_id-suspend2.patch | 15 |
9 files changed, 732 insertions, 0 deletions
diff --git a/abs/core/klibc-udev/PKGBUILD b/abs/core/klibc-udev/PKGBUILD new file mode 100644 index 0000000..baad6d4 --- /dev/null +++ b/abs/core/klibc-udev/PKGBUILD @@ -0,0 +1,58 @@ +# $Id: PKGBUILD 5858 2008-07-21 18:47:23Z thomas $ +# Maintainer: Tobias Powalowski <tpowa@archlinux.org> + +pkgname=klibc-udev +pkgver=116 +pkgrel=13 +pkgdesc="udevd compiled under klibc" +arch=(i686 x86_64) +url="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html" +groups=('base') +depends=('coreutils' 'klibc' $(basename /lib/klibc-*.so .so)) +license=('GPL') +source=(http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev-$pkgver.tar.bz2 \ + udev_hook udev_install start_udev udev.rules load-modules.sh \ + vol_id-suspend2.patch) +md5sums=('02c49d93ffda4a104c853c082138b835' + 'bcfed63882660e7d33f367d722e0a5c9' + '92b62124dd43d61a2e610c305bf95d15' + '22741baf8f5d7d8bc88022b39bca74d8' + 'f50bd6b378a5e75b2475bc67b32cb692' + '1ecfeec15e88485e88f2e37f46861f2e' + '80f75fc9a8fc32c7b8ff146d53bf579f') + +build() +{ + cd $startdir/src/udev-$pkgver + patch -p1 -i ${startdir}/src/vol_id-suspend2.patch || return 1 + sed -i "s|USE_LOG = .*|USE_LOG = false|g" Makefile + + #I need to look at this... it appears the __CTYPE_NO_INLINE may be a klibc issue - aaron + make VOLUME_ID_STATIC=true CC=klcc LD=klcc PROGRAMS="udevd udevsettle udevtrigger" \ + CFLAGS="$CFLAGS -U__CTYPE_NO_INLINE" \ + EXTRAS="extras/firmware extras/cdrom_id extras/ata_id \ + extras/edd_id extras/usb_id extras/volume_id" \ + || return 1 + + mkdir -p $startdir/pkg/lib/initcpio/udev + install -m755 udevd $startdir/pkg/lib/initcpio/udev + install -m755 udevtrigger $startdir/pkg/lib/initcpio/udev + install -m755 udevsettle $startdir/pkg/lib/initcpio/udev + install -m755 extras/firmware/firmware.sh $startdir/pkg/lib/initcpio/udev + install -m755 extras/cdrom_id/cdrom_id $startdir/pkg/lib/initcpio/udev + install -m755 extras/ata_id/ata_id $startdir/pkg/lib/initcpio/udev + install -m755 extras/edd_id/edd_id $startdir/pkg/lib/initcpio/udev + install -m755 extras/scsi_id/scsi_id $startdir/pkg/lib/initcpio/udev + install -m755 extras/usb_id/usb_id $startdir/pkg/lib/initcpio/udev + # broken atm + install -m755 extras/volume_id/vol_id $startdir/pkg/lib/initcpio/udev + #install -m755 extras/path_id/path_id $startdir/pkg/lib/initcpio/udev + install -m755 $startdir/src/start_udev $startdir/pkg/lib/initcpio/udev + install -m644 $startdir/src/udev.rules $startdir/pkg/lib/initcpio/udev + install -m755 $startdir/src/load-modules.sh $startdir/pkg/lib/initcpio/udev + + mkdir -p $startdir/pkg/lib/initcpio/install + install -m644 $startdir/src/udev_install $startdir/pkg/lib/initcpio/install/udev + mkdir -p $startdir/pkg/lib/initcpio/hooks/ + install -m644 $startdir/src/udev_hook $startdir/pkg/lib/initcpio/hooks/udev +} diff --git a/abs/core/klibc-udev/klibc-remove-revert.patch b/abs/core/klibc-udev/klibc-remove-revert.patch new file mode 100644 index 0000000..8d9484f --- /dev/null +++ b/abs/core/klibc-udev/klibc-remove-revert.patch @@ -0,0 +1,111 @@ +### Archlinux revert +### revert this patch, crazy udev devs +From: Kay Sievers <kay.sievers@suse.de> +Date: Fri, 4 Aug 2006 22:02:58 +0000 (+0200) +Subject: libvolume_id: read ufs2 label +X-Git-Tag: 097 +X-Git-Url: http://www.kernel.org/git/?p=linux/hotplug/udev.git;a=commitdiff;h=eb82b76dedc1482b6434c46fee84d3ef13cb9648 + +libvolume_id: read ufs2 label + +Taken from the FreeBSD HAL repository. +--- + +--- a/Makefile ++++ b/Makefile +@@ -33,6 +33,9 @@ USE_GCOV = false + # include Security-Enhanced Linux support + USE_SELINUX = false + ++# comile with klibc instead of glibc ++USE_KLIBC = false ++ + # set this to create statically linked binaries + USE_STATIC = false + +@@ -139,6 +142,12 @@ ifeq ($(strip $(USE_GCOV)),true) + LDFLAGS += -fprofile-arcs + endif + ++ifeq ($(strip $(USE_KLIBC)),true) ++ KLCC = /usr/bin/$(CROSS_COMPILE)klcc ++ CC = $(KLCC) ++ LD = $(KLCC) ++endif ++ + ifeq ($(strip $(USE_SELINUX)),true) + UDEV_OBJS += udev_selinux.o + LIB_OBJS += -lselinux -lsepol +--- a/README ++++ b/README +@@ -69,6 +69,10 @@ Compile Options: + USE_SELINUX + If set to 'true', udev will be built with SELinux support + enabled. This is disabled by default. ++ USE_KLIBC ++ If set to 'true', udev is built and linked against klibc. ++ Default value is 'false'. KLCC specifies the klibc compiler ++ wrapper, usually located at /usr/bin/klcc. + EXTRAS + list of helper programs in extras/ to build. + make EXTRAS="extras/cdrom_id extras/scsi_id extras/volume_id" +--- a/extras/scsi_id/scsi_id.c ++++ b/extras/scsi_id/scsi_id.c +@@ -402,7 +402,8 @@ static int set_options(int argc, char ** + /* + * optind is a global extern used by getopt. Since we can call + * set_options twice (once for command line, and once for config +- * file) we have to reset this back to 1. ++ * file) we have to reset this back to 1. [Note glibc handles ++ * setting this to 0, but klibc does not.] + */ + optind = 1; + while (1) { +--- a/test/simple-build-check.sh ++++ b/test/simple-build-check.sh +@@ -23,6 +23,14 @@ make clean EXTRAS="$EXTRAS" >/dev/null + make all $MAKEOPTS USE_LOG=false EXTRAS="$EXTRAS" || exit + echo -e "\n\n" + ++# klibc build ++if [ -n "$KLCC" -a -e "$KLCC" ]; then ++ echo KLCC: "$KLCC" ++ make clean EXTRAS="$EXTRAS" >/dev/null ++ make all -j4 $MAKEOPTS USE_KLIBC=true DEBUG=true EXTRAS="$EXTRAS" KLCC="$KLCC" || exit ++ echo -e "\n\n" ++fi ++ + # install in temporary dir and show it + TEMPDIR="`pwd`/.tmp" + rm -rf $TEMPDIR +--- a/udev_libc_wrapper.c ++++ b/udev_libc_wrapper.c +@@ -30,7 +30,7 @@ + + #include "udev.h" + +-#ifndef __GLIBC__ ++#ifdef __KLIBC__ + #define __OWN_USERDB_PARSER__ + #endif + +--- a/udev_libc_wrapper.h ++++ b/udev_libc_wrapper.h +@@ -105,7 +105,7 @@ static inline int inotify_add_watch(int + } + #else + /* needed until /usr/include/sys/inotify.h is working */ +-#ifndef __GLIBC__ ++#ifdef __KLIBC__ + #include <sys/inotify.h> + #else + static inline int inotify_init(void) +@@ -117,7 +117,7 @@ static inline int inotify_add_watch(int + { + return syscall(__NR_inotify_add_watch, fd, name, mask); + } +-#endif /* __GLIBC__ */ ++#endif /* __KLIBC__ */ + #endif /* __NR_inotify_init */ + + #ifndef IN_CREATE diff --git a/abs/core/klibc-udev/load-modules.sh b/abs/core/klibc-udev/load-modules.sh new file mode 100755 index 0000000..f0961a7 --- /dev/null +++ b/abs/core/klibc-udev/load-modules.sh @@ -0,0 +1,32 @@ +#! /bin/sh +# Implement blacklisting for udev-loaded modules +# Includes module checking +# - Aaron Griffin & Tobias Powalowski for Archlinux +[ $# -ne 1 ] && exit 1 + +if [ -f /proc/cmdline ]; then + for cmd in $(cat /proc/cmdline); do + case $cmd in + *=*) eval $cmd ;; + esac + done +fi + +# get the real names from modaliases +i="$(/bin/moddeps $1)" +# add disablemodules= from commandline to blacklist +k="$(/bin/replace "${disablemodules}" ',')" +j="$(/bin/replace "${k}" '-' '_')" + +if [ "${j}" != "" ] ; then + for n in ${i}; do + for o in ${j}; do + if [ "$n" = "$o" ]; then + exit 1 + fi + done + done +fi +/sbin/modprobe $1 + +# vim: set et ts=4: diff --git a/abs/core/klibc-udev/post-107.patch b/abs/core/klibc-udev/post-107.patch new file mode 100644 index 0000000..cb6e618 --- /dev/null +++ b/abs/core/klibc-udev/post-107.patch @@ -0,0 +1,176 @@ +From: Matthias Schwarzott <zzam@gentoo.org> +Date: Thu, 22 Mar 2007 20:05:56 +0000 (+0100) +Subject: write_cd_rules: set default link type to "by-id" for usb and ieee1394 devices +X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=491a6a71ff685373422621f4b67f550806072d17 + +write_cd_rules: set default link type to "by-id" for usb and ieee1394 devices +--- + +diff --git a/extras/rule_generator/write_cd_rules b/extras/rule_generator/write_cd_rules +index 1dbe6b7..bd951c5 100644 +--- a/extras/rule_generator/write_cd_rules ++++ b/extras/rule_generator/write_cd_rules +@@ -53,7 +53,15 @@ fi + if [ "$1" ]; then + METHOD="$1" + else +- METHOD='by-path' ++ case "$ID_BUS" in ++ usb|ieee1394) ++ METHOD='by-id' ++ ;; ++ ++ *) ++ METHOD='by-path' ++ ;; ++ esac + fi + + case "$METHOD" in +From: Kay Sievers <kay.sievers@vrfy.org> +Date: Fri, 23 Mar 2007 16:17:18 +0000 (+0100) +Subject: udevinfo: relax check for the correct device if looked up by name +X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=be8594ab14f15203fcea4b2aa0115171472f3e43 + +udevinfo: relax check for the correct device if looked up by name +--- + +diff --git a/udev_db.c b/udev_db.c +index 00d68d6..7b8d02b 100644 +--- a/udev_db.c ++++ b/udev_db.c +@@ -186,7 +186,7 @@ int udev_db_get_device(struct udevice *udev, const char *devpath) + size_t cur; + size_t count; + +- strlcpy(udev->dev->devpath, devpath, sizeof(udev->dev->devpath)); ++ sysfs_device_set_values(udev->dev, devpath, NULL, NULL); + devpath_to_db_path(devpath, filename, sizeof(filename)); + + if (lstat(filename, &stats) != 0) { +diff --git a/udevinfo.c b/udevinfo.c +index 3f25be0..4b4876c 100644 +--- a/udevinfo.c ++++ b/udevinfo.c +@@ -173,13 +173,17 @@ static void export_db(void) { + static int lookup_device_by_name(struct udevice *udev, const char *name) + { + LIST_HEAD(name_list); ++ int count; + struct name_entry *device; + int rc = -1; + +- if (udev_db_get_devices_by_name(name, &name_list) <= 0) ++ count = udev_db_get_devices_by_name(name, &name_list); ++ if (count <= 0) + goto out; + +- /* select the device that matches the dev_t of name */ ++ info("found %i devices for '%s'", count, name); ++ ++ /* select the device that seems to match */ + list_for_each_entry(device, &name_list, node) { + char filename[PATH_SIZE]; + struct stat statbuf; +@@ -189,16 +193,18 @@ static int lookup_device_by_name(struct udevice *udev, const char *name) + continue; + info("found db entry '%s'", device->name); + ++ /* make sure, we don't get a link of a differnt device */ + strlcpy(filename, udev_root, sizeof(filename)); + strlcat(filename, "/", sizeof(filename)); + strlcat(filename, name, sizeof(filename)); + if (stat(filename, &statbuf) != 0) + continue; +- if (statbuf.st_rdev == udev->devt) { +- info("found '%s', dev_t matches", udev->name); +- rc = 0; +- break; ++ if (major(udev->devt) > 0 && udev->devt != statbuf.st_rdev) { ++ info("skip '%s', dev_t doesn't match", udev->name); ++ continue; + } ++ rc = 0; ++ break; + } + out: + name_list_cleanup(&name_list); +From: Kay Sievers <kay.sievers@vrfy.org> +Date: Fri, 23 Mar 2007 16:18:03 +0000 (+0100) +Subject: don't write to sysfs files during test run +X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=d2c9a56e0e624ed448aed8ad18460deed63973e1 + +don't write to sysfs files during test run +--- + +diff --git a/udev_rules.c b/udev_rules.c +index f8844a8..5078f2d 100644 +--- a/udev_rules.c ++++ b/udev_rules.c +@@ -861,8 +861,9 @@ try_parent: + info("writing '%s' to sysfs file '%s'", value, attr); + f = fopen(attr, "w"); + if (f != NULL) { +- if (fprintf(f, "%s", value) <= 0) +- err("error writing ATTR{%s}: %s", attr, strerror(errno)); ++ if (!udev->test_run) ++ if (fprintf(f, "%s", value) <= 0) ++ err("error writing ATTR{%s}: %s", attr, strerror(errno)); + fclose(f); + } else + err("error opening ATTR{%s} for writing: %s", attr, strerror(errno)); +From: Pozsar Balazs <pozsy@uhulinux.hu> +Date: Fri, 23 Mar 2007 16:21:46 +0000 (+0100) +Subject: udevsettle: read udev not kernel seqnum first +X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=4e2b290821d083361260f8cdbe7c54886463673e + +udevsettle: read udev not kernel seqnum first +--- + +diff --git a/udevsettle.c b/udevsettle.c +index 9e3e03b..f76ad71 100644 +--- a/udevsettle.c ++++ b/udevsettle.c +@@ -110,9 +110,9 @@ int main(int argc, char *argv[], char *envp[]) + goto exit; + } + +- /* read current kernel seqnum */ +- strlcpy(filename, sysfs_path, sizeof(filename)); +- strlcat(filename, "/kernel/uevent_seqnum", sizeof(filename)); ++ /* read current udev seqnum */ ++ strlcpy(filename, udev_root, sizeof(filename)); ++ strlcat(filename, "/" EVENT_SEQNUM, sizeof(filename)); + fd = open(filename, O_RDONLY); + if (fd < 0) + goto exit; +@@ -121,12 +121,12 @@ int main(int argc, char *argv[], char *envp[]) + if (len <= 0) + goto exit; + seqnum[len] = '\0'; +- seq_kernel = strtoull(seqnum, NULL, 10); +- info("kernel seqnum = %llu", seq_kernel); ++ seq_udev = strtoull(seqnum, NULL, 10); ++ info("udev seqnum = %llu", seq_udev); + +- /* read current udev seqnum */ +- strlcpy(filename, udev_root, sizeof(filename)); +- strlcat(filename, "/" EVENT_SEQNUM, sizeof(filename)); ++ /* read current kernel seqnum */ ++ strlcpy(filename, sysfs_path, sizeof(filename)); ++ strlcat(filename, "/kernel/uevent_seqnum", sizeof(filename)); + fd = open(filename, O_RDONLY); + if (fd < 0) + goto exit; +@@ -135,8 +135,8 @@ int main(int argc, char *argv[], char *envp[]) + if (len <= 0) + goto exit; + seqnum[len] = '\0'; +- seq_udev = strtoull(seqnum, NULL, 10); +- info("udev seqnum = %llu", seq_udev); ++ seq_kernel = strtoull(seqnum, NULL, 10); ++ info("kernel seqnum = %llu", seq_kernel); + + /* make sure all kernel events have arrived in the queue */ + if (seq_udev >= seq_kernel) { + diff --git a/abs/core/klibc-udev/start_udev b/abs/core/klibc-udev/start_udev new file mode 100755 index 0000000..8503bb9 --- /dev/null +++ b/abs/core/klibc-udev/start_udev @@ -0,0 +1,115 @@ +#! /bin/sh +# +# start_udev +# script to initialize /dev by using udev. +# +# Modified for Archlinux by Tobias Powalowski <tpowa@archlinux.org> +# +# Inspired by: +# +# Copyright (C) 2004 Greg Kroah-Hartman <greg@kroah.com> +# +# Released under the GPL v2 only. +# +# This needs to be run at the earliest possible point in the boot +# process. +# +# Based on the udev init.d script +# +# Thanks go out to the Gentoo developers for proving +# that this is possible to do. +# +# Yes, it's very verbose, feel free to turn off all of the echo calls, +# they were there to make me feel better that everything was working +# properly during development... + +prog=udev +sysfs_dir=/sys +bin=/sbin/udev +udevd=/sbin/udevd +udev_root="/dev" + +trigger_device_events () +{ + /sbin/udevtrigger +} + +wait_for_queue () +{ + # disabled because it hangs network boot + #loop=20 + #while ! [ "$loop" -gt 0 -a -d /dev/.udev/queue ]; do + # sleep 0.1; + # loop=$(($loop - 1)) + #done + /sbin/udevsettle +} + +make_extra_nodes () +{ + # there are a few things that sysfs does not export for us. + # these things go here (and remember to remove them in + # remove_extra_nodes() + # + # Thanks to Gentoo for the initial list of these. + ln -sf /proc/self/fd $udev_root/fd + ln -sf /proc/self/fd/0 $udev_root/stdin + ln -sf /proc/self/fd/1 $udev_root/stdout + ln -sf /proc/self/fd/2 $udev_root/stderr + ln -sf /proc/kcore $udev_root/core +} + +udev_init () +{ +# don't use udev if sysfs is not mounted. +if [ ! -d $sysfs_dir/block ]; then + exit 1 +fi + +# Do not mount ramfs, we are already in ramfs +#mount -t ramfs none $udev_root + +# propogate /udev from /sys +#echo "Creating initial udev device nodes:" + +#echo "making extra nodes" +make_extra_nodes + +# check if udevd is already running +#echo "start udev daemon" +/sbin/udevd --daemon + +case "$(uname -r)" in + 2.6.[0-9]|2.6.[0-9][!0-9]*) ;; + *) if [ -f "/sys/class/tty/console/uevent" ]; then + #echo "Kernel >= 2.6.15 and supports uevents" + # trigger the sorted events + echo -e '\000\000\000\000' > /proc/sys/kernel/hotplug + # catch events that are real fast + mkdir -p /dev/.udev/queue + else + # for older kernels without uevents will be removed when udevstart dies in udev + echo "Kernel does not support uevents, you need a kernel >= 2.6.15!" + exit 1 + fi + ;; +esac +} + +udev_uevents () +{ +# configure all devices +trigger_device_events +# until we know how to do better, just wait for _all_ events to finish +wait_for_queue +} + +if [ $# -eq 0 ]; then +udev_init +udev_uevents +fi + +[ "$1" = "init" ] && udev_init +[ "$1" = "uevents" ] && udev_uevents + +exit 0 diff --git a/abs/core/klibc-udev/udev.rules b/abs/core/klibc-udev/udev.rules new file mode 100644 index 0000000..22f422a --- /dev/null +++ b/abs/core/klibc-udev/udev.rules @@ -0,0 +1,187 @@ +# Udev rules for Archlinux by Tobias Powalowski <tpowa@archlinux.org> +# +# This ruleset should provide a DevFS-compatible device tree. +# +# There are a number of modifiers that are allowed to be used in some +# of the different fields. They provide the following subsitutions: +# +# %n the "kernel number" of the device. +# For example, 'sda3' has a "kernel number" of '3' +# %k the kernel name for the device. +# %M the kernel major number for the device +# %m the kernel minor number for the device +# %b the bus id for the device +# %c the string returned by the PROGRAM +# %s{filename} the content of a sysfs attribute. +# %% the '%' char itself. +# +# There are a number of modifiers that are allowed to be used in some of the +# fields. See the udev man page for a full description of them. +# global stuff +# + +##################################### +# Early rules - begin +##################################### +# wait for sysfs +ACTION=="add", KERNEL=="[0-9]*:[0-9]*", SUBSYSTEM=="scsi", WAIT_FOR_SYSFS="ioerr_cnt" +# Setting timeout for tape-devices (type 1) to 900 seconds +# and 60 seconds for device types 0, 7 and 14 +SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", ACTION=="add", ATTR{type}=="0|7|14", ATTR{timeout}="60" +SUBSYSTEM=="scsi", KERNEL=="[0-9]*:[0-9]*", ACTION=="add", ATTR{type}=="1", ATTR{timeout}="900" +##################################### +# Early rules -end +##################################### + +##################################### +###### Hotplug rules - begin +##################################### + +# Modaliases to load +ACTION=="add", ENV{MODALIAS}=="?*", RUN{ignore_error}+="/lib/udev/load-modules.sh $env{MODALIAS}" +# SCSI addon modules +ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="[07]", RUN+="/lib/udev/load-modules.sh sd_mod" +ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="14", RUN+="/lib/udev/load-modules.sh sd_mod" +ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="[45]", RUN+="/lib/udev/load-modules.sh sr_mod" +ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}=="Onstream", ATTRS{model}!="ADR*", RUN+="/lib/udev/load-modules.sh osst" +ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}=="Onstream", ATTRS{model}=="ADR*", RUN+="/lib/udev/load-modules.sh st" +ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="1", ATTRS{vendor}!="Onstream", RUN+="/lib/udev/load-modules.sh st" +ACTION=="add", SUBSYSTEM=="scsi", ATTRS{type}=="[23689]", TEST!="[module/sg]", RUN+="/lib/udev/load-modules.sh sg" +ACTION=="add", SUBSYSTEM=="mmc", RUN+="/lib/udev/load-modules.sh mmc_block" + +LABEL="hotplug_driver_loaded" + +# FIRMWARE +ACTION=="add", SUBSYSTEM=="firmware", ENV{FIRMWARE}=="?*", RUN+="/lib/udev/firmware.sh" +##################################### +##### Hotplug rules - end +##################################### + +##################################### +###### CD/DVD symlinks - begin +##################################### +ACTION=="add", SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", IMPORT="/lib/udev/cdrom_id --export $tempnode" +ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="sr[0-9]*", IMPORT="/lib/udev/cdrom_id --export $tempnode" +ACTION=="add", SUBSYSTEMS=="scsi", KERNEL=="scd[a-z]", IMPORT="/lib/udev/cdrom_id --export $tempnode" +ENV{ID_CDROM}=="?*", SYMLINK+="cd/cdrom-%b" +ENV{ID_CDROM_CD_RW}=="?*", SYMLINK+="cd/cdrw-%b" +ENV{ID_CDROM_DVD}=="?*", SYMLINK+="cd/dvd-%b" +ENV{ID_CDROM_DVD_R}=="?*", SYMLINK+="cd/dvd-%b" +##################################### +###### CD/DVD symlinks - end +##################################### + +##################################### +##### PCMCIA rules - begin +##################################### +# PCMCIA devices: +# + +# Very few CIS firmware entries (which we use for matching) +# are so broken that we need to read out random bytes of it +# instead of the manufactor, card or product ID. Then the +# matching is done in userspace. +ACTION=="add", SUBSYSTEM=="pcmcia", ENV{MODALIAS}=="?*", RUN+="/sbin/pcmcia-check-broken-cis.static" + +# However, the "weak" matching by func_id is only allowed _after_ modprobe +# returns, so that "strong" matches have a higher priority. +ACTION=="add", SUBSYSTEM=="pcmcia", ENV{MODALIAS}=="?*", RUN+="/bin/sh -c 'echo 1 > /sys/$devpath/allow_func_id_match'" + +# PCMCIA sockets: +# +# modprobe the pcmcia bus module so that 16-bit PCMCIA devices work +ACTION=="add", SUBSYSTEM=="pcmcia_socket", RUN+="/lib/udev/load-modules.sh pcmcia" + +# if this is a PCMCIA socket which needs a resource database, +# pcmcia-socket-startup sets it up +ACTION=="add", SUBSYSTEM=="pcmcia_socket", RUN+="/sbin/pcmcia-socket-startup.static" +##################################### +##### PCMCIA rules - end +##################################### + +####################################### +# Persistant block device stuff - begin +####################################### +# persistent storage links: /dev/{disk,tape}/{by-id,by-uuid,by-label,by-path,by-name} +# scheme based on "Linux persistent device names", 2004, Hannes Reinecke <hare@suse.de> + +# needed like this!!! +ACTION!="add|change", GOTO="persistent_storage_end" +#KERNEL=="nst[0-9]", SUBSYSTEMS=="scsi", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --fallback-to-sysfs -s %p -d $tempnode", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}-nst" + +# type 8 devices are "Medium Changers" +#KERNEL=="sg*", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --fallback-to-sysfs -s %p -d $tempnode", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}" +SUBSYSTEM!="block", GOTO="persistent_storage_end" + +# skip rules for inappropriate block devices +# don't add dm-*!!! +KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|md*", GOTO="persistent_storage_end" + +# never access non-cdrom removable ide devices, the drivers are causing event loops on open() +KERNEL=="hd*[!0-9]", ATTR{removable}=="1", DRIVERS=="ide-cs|ide-floppy", GOTO="persistent_storage_end" +KERNEL=="hd*[0-9]", ATTRS{removable}=="1", GOTO="persistent_storage_end" + +# ignore partitions that span the entire disk +ATTR{whole_disk}=="*", GOTO="persistent_storage_end" + +# /sys/class/block will export this +ENV{DEVTYPE}!="?*", ATTR{range}=="?*", ENV{DEVTYPE}="disk" +ENV{DEVTYPE}!="?*", ATTR{start}=="?*", ENV{DEVTYPE}="partition" + +# for partitions import parent information +ENV{DEVTYPE}=="partition", IMPORT{parent}="ID_*" + +# by-id (hardware serial number) +KERNEL=="hd*[!0-9]", IMPORT{program}="/lib/udev/ata_id --export $tempnode" +KERNEL=="hd*[!0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_MODEL}_$env{ID_SERIAL}" +KERNEL=="hd*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_MODEL}_$env{ID_SERIAL}-part%n" + +KERNEL=="sd*[!0-9]|sr*|st*", ATTRS{ieee1394_id}=="?*", ENV{ID_SERIAL}="$attr{ieee1394_id}", ENV{ID_SUBSYSTEMS}="ieee1394" +KERNEL=="sd*[!0-9]|sr*|st*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{program}="/lib/udev/usb_id --export %p" +#KERNEL=="sd*[!0-9]|sr*|st*", ENV{ID_SERIAL}!="?*", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --fallback-to-sysfs -s %p -d $tempnode" +#KERNEL=="cciss?c[0-9]d[0-9]", ENV{ID_SERIAL}!="?*", IMPORT{program}="/lib/udev/scsi_id --export --whitelisted --ignore-sysfs -s %p -d $tempnode", ENV{ID_BUS}="cciss" +KERNEL=="sd*[!0-9]|sr*|cciss?c[0-9]d[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}" +KERNEL=="sd*[0-9]|cciss*p[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n" +KERNEL=="st*", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}" + +# libata compat (links like hd*) +KERNEL=="sd*[!0-9]|sr*", ENV{ID_VENDOR}=="ATA", PROGRAM="/lib/udev/ata_id $tempnode", RESULT=="?*", ENV{ID_ATA_COMPAT}="$result", SYMLINK+="disk/by-id/ata-$env{ID_ATA_COMPAT}" +KERNEL=="sd*[0-9]", ENV{ID_ATA_COMPAT}=="?*", SYMLINK+="disk/by-id/ata-$env{ID_ATA_COMPAT}-part%n" + +KERNEL=="mmcblk[0-9]", SUBSYSTEMS=="mmc", ATTRS{name}=="?*", ATTRS{serial}=="?*", ENV{ID_NAME}="$attr{name}", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}" +KERNEL=="mmcblk[0-9]p[0-9]", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}-part%n" + +# by-path (shortest physical path) broken atm +#ENV{DEVTYPE}=="disk", IMPORT{program}="/lib/udev/path_id %p" +#ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}" +#ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-part%n" +#KERNEL=="st*", ENV{ID_PATH}=="?*", SYMLINK+="tape/by-path/$env{ID_PATH}" + +KERNEL=="sr*|st*", GOTO="persistent_storage_end" +KERNEL=="hd*[!0-9]", ATTR{removable}=="1", GOTO="persistent_storage_end" + +# by-label/by-uuid (filesystem properties) +IMPORT{program}="/lib/udev/vol_id --export $tempnode" +ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" +ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" + +# BIOS Enhanced Disk Device +ENV{DEVTYPE}=="disk", IMPORT{program}="/lib/udev/edd_id --export $tempnode" +ENV{DEVTYPE}=="disk", ENV{ID_EDD}=="?*", SYMLINK+="disk/by-id/edd-$env{ID_EDD}" +ENV{DEVTYPE}=="partition", ENV{ID_EDD}=="?*", SYMLINK+="disk/by-id/edd-$env{ID_EDD}-part%n" +LABEL="persistent_storage_end" + +# md links hook into "change" events, when the array becomes available +KERNEL!="md[0-9]*", GOTO="md_end" +ACTION!="add|change", GOTO="md_end" + +ATTR{md/array_state}=="|clear|inactive", GOTO="md_end" +IMPORT{program}="/lib/udev/vol_id --export $tempnode" +OPTIONS="link_priority=100" +ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" +ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"" + +LABEL="md_end" +##################################### +# Persistant block device stuff - end +##################################### diff --git a/abs/core/klibc-udev/udev_hook b/abs/core/klibc-udev/udev_hook new file mode 100644 index 0000000..fc4c814 --- /dev/null +++ b/abs/core/klibc-udev/udev_hook @@ -0,0 +1,7 @@ +# vim: set ft=sh: +run_hook () +{ + msg -n ":: Loading udev..." + /etc/start_udev + msg "done." +} diff --git a/abs/core/klibc-udev/udev_install b/abs/core/klibc-udev/udev_install new file mode 100644 index 0000000..62d5b00 --- /dev/null +++ b/abs/core/klibc-udev/udev_install @@ -0,0 +1,31 @@ +# vim:set ft=sh: + +install () +{ + MODULES="" + BINARIES="" + FILES=" /etc/udev/udev.conf" + SCRIPT="udev" + add_file /lib/initcpio/udev/udevd /sbin/udevd + add_file /lib/initcpio/udev/udevtrigger /sbin/udevtrigger + add_file /lib/initcpio/udev/udevsettle /sbin/udevsettle + add_file /lib/initcpio/udev/udev.rules /etc/udev/rules.d/udev.rules + add_file /lib/initcpio/udev/start_udev /etc/start_udev + add_file /lib/initcpio/udev/firmware.sh /lib/udev/firmware.sh + add_file /lib/initcpio/udev/cdrom_id /lib/udev/cdrom_id + add_file /lib/initcpio/udev/ata_id /lib/udev/ata_id + add_file /lib/initcpio/udev/usb_id /lib/udev/usb_id + add_file /lib/initcpio/udev/edd_id /lib/udev/edd_id + #add_file /lib/initcpio/udev/scsi_id /lib/udev/scsi_id + add_file /lib/initcpio/udev/vol_id /lib/udev/vol_id + add_file /lib/initcpio/udev/load-modules.sh /lib/udev/load-modules.sh +} + +help () +{ +cat <<HELPEOF + This hook will use udev to create your root device node + and detect the needed modules for your root device. + It is recommended to use this hook instead of modload. +HELPEOF +} diff --git a/abs/core/klibc-udev/vol_id-suspend2.patch b/abs/core/klibc-udev/vol_id-suspend2.patch new file mode 100644 index 0000000..525e17e --- /dev/null +++ b/abs/core/klibc-udev/vol_id-suspend2.patch @@ -0,0 +1,15 @@ +diff -Nur udev-103.orig/extras/volume_id/lib/linux_swap.c udev-103/extras/volume_id/lib/linux_swap.c +--- udev-103.orig/extras/volume_id/lib/linux_swap.c 2006-10-20 14:43:35.000000000 +0200 ++++ udev-103/extras/volume_id/lib/linux_swap.c 2006-10-29 17:15:19.000000000 +0100 +@@ -73,6 +73,11 @@ + strcpy(id->type_version, "ulsuspend"); + goto found_label; + } ++ if (memcmp(buf, "z", 1) == 0 || memcmp(buf, "Z", 1) == 0) { ++ id->type = "suspend"; ++ strcpy(id->type_version, "suspend2"); ++ goto found_label; ++ } + } + return -1; + |