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