⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scull.init

📁 Linux Device Drivers 2nd 经典书籍的配套源码
💻 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 + -