]> git.pld-linux.org Git - projects/geninitrd.git/blame - mod-udev.sh
Timeout here is not a good idea. rootfs cannot be mounted and kernel oopses due to...
[projects/geninitrd.git] / mod-udev.sh
CommitLineData
72056d12 1#!/bin/sh
72056d12 2# geninitrd mod: udev
6e49b0b1 3USE_UDEV=${USE_UDEV:-yes}
72056d12
ER
4
5#
6# TODO:
7# - make udev start before insmods
8# - make proper use of USE_UDEV - don't copy rules if USE_UDEV is off no!
9
0127fd8c
AF
10inst_rules() {
11 local _rule _found d
12
13 inst_d "/lib/udev/rules.d"
14 for _rule in "$@"; do
1b72cda6 15 for d in /lib/udev/rules.d /etc/udev/rules.d /lib/geninitrd/udev-rules; do
0127fd8c
AF
16 if [ -f $d/$_rule ]; then
17 inst $d/$_rule /lib/udev/rules.d/$_rule
18 fi
19 done
20 done
21
22}
23
c124d0cf
ER
24# setup geninitrd module
25# @access public
26setup_mod_udev() {
27 udevd=$(find_tool $initrd_dir/udevd /sbin/initrd-udevd)
fad1ded6 28 udevadm=$(find_tool $initrd_dir/udevadm /sbin/initrd-udevadm)
72056d12 29
6e49b0b1 30 if [ "$kernel_version" -lt "002006" ] || [ ! -x "$udevd" -o ! -x "$udevadm" -o ! -f /etc/udev/udev.conf ]; then
c124d0cf
ER
31 USE_UDEV=no
32 fi
6e49b0b1
ER
33
34 if is_yes "$USE_UDEV"; then
35 . /etc/udev/udev.conf
36 fi
c124d0cf 37}
72056d12
ER
38
39# generate initrd fragment
40# @access public
41initrd_gen_udev() {
02ba8ab7 42 verbose "Setting up udev..."
72056d12 43
3d81f1cd 44 inst_d /sbin /etc/udev /lib/udev
72056d12
ER
45 inst_exec $udevd /sbin/udevd
46 inst_exec $udevadm /sbin/udevadm
47 inst /etc/udev/udev.conf /etc/udev/udev.conf
0127fd8c
AF
48 # standard udev rules
49 inst_rules 50-udev-default.rules 60-persistent-storage.rules 61-persistent-storage-edd.rules 80-drivers.rules 95-udev-late.rules \
c6e700c3 50 60-pcmcia.rules 50-firmware.rules 10-dm.rules 11-dm-lvm.rules 13-dm-disk.rules 95-dm-notify.rules
1b72cda6
AF
51 # initrd dedicated rules
52 inst_rules 01-ignore.rules 59-persistent-storage.rules 61-persistent-storage.rules 11-dm.rules
0127fd8c 53
4c84a24b 54 local e
0127fd8c 55 for e in ata_id cdrom_id collect firmware scsi_id v4l_id; do
338975c8
AM
56 if [ -e "$initrd_dir/udev/$e" ]; then
57 inst_exec $initrd_dir/udev/$e /lib/udev/$e
21ad0f79
AM
58 elif [ -e "/lib/udev/$e" ]; then
59 inst_exec /lib/udev/$e /lib/udev/$e
338975c8 60 fi
0127fd8c 61 done
5de12904 62
635f899f
AM
63 # basic group file
64 local _lib
65 inst /etc/nsswitch.conf /etc/nsswitch.conf
66 for _lib in $(get_libdir LIBDIR); do
67 if (ls /$_lib/libnss_files*.so* > /dev/null 2>&1); then
68 inst_exec /$_lib/libnss_files*.so* /$_lib/
69 fi
70 done
71 awk -F: ' { if ($3 < 1000) { print $1":"$2":"$3":" } } ' /etc/group > $DESTDIR/etc/group
72
5de12904
ER
73 # blkid installed by mod-blkid
74 if ! is_yes "$USE_BLKID"; then
75 warn "BLKID support missing"
76 fi
4c84a24b
AF
77
78 local dir dmsetup
79 for dir in $initrd_dir /sbin; do
78b5874a
ER
80 if [ -x "$dir/dmsetup" ] &&
81 [ "$($dir/dmsetup udevcookies 2>&1 | grep -c 'Command not supported')" -eq 0 ]; then
4c84a24b
AF
82 dmsetup=$dir/dmsetup
83 break
84 fi
85 done
86 if [ -z "$dmsetup" ]; then
87 warn "Can't find dmsetup with udev support"
88 else
89 inst_exec $dmsetup /sbin/dmsetup
90 fi
72056d12
ER
91
92 mount_dev
93 mount_sys
5e41e841 94 mount_run
72056d12
ER
95 add_linuxrc <<-'EOF'
96 : 'Starting udev'
5e41e841 97 mkdir /run/udev
72056d12 98 /sbin/udevd --daemon
e8d76169
AF
99 /sbin/udevadm trigger --type=subsystems --action=add
100 /sbin/udevadm trigger --type=devices --action=add
72056d12
ER
101 /sbin/udevadm settle
102 EOF
103}
104
105initrd_gen_stop_udevd() {
1b481849
ER
106 if ! is_yes "$USE_UDEV"; then
107 return
108 fi
72056d12 109 add_linuxrc <<-'EOF'
9aef38eb
AF
110 /sbin/udevadm control --exit
111 /sbin/udevadm info --cleanup-db
72056d12
ER
112 EOF
113}
382ce856
AM
114
115# generate initrd fragment
116# @access public
117initrd_gen_mdev() {
118 debug "Setting up mdev..."
119
985c7aef 120 busybox_applet mdev uevent
382ce856 121 ln -s busybox $DESTDIR/bin/mdev
985c7aef 122 ln -s busybox $DESTDIR/bin/uevent
382ce856 123
13659675
AM
124 cat > $DESTDIR/etc/mdev.conf <<-'EOF'
125# Provide user, group, and mode information for devices. If a regex matches
126# the device name provided by sysfs, use the appropriate user:group and mode
127# instead of the default 0:0 660.
128#
129# Syntax:
130# %s %d:%d %s
131# devicename_regex user:group mode
132
133null 0:0 666
134zero 0:0 666
31bfdce0
AM
135random 0:0 666
136urandom 0:0 666
13659675 137
31bfdce0 138kmsg 0:0 644
13659675
AM
139kmem 0:9 000
140mem 0:9 640
141port 0:9 640
142
31bfdce0
AM
143snapshot 0:0 600
144
13659675 145console 0:5 600
31bfdce0
AM
146ptmx 0:5 666
147tty[0-9]* 0:5 600
13659675 148
31bfdce0 149ttyS[0-9]* 0:16 660
13659675 150
31bfdce0 151fd[0-9]* 0:19 660
13659675
AM
152
153sd[a-z]* 0:6 660
154hd[a-z]* 0:6 660
155 EOF
156
382ce856
AM
157 mount_dev
158 mount_sys
159 mount_run
160 add_linuxrc <<-'EOF'
dcbfbe6e
AM
161 # \n needed in mdev.seq
162 echo > /dev/mdev.seq
985c7aef 163 uevent mdev &
382ce856
AM
164 mdev -s
165 EOF
166}
167
168initrd_gen_stop_mdev() {
169 add_linuxrc <<-'EOF'
985c7aef 170 killall uevent > /dev/null 2>&1
382ce856
AM
171 EOF
172}
This page took 1.46251 seconds and 4 git commands to generate.