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