]>
Commit | Line | Data |
---|---|---|
72056d12 | 1 | #!/bin/sh |
72056d12 | 2 | # geninitrd mod: udev |
6e49b0b1 | 3 | USE_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 |
10 | inst_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 | |
26 | setup_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 | |
41 | initrd_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 | ||
105 | initrd_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 | |
117 | initrd_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 | ||
133 | null 0:0 666 | |
134 | zero 0:0 666 | |
31bfdce0 AM |
135 | random 0:0 666 |
136 | urandom 0:0 666 | |
13659675 | 137 | |
31bfdce0 | 138 | kmsg 0:0 644 |
13659675 AM |
139 | kmem 0:9 000 |
140 | mem 0:9 640 | |
141 | port 0:9 640 | |
142 | ||
31bfdce0 AM |
143 | snapshot 0:0 600 |
144 | ||
13659675 | 145 | console 0:5 600 |
31bfdce0 AM |
146 | ptmx 0:5 666 |
147 | tty[0-9]* 0:5 600 | |
13659675 | 148 | |
31bfdce0 | 149 | ttyS[0-9]* 0:16 660 |
13659675 | 150 | |
31bfdce0 | 151 | fd[0-9]* 0:19 660 |
13659675 AM |
152 | |
153 | sd[a-z]* 0:6 660 | |
154 | hd[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 | ||
168 | initrd_gen_stop_mdev() { | |
169 | add_linuxrc <<-'EOF' | |
985c7aef | 170 | killall uevent > /dev/null 2>&1 |
382ce856 AM |
171 | EOF |
172 | } |