48 lines
1.1 KiB
Bash
48 lines
1.1 KiB
Bash
#!/bin/sh
|
|
|
|
function make_minors {
|
|
let part=1
|
|
while (($part < $minors)); do
|
|
let minor=$part+$2
|
|
mknod $1$part b $major $minor
|
|
let part=$part+1
|
|
done
|
|
}
|
|
|
|
|
|
# FIXME: This isn't handling minors (partitions) at all.
|
|
module="sbull"
|
|
device="sbull"
|
|
mode="664"
|
|
chardevice="sbullr"
|
|
minors=16
|
|
|
|
# Group: since distributions do it differently, look for wheel or use staff
|
|
if grep '^staff:' /etc/group > /dev/null; then
|
|
group="staff"
|
|
else
|
|
group="wheel"
|
|
fi
|
|
|
|
# invoke insmod with all arguments we got
|
|
# and use a pathname, as newer modutils don't look in . by default
|
|
/sbin/insmod -f ./$module.ko $* || exit 1
|
|
|
|
major=`cat /proc/devices | awk "\\$2==\"$module\" {print \\$1}"`
|
|
|
|
# Remove stale nodes and replace them, then give gid and perms
|
|
|
|
rm -f /dev/${device}[a-d]* /dev/${device}
|
|
|
|
mknod /dev/${device}a b $major 0
|
|
make_minors /dev/${device}a 0
|
|
mknod /dev/${device}b b $major 16
|
|
make_minors /dev/${device}b 16
|
|
mknod /dev/${device}c b $major 32
|
|
make_minors /dev/${device}c 32
|
|
mknod /dev/${device}d b $major 48
|
|
make_minors /dev/${device}d 48
|
|
ln -sf ${device}a /dev/${device}
|
|
chgrp $group /dev/${device}[a-d]*
|
|
chmod $mode /dev/${device}[a-d]*
|