📄 scull.init
字号:
#!/bin/bash# Sample init script for the a driver module <rubini@linux.it>DEVICE="scull"SECTION="misc"# The list of filenames and minor numbers: $PREFIX is prefixed to all namesPREFIX="scull"FILES=" 0 0 1 1 2 2 3 3 priv 16 pipe0 32 pipe1 33 pipe2 34 pipe3 35 single 48 uid 64 wuid 80"INSMOD=/sbin/insmod; # use /sbin/modprobe if you preferfunction device_specific_post_load () { true; # fill at will}function device_specific_pre_unload () { true; # fill at will}# Everything below this line should work unchanged for any char device.# Obviously, however, no options on the command line: either in# /etc/${DEVICE}.conf or /etc/modules.conf (if modprobe is used)# Optional configuration file: format is# owner <ownername># group <groupname># mode <modename># options <insmod options>CFG=/etc/${DEVICE}.conf# kernel version, used to look for modulesKERNEL=`uname -r`#FIXME: it looks like there is no misc section. Where should it be?MODDIR="/lib/modules/${KERNEL}/kernel/drivers/${SECTION}"if [ ! -d $MODDIR ]; then MODDIR="/lib/modules/${KERNEL}/${SECTION}"; fi# Root or dieif [ "$(id -u)" != "0" ]then echo "You must be root to load or unload kernel modules" exit 1fi# Read configuration fileif [ -r $CFG ]; then OWNER=`awk "\\$1==\"owner\" {print \\$2}" $CFG` GROUP=`awk "\\$1==\"group\" {print \\$2}" $CFG` MODE=`awk "\\$1==\"mode\" {print \\$2}" $CFG` # The options string may include extra blanks or only blanks OPTIONS=`sed -n '/^options / s/options //p' $CFG`fi# Create device filesfunction create_files () { cd /dev local devlist="" local file while true; do if [ $# -lt 2 ]; then break; fi file="${DEVICE}$1" mknod $file c $MAJOR $2 devlist="$devlist $file" shift 2 done if [ -n "$OWNER" ]; then chown $OWNER $devlist; fi if [ -n "$GROUP" ]; then chgrp $GROUP $devlist; fi if [ -n "$MODE" ]; then chmod $MODE $devlist; fi}# Remove device filesfunction remove_files () { cd /dev local devlist="" local file while true; do if [ $# -lt 2 ]; then break; fi file="${DEVICE}$1" devlist="$devlist $file" shift 2 done rm -f $devlist}# Load and create filesfunction load_device () { if [ -f $MODDIR/$DEVICE.o ]; then devpath=$MODDIR/$DEVICE.o else if [ -f ./$DEVICE.o ]; then devpath=./$DEVICE.o else devpath=$DEVICE; # let insmod/modprobe guess fi; fi if [ "$devpath" != "$DEVICE" ]; then echo -n " (loading file $devpath)" fi if $INSMOD $devpath $OPTIONS; then MAJOR=`awk "\\$2==\"$DEVICE\" {print \\$1}" /proc/devices` remove_files $FILES create_files $FILES device_specific_post_load else echo " FAILED!" fi}# Unload and remove filesfunction unload_device () { device_specific_pre_unload /sbin/rmmod $DEVICE remove_files $FILES}case "$1" in start) echo -n "Loading $DEVICE" load_device echo "." ;; stop) echo -n "Unloading $DEVICE" unload_device echo "." ;; force-reload|restart) echo -n "Reloading $DEVICE" unload_device load_device echo "." ;; *) echo "Usage: $0 {start|stop|restart|force-reload}" exit 1esacexit 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -